From f6501cb4bd771df3d2366d197dbc85078a219da8 Mon Sep 17 00:00:00 2001 From: Matthias Clasen <mclasen@redhat.com> Date: Thu, 29 Sep 2005 13:35:01 +0000 Subject: [PATCH] Stop drags when being grab shadowed. (#317332) 2005-09-29 Matthias Clasen <mclasen@redhat.com> * gtk/gtkpaned.c (gtk_paned_grab_notify): Stop drags when being grab shadowed. (#317332) --- ChangeLog | 5 +++++ ChangeLog.pre-2-10 | 5 +++++ gtk/gtkpaned.c | 30 +++++++++++++++++++++++++----- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 966b7410f9..1032e8a85b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2005-09-29 Matthias Clasen <mclasen@redhat.com> + + * gtk/gtkpaned.c (gtk_paned_grab_notify): Stop drags when being + grab shadowed. (#317332) + 2005-09-29 Tor Lillqvist <tml@novell.com> * gtk-zip.sh.in: DLLs are always in bin nowadays, no need to test. diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 966b7410f9..1032e8a85b 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,8 @@ +2005-09-29 Matthias Clasen <mclasen@redhat.com> + + * gtk/gtkpaned.c (gtk_paned_grab_notify): Stop drags when being + grab shadowed. (#317332) + 2005-09-29 Tor Lillqvist <tml@novell.com> * gtk-zip.sh.in: DLLs are always in bin nowadays, no need to test. diff --git a/gtk/gtkpaned.c b/gtk/gtkpaned.c index 630c61f876..4bc20add00 100644 --- a/gtk/gtkpaned.c +++ b/gtk/gtkpaned.c @@ -130,6 +130,8 @@ static gboolean gtk_paned_cancel_position (GtkPaned *paned); static gboolean gtk_paned_toggle_handle_focus (GtkPaned *paned); static GType gtk_paned_child_type (GtkContainer *container); +static void gtk_paned_grab_notify (GtkWidget *widget, + gboolean was_grabbed); static GtkContainerClass *parent_class = NULL; @@ -223,6 +225,7 @@ gtk_paned_class_init (GtkPanedClass *class) widget_class->button_release_event = gtk_paned_button_release; widget_class->motion_notify_event = gtk_paned_motion; widget_class->grab_broken_event = gtk_paned_grab_broken; + widget_class->grab_notify = gtk_paned_grab_notify; container_class->add = gtk_paned_add; container_class->remove = gtk_paned_remove; @@ -925,6 +928,26 @@ gtk_paned_grab_broken (GtkWidget *widget, return TRUE; } +static void +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); +} + +static void +gtk_paned_grab_notify (GtkWidget *widget, + gboolean was_grabbed) +{ + GtkPaned *paned = GTK_PANED (widget); + + if (!was_grabbed && paned->in_drag) + stop_drag (paned); +} + static gboolean gtk_paned_button_release (GtkWidget *widget, GdkEventButton *event) @@ -933,11 +956,8 @@ gtk_paned_button_release (GtkWidget *widget, if (paned->in_drag && (event->button == 1)) { - paned->in_drag = FALSE; - paned->drag_pos = -1; - paned->position_set = TRUE; - gdk_display_pointer_ungrab (gtk_widget_get_display (widget), - paned->priv->grab_time); + stop_drag (paned); + return TRUE; } -- GitLab