Commit
adba0b97 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
return TRUE;
}
-static void
+void
gtk_synthesize_crossing_events (GtkRoot *toplevel,
GtkCrossingType crossing_type,
GtkWidget *old_target,
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
#endif /* __GTK_PRIVATE_H__ */
old_target = g_object_ref (focus->target);
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);
}