Commit 0d7fe2ec authored by Carlos Garnacho's avatar Carlos Garnacho

gtk: Check implicit grab status before sending crossing events

As we now refrain from sending the crossing events if there's an
implicit grab, those events must be sent on button release when
the implicit grab is broken.
parent f5fde52d
......@@ -1508,8 +1508,12 @@ handle_pointing_event (GdkEvent *event)
if (event->type == GDK_MOTION_NOTIFY || event->type == GDK_ENTER_NOTIFY)
{
gtk_synthesize_crossing_events (toplevel, old_target, target,
event, GDK_CROSSING_NORMAL);
if (!gtk_window_lookup_pointer_focus_implicit_grab (toplevel, device,
sequence))
{
gtk_synthesize_crossing_events (toplevel, old_target, target,
event, GDK_CROSSING_NORMAL);
}
gtk_window_maybe_update_cursor (toplevel, NULL, device);
}
......@@ -1532,7 +1536,13 @@ handle_pointing_event (GdkEvent *event)
target : NULL);
if (event->type == GDK_BUTTON_RELEASE)
gtk_window_maybe_update_cursor (toplevel, NULL, device);
{
old_target = target;
target = _gtk_toplevel_pick (toplevel, x, y, NULL, NULL);
gtk_synthesize_crossing_events (toplevel, old_target, target, event,
GDK_CROSSING_UNGRAB);
gtk_window_maybe_update_cursor (toplevel, NULL, device);
}
break;
case GDK_SCROLL:
case GDK_TOUCHPAD_PINCH:
......
......@@ -11327,6 +11327,17 @@ gtk_window_lookup_effective_pointer_focus_widget (GtkWindow *window,
return focus ? gtk_pointer_focus_get_effective_target (focus) : NULL;
}
GtkWidget *
gtk_window_lookup_pointer_focus_implicit_grab (GtkWindow *window,
GdkDevice *device,
GdkEventSequence *sequence)
{
GtkPointerFocus *focus;
focus = gtk_window_lookup_pointer_focus (window, device, sequence);
return focus ? gtk_pointer_focus_get_implicit_grab (focus) : NULL;
}
void
gtk_window_update_pointer_focus (GtkWindow *window,
GdkDevice *device,
......
......@@ -146,6 +146,9 @@ GtkWidget * gtk_window_lookup_pointer_focus_widget (GtkWindow *windo
GtkWidget * gtk_window_lookup_effective_pointer_focus_widget (GtkWindow *window,
GdkDevice *device,
GdkEventSequence *sequence);
GtkWidget * gtk_window_lookup_pointer_focus_implicit_grab (GtkWindow *window,
GdkDevice *device,
GdkEventSequence *sequence);
void gtk_window_update_pointer_focus (GtkWindow *window,
GdkDevice *device,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment