summaryrefslogtreecommitdiff
path: root/gtk/gtkclist.c
diff options
context:
space:
mode:
authorLars Hamann <lars@gtk.org>1999-01-18 23:02:08 +0000
committerLars Hamann <lars@src.gnome.org>1999-01-18 23:02:08 +0000
commit28df7201ca9e38333ad036d18da8ae61f65c48e9 (patch)
tree135e992d495761ff1880f06b261f93f84ba60ca3 /gtk/gtkclist.c
parent03f25c7adef647d6665fdde59ed6c71c4b4a9d9a (diff)
downloadgtk+-28df7201ca9e38333ad036d18da8ae61f65c48e9.tar.gz
only call grab_add if pointer_grab succeeds. (gtk_clist_unmap): remove
Mon Jan 18 22:54:11 1999 Lars Hamann <lars@gtk.org> * gtk/gtkclist.c (gtk_clist_button_press): only call grab_add if pointer_grab succeeds. (gtk_clist_unmap): remove pointer/widget grabs if needed.
Diffstat (limited to 'gtk/gtkclist.c')
-rw-r--r--gtk/gtkclist.c40
1 files changed, 29 insertions, 11 deletions
diff --git a/gtk/gtkclist.c b/gtk/gtkclist.c
index 63cf36ff3a..07c811a325 100644
--- a/gtk/gtkclist.c
+++ b/gtk/gtkclist.c
@@ -4644,6 +4644,20 @@ gtk_clist_unmap (GtkWidget *widget)
{
GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
+ if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (clist))
+ {
+ remove_grab (clist);
+
+ if (clist->anchor != -1 &&
+ clist->selection_mode == GTK_SELECTION_EXTENDED)
+ GTK_CLIST_CLASS_FW (widget)->resync_selection (clist, NULL);
+
+ clist->click_cell.row = -1;
+ clist->click_cell.column = -1;
+ clist->drag_button = 0;
+ GTK_CLIST_UNSET_FLAG (clist, CLIST_IN_DRAG);
+ }
+
for (i = 0; i < clist->columns; i++)
if (clist->column[i].window)
gdk_window_hide (clist->column[i].window);
@@ -4864,13 +4878,14 @@ gtk_clist_button_press (GtkWidget *widget,
GDK_POINTER_MOTION_HINT_MASK |
GDK_BUTTON_RELEASE_MASK);
+ if (gdk_pointer_grab (clist->clist_window, FALSE, mask,
+ NULL, NULL, event->time))
+ return FALSE;
+ gtk_grab_add (widget);
+
clist->click_cell.row = row;
clist->click_cell.column = column;
-
clist->drag_button = event->button;
- gdk_pointer_grab (clist->clist_window, FALSE, mask,
- NULL, NULL, event->time);
- gtk_grab_add (widget);
}
else
{
@@ -5004,11 +5019,13 @@ gtk_clist_button_press (GtkWidget *widget,
{
gpointer drag_data;
- gdk_pointer_grab (clist->column[i].window, FALSE,
- GDK_POINTER_MOTION_HINT_MASK |
- GDK_BUTTON1_MOTION_MASK |
- GDK_BUTTON_RELEASE_MASK,
- NULL, NULL, event->time);
+ if (gdk_pointer_grab (clist->column[i].window, FALSE,
+ GDK_POINTER_MOTION_HINT_MASK |
+ GDK_BUTTON1_MOTION_MASK |
+ GDK_BUTTON_RELEASE_MASK,
+ NULL, NULL, event->time))
+ return FALSE;
+
gtk_grab_add (widget);
GTK_CLIST_SET_FLAG (clist, CLIST_IN_DRAG);
@@ -7043,10 +7060,11 @@ vertical_timeout (GtkCList *clist)
static void
remove_grab (GtkCList *clist)
{
- if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (clist))
+ if (GTK_WIDGET_HAS_GRAB (clist))
{
gtk_grab_remove (GTK_WIDGET (clist));
- gdk_pointer_ungrab (GDK_CURRENT_TIME);
+ if (gdk_pointer_is_grabbed ())
+ gdk_pointer_ungrab (GDK_CURRENT_TIME);
}
if (clist->htimer)