forked from AuroraMiddleware/gtk
gtkwindow: Use pointer-oriented function to deal with crossing events
Commitadba0b97
fixed missed pointer crossings by using a helper function that was already present and looked like did everything that was needed. However this function was oriented to keyboard focus and it also did update the related widget state. Doing these changes on pointer-based crossing was misuse, and could cause weird interactions with keyboard focus management. Fix this by using gtkmain.c gtk_synthesize_crossing_event() that is in fact oriented to pointers. Fixes:adba0b97
(gtkwindow: Synthesize pointer crossing events on state changes) Closes: https://gitlab.gnome.org/GNOME/gtk/-/issues/5094
This commit is contained in:
parent
25c3616a79
commit
54465adff2
@ -1110,7 +1110,7 @@ translate_coordinates (double event_x,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
void
|
||||||
gtk_synthesize_crossing_events (GtkRoot *toplevel,
|
gtk_synthesize_crossing_events (GtkRoot *toplevel,
|
||||||
GtkCrossingType crossing_type,
|
GtkCrossingType crossing_type,
|
||||||
GtkWidget *old_target,
|
GtkWidget *old_target,
|
||||||
|
@ -152,6 +152,15 @@ char * _gtk_elide_underscores (const char *original);
|
|||||||
|
|
||||||
void setlocale_initialization (void);
|
void setlocale_initialization (void);
|
||||||
|
|
||||||
|
void gtk_synthesize_crossing_events (GtkRoot *toplevel,
|
||||||
|
GtkCrossingType crossing_type,
|
||||||
|
GtkWidget *old_target,
|
||||||
|
GtkWidget *new_target,
|
||||||
|
double surface_x,
|
||||||
|
double surface_y,
|
||||||
|
GdkCrossingMode mode,
|
||||||
|
GdkDrop *drop);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __GTK_PRIVATE_H__ */
|
#endif /* __GTK_PRIVATE_H__ */
|
||||||
|
@ -6462,7 +6462,12 @@ gtk_window_update_pointer_focus_on_state_change (GtkWindow *window,
|
|||||||
|
|
||||||
old_target = g_object_ref (focus->target);
|
old_target = g_object_ref (focus->target);
|
||||||
gtk_pointer_focus_repick_target (focus);
|
gtk_pointer_focus_repick_target (focus);
|
||||||
synthesize_focus_change_events (window, old_target, focus->target, GTK_CROSSING_POINTER);
|
gtk_synthesize_crossing_events (GTK_ROOT (window),
|
||||||
|
GTK_CROSSING_POINTER,
|
||||||
|
old_target, focus->target,
|
||||||
|
focus->x, focus->y,
|
||||||
|
GDK_CROSSING_NORMAL,
|
||||||
|
NULL);
|
||||||
g_object_unref (old_target);
|
g_object_unref (old_target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user