summaryrefslogtreecommitdiff
path: root/gdk/win32/gdkevents-win32.c
diff options
context:
space:
mode:
authorLuca Bacci <luca.bacci982@gmail.com>2022-04-04 15:29:52 +0200
committerLuca Bacci <luca.bacci982@gmail.com>2022-04-06 20:27:32 +0200
commit91f200167e8f083a4e3c48c3e6e2d1d48d304d4d (patch)
tree0e396648ce162e664b0aebd36f07cda8e380d703 /gdk/win32/gdkevents-win32.c
parent2b6fb005a868e783a47cf3b5eac1de09e57c17ea (diff)
downloadgtk+-91f200167e8f083a4e3c48c3e6e2d1d48d304d4d.tar.gz
GdkWin32: Correct generation of crossing events when holding an implicit grab
Fixes #4722
Diffstat (limited to 'gdk/win32/gdkevents-win32.c')
-rw-r--r--gdk/win32/gdkevents-win32.c43
1 files changed, 9 insertions, 34 deletions
diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c
index 5644205833..de34cd8e68 100644
--- a/gdk/win32/gdkevents-win32.c
+++ b/gdk/win32/gdkevents-win32.c
@@ -2322,60 +2322,35 @@ gdk_event_translate (MSG *msg,
pen_touch_input = FALSE;
- new_window = window;
-
- if (pointer_grab != NULL)
- {
- POINT pt;
- pt = msg->pt;
-
- new_window = NULL;
- hwnd = WindowFromPoint (pt);
- if (hwnd != NULL)
- {
- POINT client_pt = pt;
-
- ScreenToClient (hwnd, &client_pt);
- GetClientRect (hwnd, &rect);
- if (PtInRect (&rect, client_pt))
- new_window = gdk_win32_handle_table_lookup (hwnd);
- }
-
- if (!pointer_grab->owner_events &&
- new_window != NULL &&
- new_window != pointer_grab->surface)
- new_window = NULL;
- }
+ g_set_object (&window, find_window_for_mouse_event (window, msg));
- if (mouse_window != new_window)
+ if (mouse_window != window)
{
GDK_NOTE (EVENTS, g_print (" mouse_window %p -> %p",
mouse_window ? GDK_SURFACE_HWND (mouse_window) : NULL,
- new_window ? GDK_SURFACE_HWND (new_window) : NULL));
+ window ? GDK_SURFACE_HWND (window) : NULL));
synthesize_crossing_events (display,
_gdk_device_manager->system_pointer,
- mouse_window, new_window,
+ mouse_window, window,
GDK_CROSSING_NORMAL,
&msg->pt,
0, /* TODO: Set right mask */
_gdk_win32_get_next_tick (msg->time),
FALSE);
- g_set_object (&mouse_window, new_window);
+ g_set_object (&mouse_window, window);
mouse_window_ignored_leave = NULL;
- if (new_window != NULL)
- track_mouse_event (TME_LEAVE, GDK_SURFACE_HWND (new_window));
+ if (window != NULL)
+ track_mouse_event (TME_LEAVE, GDK_SURFACE_HWND (window));
}
- else if (new_window != NULL &&
- new_window == mouse_window_ignored_leave)
+ else if (window != NULL && window == mouse_window_ignored_leave)
{
/* If we ignored a leave event for this window and we're now getting
input again we need to re-arm the mouse tracking, as that was
cancelled by the mouseleave. */
mouse_window_ignored_leave = NULL;
- track_mouse_event (TME_LEAVE, GDK_SURFACE_HWND (new_window));
+ track_mouse_event (TME_LEAVE, GDK_SURFACE_HWND (window));
}
- g_set_object (&window, find_window_for_mouse_event (window, msg));
impl = GDK_WIN32_SURFACE (window);
/* If we haven't moved, don't create any GDK event. Windows