From bc04bbbe2a763ae28f01b8a071c820baf4c2ce97 Mon Sep 17 00:00:00 2001 From: bruvzg <7645683+bruvzg@users.noreply.github.com> Date: Mon, 15 Feb 2021 00:19:47 +0200 Subject: [PATCH] [macOS] Ignore mouse move event caused by mouse mode switch. --- platform/osx/os_osx.h | 1 + platform/osx/os_osx.mm | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/platform/osx/os_osx.h b/platform/osx/os_osx.h index 71afdf2b415..2c7769946cf 100644 --- a/platform/osx/os_osx.h +++ b/platform/osx/os_osx.h @@ -71,6 +71,7 @@ public: }; List warp_events; NSTimeInterval last_warp = 0; + bool ignore_warp = false; Vector key_event_buffer; int key_event_pos; diff --git a/platform/osx/os_osx.mm b/platform/osx/os_osx.mm index 0921ca2864e..6dbf145e0f4 100644 --- a/platform/osx/os_osx.mm +++ b/platform/osx/os_osx.mm @@ -738,6 +738,15 @@ static void _mouseDownEvent(NSEvent *event, int index, int mask, bool pressed) { NSPoint delta = NSMakePoint([event deltaX], [event deltaY]); NSPoint mpos = [event locationInWindow]; + if (OS_OSX::singleton->ignore_warp) { + // Discard late events, before warp + if (([event timestamp]) < OS_OSX::singleton->last_warp) { + return; + } + OS_OSX::singleton->ignore_warp = false; + return; + } + if (OS_OSX::singleton->mouse_mode == OS::MOUSE_MODE_CONFINED) { // Discard late events if (([event timestamp]) < OS_OSX::singleton->last_warp) { @@ -3306,6 +3315,8 @@ void OS_OSX::set_mouse_mode(MouseMode p_mode) { CGAssociateMouseAndMouseCursorPosition(true); } + last_warp = [[NSProcessInfo processInfo] systemUptime]; + ignore_warp = true; warp_events.clear(); mouse_mode = p_mode; }