mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-09-29 18:47:38 +00:00
scrolledwindow: Check the event widget on captured motion events
This path is only intended to be triggered on events directed towards the child of the scrolledwindow, so make it explicitly so. This avoids scrollbar "over" state flashing when dragging finishes within the slider. https://bugzilla.gnome.org/show_bug.cgi?id=746961
This commit is contained in:
parent
71256a0f94
commit
eb26208c08
@ -1067,6 +1067,8 @@ captured_event_cb (GtkWidget *widget,
|
|||||||
GtkScrolledWindow *sw;
|
GtkScrolledWindow *sw;
|
||||||
GdkInputSource input_source;
|
GdkInputSource input_source;
|
||||||
GdkDevice *source_device;
|
GdkDevice *source_device;
|
||||||
|
GtkWidget *event_widget;
|
||||||
|
gboolean on_scrollbar;
|
||||||
|
|
||||||
sw = GTK_SCROLLED_WINDOW (widget);
|
sw = GTK_SCROLLED_WINDOW (widget);
|
||||||
priv = sw->priv;
|
priv = sw->priv;
|
||||||
@ -1091,7 +1093,11 @@ captured_event_cb (GtkWidget *widget,
|
|||||||
input_source != GDK_SOURCE_TOUCHPAD)
|
input_source != GDK_SOURCE_TOUCHPAD)
|
||||||
return GDK_EVENT_PROPAGATE;
|
return GDK_EVENT_PROPAGATE;
|
||||||
|
|
||||||
if (event->type == GDK_MOTION_NOTIFY)
|
event_widget = gtk_get_event_widget (event);
|
||||||
|
on_scrollbar = (event_widget == priv->hindicator.scrollbar ||
|
||||||
|
event_widget == priv->vindicator.scrollbar);
|
||||||
|
|
||||||
|
if (event->type == GDK_MOTION_NOTIFY && !on_scrollbar)
|
||||||
{
|
{
|
||||||
if (priv->hscrollbar_visible)
|
if (priv->hscrollbar_visible)
|
||||||
indicator_start_fade (&priv->hindicator, 1.0);
|
indicator_start_fade (&priv->hindicator, 1.0);
|
||||||
@ -1118,16 +1124,12 @@ captured_event_cb (GtkWidget *widget,
|
|||||||
indicator_set_over (&priv->hindicator, FALSE);
|
indicator_set_over (&priv->hindicator, FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (event->type == GDK_LEAVE_NOTIFY &&
|
else if (event->type == GDK_LEAVE_NOTIFY && on_scrollbar &&
|
||||||
event->crossing.mode == GDK_CROSSING_UNGRAB)
|
event->crossing.mode == GDK_CROSSING_UNGRAB)
|
||||||
{
|
{
|
||||||
GtkWidget *scrollbar;
|
if (event_widget == priv->hindicator.scrollbar)
|
||||||
|
|
||||||
scrollbar = gtk_get_event_widget (event);
|
|
||||||
|
|
||||||
if (scrollbar == priv->hindicator.scrollbar)
|
|
||||||
check_update_scrollbar_proximity (sw, &priv->hindicator, event);
|
check_update_scrollbar_proximity (sw, &priv->hindicator, event);
|
||||||
else if (scrollbar == priv->vindicator.scrollbar)
|
else if (event_widget == priv->vindicator.scrollbar)
|
||||||
check_update_scrollbar_proximity (sw, &priv->vindicator, event);
|
check_update_scrollbar_proximity (sw, &priv->vindicator, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user