summaryrefslogtreecommitdiffstats
path: root/platform/macos/display_server_macos.mm
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-08-09 15:20:39 +0200
committerRémi Verschelde <rverschelde@gmail.com>2023-08-09 15:20:39 +0200
commit11ea4dc46647693eb41179b641b3c4f261b4fef4 (patch)
tree12f0aa82c640b77de5d02e2c5a37919b0386550f /platform/macos/display_server_macos.mm
parent821579e804ac04d6e512babe70a098c60447638f (diff)
parent78caaf37171437c5d03f793c6a590f5b6ae0a2b9 (diff)
downloadredot-engine-11ea4dc46647693eb41179b641b3c4f261b4fef4.tar.gz
Merge pull request #80439 from bruvzg/macos_mouse_enter_exit
[macOS] Fix missing mouse exit events on window close.
Diffstat (limited to 'platform/macos/display_server_macos.mm')
-rw-r--r--platform/macos/display_server_macos.mm23
1 files changed, 20 insertions, 3 deletions
diff --git a/platform/macos/display_server_macos.mm b/platform/macos/display_server_macos.mm
index de191827f5..e79d6acc3f 100644
--- a/platform/macos/display_server_macos.mm
+++ b/platform/macos/display_server_macos.mm
@@ -366,6 +366,25 @@ DisplayServer::WindowID DisplayServerMacOS::_get_focused_window_or_popup() const
return last_focused_window;
}
+void DisplayServerMacOS::mouse_enter_window(WindowID p_window) {
+ if (window_mouseover_id != p_window) {
+ if (window_mouseover_id != INVALID_WINDOW_ID) {
+ send_window_event(windows[window_mouseover_id], WINDOW_EVENT_MOUSE_EXIT);
+ }
+ window_mouseover_id = p_window;
+ if (p_window != INVALID_WINDOW_ID) {
+ send_window_event(windows[p_window], WINDOW_EVENT_MOUSE_ENTER);
+ }
+ }
+}
+
+void DisplayServerMacOS::mouse_exit_window(WindowID p_window) {
+ if (window_mouseover_id == p_window && p_window != INVALID_WINDOW_ID) {
+ send_window_event(windows[p_window], WINDOW_EVENT_MOUSE_EXIT);
+ }
+ window_mouseover_id = INVALID_WINDOW_ID;
+}
+
void DisplayServerMacOS::_dispatch_input_events(const Ref<InputEvent> &p_event) {
((DisplayServerMacOS *)(get_singleton()))->_dispatch_input_event(p_event);
}
@@ -2069,9 +2088,7 @@ void DisplayServerMacOS::mouse_set_mode(MouseMode p_mode) {
if (show_cursor && !previously_shown) {
window_id = get_window_at_screen_position(mouse_get_position());
- if (window_id != INVALID_WINDOW_ID) {
- send_window_event(windows[window_id], WINDOW_EVENT_MOUSE_ENTER);
- }
+ mouse_enter_window(window_id);
}
if (p_mode == MOUSE_MODE_CAPTURED) {