forked from AuroraMiddleware/gtk
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.
This commit is contained in:
parent
f5fde52d61
commit
0d7fe2ec09
@ -1507,9 +1507,13 @@ handle_pointing_event (GdkEvent *event)
|
||||
old_target = update_pointer_focus_state (toplevel, event, target);
|
||||
|
||||
if (event->type == GDK_MOTION_NOTIFY || event->type == GDK_ENTER_NOTIFY)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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,
|
||||
|
Loading…
Reference in New Issue
Block a user