Skip to content

feat: expose events (on_double_tap, on_pan_start) in WindowDragArea #5043

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Apr 5, 2025

Conversation

ndonkoHenri
Copy link
Contributor

@ndonkoHenri ndonkoHenri commented Mar 7, 2025

Resolves #5018

Test Code

import flet as ft


def main(page: ft.Page):
    page.vertical_alignment = ft.MainAxisAlignment.CENTER
    page.horizontal_alignment = ft.CrossAxisAlignment.CENTER
    page.spacing = 20

    page.add(
        ft.WindowDragArea(
            content=ft.Container(
                content=ft.Text("maximizable=True"),
                alignment=ft.alignment.center,
                bgcolor=ft.Colors.RED,
                width=300,
                height=200,
            ),
            maximizable=True,
            on_double_tap=lambda e: print("W1 on_double_tap"),
            on_pan_start=lambda e: print("W1 on_pan_start"),
        ),
        ft.WindowDragArea(
            content=ft.Container(
                content=ft.Text("maximizable=False"),
                alignment=ft.alignment.center,
                bgcolor=ft.Colors.BLUE,
                width=300,
                height=200,
            ),
            maximizable=False,
            on_pan_start=lambda e: print("W2 on_pan_start"),
        ),
    )


ft.app(target=main)

Summary by Sourcery

The pull request introduces new events (on_double_tap, on_pan_start) to the WindowDragArea control, allowing developers to handle double taps and pan start gestures within the drag area. It also modifies the control to inherit from GestureDetector instead of ConstrainedControl.

New Features:

  • Expose on_double_tap event to handle double taps within the drag area.
  • Expose on_pan_start event to handle pan start gestures within the drag area.
  • Make the window maximizable on double tap if maximizable is set to True.
  • Call start_dragging on the window to initiate window dragging on pan start.

@FeodorFitsner
Copy link
Contributor

I'm not sure I understand what's going on in this PR. Are we removing WindowDragArea? https://github.com/flet-dev/flet/pull/5043/files#diff-6bc0e2227f3ecce8b0d504433f02df9902a7e3ce0fa7979b3e43c3b95194abc5

@ndonkoHenri
Copy link
Contributor Author

Dart end has been removed and WDA has been rebuilt on python end only, as a custom control.

Give it a try.

@FeodorFitsner FeodorFitsner added this to the Flet v0.28.0 milestone Apr 5, 2025
@FeodorFitsner FeodorFitsner merged commit 440009d into main Apr 5, 2025
3 checks passed
@FeodorFitsner FeodorFitsner deleted the ndonkoHenri/window-drag-area branch April 5, 2025 00:04
FeodorFitsner pushed a commit that referenced this pull request Apr 5, 2025
…rea` (#5043)

* improve events typing in gesture_detector.py

* window.start_dragging

* delete window_drag_area.dart

* rework WindowDragArea inheriting from GestureDetector

* export more utils
FeodorFitsner added a commit that referenced this pull request Jun 19, 2025
commit 2a1facb
Author: Henning Wilmer <57907680+HenningCode@users.noreply.github.com>
Date:   Thu Jun 12 18:37:58 2025 +0200

    Change the type alias from a class to a real rename (#5258)

commit 8f83b45
Author: PythonPan <2292551082@qq.com>
Date:   Fri Jun 13 00:29:49 2025 +0800

    Fix  page.run_thread does not receive kwargs (#5318) (#5320)

commit bf09a2c
Author: Antón Fernández Pérez <134967595+SIRGPrice@users.noreply.github.com>
Date:   Wed Jun 11 21:16:41 2025 +0200

    Update remove_control_payload.dart (#5353)

    Android apk app randomly generates this error in logcat:

    E  [ERROR:flutter/runtime/dart_vm_initializer.cc(40)] Unhandled Exception: type 'Null' is not a subtype of type 'String'
                                                                                                        #0      new List.from (dart:core-patch/array_patch.dart:30)
                                                                                                        #1      new RemoveControlPayload.fromJson (package:flet/src/protocol/remove_control_payload.dart:7)
                                                                                                        #2      appReducer (package:flet/src/reducers.dart:376)
                                                                                                        #3      Store._createReduceAndNotify.<anonymous closure> (package:redux/src/store.dart:235)
                                                                                                        #4      Store.dispatch (package:redux/src/store.dart:267)
                                                                                                        #5      FletServer._onMessage (package:flet/src/flet_server.dart:265)
                                                                                                        #6      FletTcpSocketServerProtocol._onMessage (package:flet/src/flet_server_protocol_tcp_socket.dart:125)
                                                                                                        #7      FletTcpSocketServerProtocol.connect.<anonymous closure> (package:flet/src/flet_server_protocol_tcp_socket.dart:94)
                                                                                                        #8      _RootZone.runUnaryGuarded (dart:async/zone.dart:1778)
                                                                                                        #9      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381)
                                                                                                        #10     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312)
                                                                                                        #11     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:798)
                                                                                                        #12     _StreamController._add (dart:async/stream_controller.dart:663)
                                                                                                        #13     _StreamController.add (dart:async/stream_controller.dart:618)
                                                                                                        #14     _Socket._onData (dart:io-patch/socket_patch.dart:2904)
                                                                                                        #15     _RootZone.runUnaryGuarded (dart:async/zone.dart:1778)
                                                                                                        #16     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381)
                                                                                                        #17     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:312)
                                                                                                        #18     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:798)
                                                                                                        #19     _StreamController._add (dart:async/stream_controller.dart:663)
                                                                                                        #20     _StreamController.add (dart:async/stream_controller.dart:618)
                                                                                                        #21     new _RawSocket.<anonymous closure> (dart:io-patch/socket_patch.dart:2323)
                                                                                                        #22     _NativeSocket.issueReadEvent.issue (dart:io-patch/socket_patch.dart:1646)
                                                                                                        #23     _microtaskLoop (dart:async/schedule_microtask.dart:40)
                                                                                                        #24     _startMicrotaskLoop (dart:async/schedule_microtask.dart:49)

commit 1c040ef
Author: Feodor Fitsner <feodor@appveyor.com>
Date:   Sun May 18 20:13:06 2025 -0400

    Preparing Flet v0.28.3 release (#5306)

    * Fix images displaying in web mode with non-empty page name

    Fix #5198

    * Fix page.on_view_pop event handling

    Fix #5302

    * Fix FilePicker.save_file() for Android and iOS

    Fix #5301

    * PubSub: allow multiple subscribers per session, per topic

    Close #5303

    * Bump version to 0.28.3, updated changelog

commit 69e4e10
Author: Feodor Fitsner <feodor@appveyor.com>
Date:   Sat May 10 13:49:30 2025 -0700

    Prepare Flet 0.28.2 (#5295)

    * Added missing imports into `__init__.py`

    * Changelog, bumped version to 0.28.2

    * fix WindowDragArea

    * update code in readme

    * Upated changelog

    ---------

    Co-authored-by: ndonkoHenri <robotcoder4@protonmail.com>

commit 7ce8e48
Author: Feodor Fitsner <feodor@appveyor.com>
Date:   Thu May 8 12:38:37 2025 -0700

    Update .appveyor.yml

commit deb38c7
Author: Feodor Fitsner <feodor@appveyor.com>
Date:   Thu May 8 09:11:14 2025 -0700

    v0.28.0 release notes (#5286)

    * v0.28.0 release notes

    * Fix "Fixed:"

commit fcc712f
Author: Feodor Fitsner <feodor@appveyor.com>
Date:   Wed May 7 10:29:03 2025 -0700

    `View.can_pop` and `View.on_confirm_pop` (#5284)

    * View.can_pop and View.on_confirm_pop

    * Dismissible and View: added 5 minutes timeout for confirm callbacks

commit c3d550a
Author: Owen McDonnell <7119543+OwenMcDonnell@users.noreply.github.com>
Date:   Sat May 3 16:41:10 2025 -0700

    Update CONTRIBUTING.md (#5268)

    note about activating .zprofile variables.

commit f4b83ae
Author: bl1nch <130155870+bl1nch@users.noreply.github.com>
Date:   Tue Apr 29 07:31:08 2025 +0600

    UTF-8 encoding for pyproject.toml (#5203)

commit e3f4d16
Author: Feodor Fitsner <feodor@appveyor.com>
Date:   Fri Apr 4 17:17:48 2025 -0700

    Update reorderable_list_view.dart

commit add9c61
Author: TheEthicalBoy <98978078+ndonkoHenri@users.noreply.github.com>
Date:   Sat Apr 5 02:10:23 2025 +0200

    feat: custom `ReorderableListView` drag handle listeners (#5051)

    * initial commit

    * `ReorderableListView`: mouse_cursor, show_default_drag_handles

    * generated files

    * flutter 3.29.0

commit 440009d
Author: TheEthicalBoy <98978078+ndonkoHenri@users.noreply.github.com>
Date:   Sat Apr 5 02:04:32 2025 +0200

    feat: expose events (`on_double_tap`, `on_pan_start`) in `WindowDragArea` (#5043)

    * improve events typing in gesture_detector.py

    * window.start_dragging

    * delete window_drag_area.dart

    * rework WindowDragArea inheriting from GestureDetector

    * export more utils
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Expose WindowDragArea events
2 participants