diff options
Diffstat (limited to 'gtk/gtkpaned.c')
-rw-r--r-- | gtk/gtkpaned.c | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/gtk/gtkpaned.c b/gtk/gtkpaned.c index d9c9177770..69e766d8a3 100644 --- a/gtk/gtkpaned.c +++ b/gtk/gtkpaned.c @@ -150,6 +150,7 @@ struct _GtkPanedPrivate GtkWidget *saved_focus; GtkPaned *first_paned; guint32 grab_time; + GdkDevice *grab_device; }; @@ -1215,18 +1216,20 @@ gtk_paned_button_press (GtkWidget *widget, { /* We need a server grab here, not gtk_grab_add(), since * we don't want to pass events on to the widget's children */ - if (gdk_pointer_grab (paned->handle, FALSE, - GDK_POINTER_MOTION_HINT_MASK - | GDK_BUTTON1_MOTION_MASK - | GDK_BUTTON_RELEASE_MASK - | GDK_ENTER_NOTIFY_MASK - | GDK_LEAVE_NOTIFY_MASK, - NULL, NULL, - event->time) != GDK_GRAB_SUCCESS) + if (gdk_device_grab (event->device, + paned->handle, + GDK_OWNERSHIP_WINDOW, FALSE, + GDK_POINTER_MOTION_HINT_MASK + | GDK_BUTTON1_MOTION_MASK + | GDK_BUTTON_RELEASE_MASK + | GDK_ENTER_NOTIFY_MASK + | GDK_LEAVE_NOTIFY_MASK, + NULL, event->time) != GDK_GRAB_SUCCESS) return FALSE; paned->in_drag = TRUE; paned->priv->grab_time = event->time; + paned->priv->grab_device = event->device; if (paned->priv->orientation == GTK_ORIENTATION_HORIZONTAL) paned->drag_pos = event->x; @@ -1258,8 +1261,10 @@ stop_drag (GtkPaned *paned) paned->in_drag = FALSE; paned->drag_pos = -1; paned->position_set = TRUE; - gdk_display_pointer_ungrab (gtk_widget_get_display (GTK_WIDGET (paned)), - paned->priv->grab_time); + + gdk_device_ungrab (paned->priv->grab_device, + paned->priv->grab_time); + paned->priv->grab_device = NULL; } static void @@ -1267,8 +1272,12 @@ gtk_paned_grab_notify (GtkWidget *widget, gboolean was_grabbed) { GtkPaned *paned = GTK_PANED (widget); + GdkDevice *grab_device; + + grab_device = paned->priv->grab_device; - if (!was_grabbed && paned->in_drag) + if (paned->in_drag && grab_device && + gtk_widget_device_is_shadowed (widget, grab_device)) stop_drag (paned); } |