summaryrefslogtreecommitdiff
path: root/gtk/gtkpaned.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtkpaned.c')
-rw-r--r--gtk/gtkpaned.c31
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);
}