gtk3: Fix enter and leave signals in EventControllerMotion

The Gtk.EventMotionController implementation in Gtk3 doesn't
emit the enter or leave signals when the mouse cursor enters
or leaves the associated widget.

After doing several tests, I discovered that the
gtk_event_controller_handle_event() method never receives any
of the events from the Gtk core, although they are generated
inside the core and enter-notify-event and leave-notify-event
signals are correctly emited.

This patch fixes it by adding the missing
gtk_widget_real_XXXXX_event handlers for enter and leave
event notifications.

Fix #7225
This commit is contained in:
Sergio Costas 2025-01-04 12:15:40 +01:00
parent 222eb83904
commit e71a817fff

View File

@ -683,6 +683,8 @@ static gboolean gtk_widget_real_button_event (GtkWidget
GdkEventButton *event);
static gboolean gtk_widget_real_motion_event (GtkWidget *widget,
GdkEventMotion *event);
static gboolean gtk_widget_real_crossing_event (GtkWidget *widget,
GdkEventCrossing *event);
static gboolean gtk_widget_real_key_press_event (GtkWidget *widget,
GdkEventKey *event);
static gboolean gtk_widget_real_key_release_event (GtkWidget *widget,
@ -1076,8 +1078,8 @@ gtk_widget_class_init (GtkWidgetClass *klass)
klass->destroy_event = NULL;
klass->key_press_event = gtk_widget_real_key_press_event;
klass->key_release_event = gtk_widget_real_key_release_event;
klass->enter_notify_event = NULL;
klass->leave_notify_event = NULL;
klass->enter_notify_event = gtk_widget_real_crossing_event;
klass->leave_notify_event = gtk_widget_real_crossing_event;
klass->configure_event = NULL;
klass->focus_in_event = gtk_widget_real_focus_in_event;
klass->focus_out_event = gtk_widget_real_focus_out_event;
@ -7217,6 +7219,14 @@ gtk_widget_real_motion_event (GtkWidget *widget,
GTK_PHASE_BUBBLE);
}
static gboolean
gtk_widget_real_crossing_event (GtkWidget *widget,
GdkEventCrossing *event)
{
return _gtk_widget_run_controllers (widget, (GdkEvent *) event,
GTK_PHASE_BUBBLE);
}
static gboolean
gtk_widget_real_key_press_event (GtkWidget *widget,
GdkEventKey *event)