RustDesk/flutter/lib/desktop/widgets
fufesou 998b75856d
feat: Add relative mouse mode (#13928)
* feat: Add relative mouse mode

- Add "Relative Mouse Mode" toggle in desktop toolbar and bind to InputModel
- Implement relative mouse movement path: Flutter pointer deltas -> `type: move_relative` -> new `MOUSE_TYPE_MOVE_RELATIVE` in Rust
- In server input service, simulate relative movement via Enigo and keep latest cursor position in sync
- Track pointer-lock center in Flutter (local widget + screen coordinates) and re-center OS cursor after each relative move
- Update pointer-lock center on window move/resize/restore/maximize and when remote display geometry changes
- Hide local cursor when relative mouse mode is active (both Flutter cursor and OS cursor), restore on leave/disable
- On Windows, clip OS cursor to the window rect while in relative mode and release clip when leaving/turning off
- Implement platform helpers: `get_cursor_pos`, `set_cursor_pos`, `show_cursor`, `clip_cursor` (no-op clip/hide on Linux for now)
- Add keyboard shortcut Ctrl+Alt+Shift+M to toggle relative mode (enabled by default, works on all platforms)
- Remove `enable-relative-mouse-shortcut` config option - shortcut is now always available when keyboard permission is granted
- Handle window blur/focus/minimize events to properly release/restore cursor constraints
- Add MOUSE_TYPE_MASK constant and unit tests for mouse event constants

Note: Relative mouse mode state is NOT persisted to config (session-only).
Note: On Linux, show_cursor and clip_cursor are no-ops; cursor hiding is handled by Flutter side.

Signed-off-by: fufesou <linlong1266@gmail.com>

* feat(mouse): relative mouse mode, exit hint

Signed-off-by: fufesou <linlong1266@gmail.com>

* refact(relative mouse): shortcut

Signed-off-by: fufesou <linlong1266@gmail.com>

---------

Signed-off-by: fufesou <linlong1266@gmail.com>
2026-01-09 10:03:14 +08:00
..
button.dart
dragable_divider.dart remove stupid group, bad implementation, buggy, and not usable 2023-06-23 17:05:48 +08:00
kb_layout_type_chooser.dart feat: web v2 keyboard (#9175) 2024-08-26 12:13:11 +08:00
list_search_action_listener.dart
material_mod_popup_menu.dart try out 3.22.2 2024-06-21 12:33:24 +08:00
menu_button.dart file rename (#9089) 2024-08-16 12:55:58 +08:00
popup_menu.dart refact: init values from initState to Constractor (#8817) 2024-07-25 10:45:51 +08:00
refresh_wrapper.dart
remote_toolbar.dart refact: remote toolbar icon (#13865) 2025-12-22 17:10:53 +08:00
tabbar_widget.dart feat: Add relative mouse mode (#13928) 2026-01-09 10:03:14 +08:00
titlebar_widget.dart
update_progress.dart refact: macos, update, preparing for installation (#12581) 2025-08-08 14:25:22 +08:00