diff options
author | RĂ©mi Verschelde <remi@verschelde.fr> | 2021-02-15 11:08:49 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-15 11:08:49 +0100 |
commit | fa06d3cf6303506e8d65fe23f9f3c71e49960b88 (patch) | |
tree | 2938b4c58c06372a1607ec49ebde7aa81f905f75 | |
parent | 8fa92c70eacd180866535a42d409e1c9e1074d73 (diff) | |
parent | d756f6a29478704d8890e3a4d1b72c1819f8a9f1 (diff) |
Merge pull request #46033 from bruvzg/ignore_warp_on_mode_change_4
[macOS] Ignore mouse move event caused by mouse mode switch.
-rw-r--r-- | platform/osx/display_server_osx.h | 1 | ||||
-rw-r--r-- | platform/osx/display_server_osx.mm | 11 |
2 files changed, 12 insertions, 0 deletions
diff --git a/platform/osx/display_server_osx.h b/platform/osx/display_server_osx.h index 597ebce6ff..9fac99810b 100644 --- a/platform/osx/display_server_osx.h +++ b/platform/osx/display_server_osx.h @@ -93,6 +93,7 @@ public: List<WarpEvent> warp_events; NSTimeInterval last_warp = 0; + bool ignore_warp = false; Vector<KeyEvent> key_event_buffer; int key_event_pos; diff --git a/platform/osx/display_server_osx.mm b/platform/osx/display_server_osx.mm index 2d43454501..ed7d89009f 100644 --- a/platform/osx/display_server_osx.mm +++ b/platform/osx/display_server_osx.mm @@ -871,6 +871,15 @@ static void _mouseDownEvent(DisplayServer::WindowID window_id, NSEvent *event, i NSPoint delta = NSMakePoint([event deltaX], [event deltaY]); NSPoint mpos = [event locationInWindow]; + if (DS_OSX->ignore_warp) { + // Discard late events, before warp + if (([event timestamp]) < DS_OSX->last_warp) { + return; + } + DS_OSX->ignore_warp = false; + return; + } + if (DS_OSX->mouse_mode == DisplayServer::MOUSE_MODE_CONFINED) { // Discard late events if (([event timestamp]) < DS_OSX->last_warp) { @@ -2098,6 +2107,8 @@ void DisplayServerOSX::mouse_set_mode(MouseMode p_mode) { CGAssociateMouseAndMouseCursorPosition(true); } + last_warp = [[NSProcessInfo processInfo] systemUptime]; + ignore_warp = true; warp_events.clear(); mouse_mode = p_mode; } |