Merge pull request #46033 from bruvzg/ignore_warp_on_mode_change_4

[macOS] Ignore mouse move event caused by mouse mode switch.
This commit is contained in:
Rémi Verschelde 2021-02-15 11:08:49 +01:00 committed by GitHub
commit fa06d3cf63
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 0 deletions

View file

@ -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;

View file

@ -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;
}