From 6866eee64185c1f71c4d2a6603621dc0a1b368c1 Mon Sep 17 00:00:00 2001 From: "C.Even" Date: Thu, 24 Mar 2022 18:04:41 +0800 Subject: [PATCH] Fix PopupMenu behavior on MacOS when multiple monitors are used * DisplayServerOSX::mouse_get_position returns wrong x axis data in multi-monitor case, which makes mouse_process_popups send WINDOW_EVENT_CLOSE_REQUEST, then eventually make PopupMenu close on mouse down without activating item. --- platform/osx/display_server_osx.mm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/platform/osx/display_server_osx.mm b/platform/osx/display_server_osx.mm index 9e32cab5ed4..8820201c103 100644 --- a/platform/osx/display_server_osx.mm +++ b/platform/osx/display_server_osx.mm @@ -1682,7 +1682,11 @@ Point2i DisplayServerOSX::mouse_get_position() const { for (NSScreen *screen in [NSScreen screens]) { NSRect frame = [screen frame]; if (NSMouseInRect(mouse_pos, frame, NO)) { - return Vector2i((int)mouse_pos.x, (int)-mouse_pos.y) * scale + _get_screens_origin(); + Vector2i pos = Vector2i((int)mouse_pos.x, (int)mouse_pos.y); + pos *= scale; + pos -= _get_screens_origin(); + pos.y *= -1; + return pos; } } return Vector2i();