From 3e44a3920a33e2acf587d62fd9ed35858235ca98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timm=20B=C3=A4der?= Date: Tue, 9 May 2017 16:23:01 +0200 Subject: [PATCH] listbox: Fix row hovering Drop the in_widget flag since motion events the listbox receives are always inside the listbox. Also drop the manual coordinate translation code using GdkWindows. --- gtk/gtklistbox.c | 40 +++------------------------------------- 1 file changed, 3 insertions(+), 37 deletions(-) diff --git a/gtk/gtklistbox.c b/gtk/gtklistbox.c index 832ac5ac02..01585628e3 100644 --- a/gtk/gtklistbox.c +++ b/gtk/gtklistbox.c @@ -115,7 +115,6 @@ typedef struct GtkListBoxRow *drag_highlighted_row; int n_visible_rows; - gboolean in_widget; GListModel *bound_model; GtkListBoxCreateWidgetFunc create_widget_func; @@ -1828,11 +1827,6 @@ gtk_list_box_enter_notify_event (GtkWidget *widget, GtkListBox *box = GTK_LIST_BOX (widget); GtkListBoxRow *row; - if (event->window != BOX_PRIV (box)->view_window) - return FALSE; - - BOX_PRIV (box)->in_widget = TRUE; - row = gtk_list_box_get_row_at_y (box, event->y); gtk_list_box_update_prelight (box, row); gtk_list_box_update_active (box, row); @@ -1845,21 +1839,9 @@ gtk_list_box_leave_notify_event (GtkWidget *widget, GdkEventCrossing *event) { GtkListBox *box = GTK_LIST_BOX (widget); - GtkListBoxRow *row = NULL; - if (event->window != BOX_PRIV (box)->view_window) - return FALSE; - - if (event->detail != GDK_NOTIFY_INFERIOR) - { - BOX_PRIV (box)->in_widget = FALSE; - row = NULL; - } - else - row = gtk_list_box_get_row_at_y (box, event->y); - - gtk_list_box_update_prelight (box, row); - gtk_list_box_update_active (box, row); + gtk_list_box_update_prelight (box, NULL); + gtk_list_box_update_active (box, NULL); return FALSE; } @@ -1870,25 +1852,9 @@ gtk_list_box_motion_notify_event (GtkWidget *widget, { GtkListBox *box = GTK_LIST_BOX (widget); GtkListBoxRow *row; - GdkWindow *window, *event_window; - gint relative_y; - gdouble parent_y; - if (!BOX_PRIV (box)->in_widget) - return FALSE; + row = gtk_list_box_get_row_at_y (box, event->y); - window = BOX_PRIV (box)->view_window; - event_window = event->window; - relative_y = event->y; - - while ((event_window != NULL) && (event_window != window)) - { - gdk_window_coords_to_parent (event_window, 0, relative_y, NULL, &parent_y); - relative_y = parent_y; - event_window = gdk_window_get_parent (event_window); - } - - row = gtk_list_box_get_row_at_y (box, relative_y); gtk_list_box_update_prelight (box, row); gtk_list_box_update_active (box, row);