fix for pointer grab

* gtk/gtkclist.c (gtk_clist_button_press) (gtk_clist_button_release)
  (abort_column_resize) (gtk_clist_key_press): fix for pointer grab

* gtk/gtkctree.c (real_tree_select): added check to avoid double
  selected rows
  (gtk_ctree_button_press)
  (gtk_ctree_button_release): fix for pointer grab
This commit is contained in:
Lars Hamann
1998-07-26 13:12:07 +00:00
parent 72415bc1a7
commit 65044acefd
9 changed files with 115 additions and 20 deletions

View File

@ -1,3 +1,13 @@
Sun Jul 26 14:06:37 1998 Lars Hamann <lars@gtk.org>
* gtk/gtkclist.c (gtk_clist_button_press) (gtk_clist_button_release)
(abort_column_resize) (gtk_clist_key_press): fix for pointer grab
* gtk/gtkctree.c (real_tree_select): added check to avoid double
selected rows
(gtk_ctree_button_press)
(gtk_ctree_button_release): fix for pointer grab
Sat Jul 25 13:16:00 1998 Damon Chaplin <DAChaplin@msn.com> Sat Jul 25 13:16:00 1998 Damon Chaplin <DAChaplin@msn.com>
* gtk/gtkfontsel.c (gtk_font_selection_get_fonts): * gtk/gtkfontsel.c (gtk_font_selection_get_fonts):

View File

@ -1,3 +1,13 @@
Sun Jul 26 14:06:37 1998 Lars Hamann <lars@gtk.org>
* gtk/gtkclist.c (gtk_clist_button_press) (gtk_clist_button_release)
(abort_column_resize) (gtk_clist_key_press): fix for pointer grab
* gtk/gtkctree.c (real_tree_select): added check to avoid double
selected rows
(gtk_ctree_button_press)
(gtk_ctree_button_release): fix for pointer grab
Sat Jul 25 13:16:00 1998 Damon Chaplin <DAChaplin@msn.com> Sat Jul 25 13:16:00 1998 Damon Chaplin <DAChaplin@msn.com>
* gtk/gtkfontsel.c (gtk_font_selection_get_fonts): * gtk/gtkfontsel.c (gtk_font_selection_get_fonts):

View File

@ -1,3 +1,13 @@
Sun Jul 26 14:06:37 1998 Lars Hamann <lars@gtk.org>
* gtk/gtkclist.c (gtk_clist_button_press) (gtk_clist_button_release)
(abort_column_resize) (gtk_clist_key_press): fix for pointer grab
* gtk/gtkctree.c (real_tree_select): added check to avoid double
selected rows
(gtk_ctree_button_press)
(gtk_ctree_button_release): fix for pointer grab
Sat Jul 25 13:16:00 1998 Damon Chaplin <DAChaplin@msn.com> Sat Jul 25 13:16:00 1998 Damon Chaplin <DAChaplin@msn.com>
* gtk/gtkfontsel.c (gtk_font_selection_get_fonts): * gtk/gtkfontsel.c (gtk_font_selection_get_fonts):

View File

@ -1,3 +1,13 @@
Sun Jul 26 14:06:37 1998 Lars Hamann <lars@gtk.org>
* gtk/gtkclist.c (gtk_clist_button_press) (gtk_clist_button_release)
(abort_column_resize) (gtk_clist_key_press): fix for pointer grab
* gtk/gtkctree.c (real_tree_select): added check to avoid double
selected rows
(gtk_ctree_button_press)
(gtk_ctree_button_release): fix for pointer grab
Sat Jul 25 13:16:00 1998 Damon Chaplin <DAChaplin@msn.com> Sat Jul 25 13:16:00 1998 Damon Chaplin <DAChaplin@msn.com>
* gtk/gtkfontsel.c (gtk_font_selection_get_fonts): * gtk/gtkfontsel.c (gtk_font_selection_get_fonts):

View File

@ -1,3 +1,13 @@
Sun Jul 26 14:06:37 1998 Lars Hamann <lars@gtk.org>
* gtk/gtkclist.c (gtk_clist_button_press) (gtk_clist_button_release)
(abort_column_resize) (gtk_clist_key_press): fix for pointer grab
* gtk/gtkctree.c (real_tree_select): added check to avoid double
selected rows
(gtk_ctree_button_press)
(gtk_ctree_button_release): fix for pointer grab
Sat Jul 25 13:16:00 1998 Damon Chaplin <DAChaplin@msn.com> Sat Jul 25 13:16:00 1998 Damon Chaplin <DAChaplin@msn.com>
* gtk/gtkfontsel.c (gtk_font_selection_get_fonts): * gtk/gtkfontsel.c (gtk_font_selection_get_fonts):

View File

@ -1,3 +1,13 @@
Sun Jul 26 14:06:37 1998 Lars Hamann <lars@gtk.org>
* gtk/gtkclist.c (gtk_clist_button_press) (gtk_clist_button_release)
(abort_column_resize) (gtk_clist_key_press): fix for pointer grab
* gtk/gtkctree.c (real_tree_select): added check to avoid double
selected rows
(gtk_ctree_button_press)
(gtk_ctree_button_release): fix for pointer grab
Sat Jul 25 13:16:00 1998 Damon Chaplin <DAChaplin@msn.com> Sat Jul 25 13:16:00 1998 Damon Chaplin <DAChaplin@msn.com>
* gtk/gtkfontsel.c (gtk_font_selection_get_fonts): * gtk/gtkfontsel.c (gtk_font_selection_get_fonts):

View File

@ -1,3 +1,13 @@
Sun Jul 26 14:06:37 1998 Lars Hamann <lars@gtk.org>
* gtk/gtkclist.c (gtk_clist_button_press) (gtk_clist_button_release)
(abort_column_resize) (gtk_clist_key_press): fix for pointer grab
* gtk/gtkctree.c (real_tree_select): added check to avoid double
selected rows
(gtk_ctree_button_press)
(gtk_ctree_button_release): fix for pointer grab
Sat Jul 25 13:16:00 1998 Damon Chaplin <DAChaplin@msn.com> Sat Jul 25 13:16:00 1998 Damon Chaplin <DAChaplin@msn.com>
* gtk/gtkfontsel.c (gtk_font_selection_get_fonts): * gtk/gtkfontsel.c (gtk_font_selection_get_fonts):

View File

@ -643,6 +643,14 @@ gtk_clist_class_init (GtkCListClass * klass)
gtk_binding_entry_add_signal (binding_set, GDK_Shift_R, gtk_binding_entry_add_signal (binding_set, GDK_Shift_R,
GDK_RELEASE_MASK | GDK_SHIFT_MASK, GDK_RELEASE_MASK | GDK_SHIFT_MASK,
"end_selection", 0); "end_selection", 0);
gtk_binding_entry_add_signal (binding_set, GDK_Shift_L,
GDK_RELEASE_MASK | GDK_SHIFT_MASK |
GDK_CONTROL_MASK,
"end_selection", 0);
gtk_binding_entry_add_signal (binding_set, GDK_Shift_R,
GDK_RELEASE_MASK | GDK_SHIFT_MASK |
GDK_CONTROL_MASK,
"end_selection", 0);
} }
/* /*
@ -2121,7 +2129,7 @@ real_undo_selection (GtkCList *clist)
g_return_if_fail (clist != NULL); g_return_if_fail (clist != NULL);
g_return_if_fail (GTK_IS_CLIST (clist)); g_return_if_fail (GTK_IS_CLIST (clist));
if (gdk_pointer_is_grabbed () || if ((gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (clist)) ||
clist->selection_mode != GTK_SELECTION_EXTENDED) clist->selection_mode != GTK_SELECTION_EXTENDED)
return; return;
@ -2616,10 +2624,12 @@ gtk_clist_button_press (GtkWidget * widget,
GDK_BUTTON1_MOTION_MASK | GDK_BUTTON1_MOTION_MASK |
GDK_BUTTON_RELEASE_MASK, GDK_BUTTON_RELEASE_MASK,
NULL, NULL, event->time); NULL, NULL, event->time);
gtk_grab_add (widget);
} }
else if (gdk_pointer_is_grabbed ()) else if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (widget))
{ {
GTK_CLIST_UNSET_FLAG (clist, CLIST_DRAG_SELECTION); GTK_CLIST_UNSET_FLAG (clist, CLIST_DRAG_SELECTION);
gtk_grab_remove (widget);
gdk_pointer_ungrab (event->time); gdk_pointer_ungrab (event->time);
} }
@ -2687,7 +2697,16 @@ gtk_clist_button_press (GtkWidget * widget,
{ {
if (event->state & GDK_SHIFT_MASK) if (event->state & GDK_SHIFT_MASK)
{ {
set_anchor (clist, TRUE, old_row, old_row); if (clist->anchor < 0)
{
g_list_free (clist->undo_selection);
g_list_free (clist->undo_unselection);
clist->undo_selection = NULL;
clist->undo_unselection = NULL;
clist->anchor = old_row;
clist->drag_pos = old_row;
clist->undo_anchor = old_row;
}
update_extended_selection (clist, clist->focus_row); update_extended_selection (clist, clist->focus_row);
} }
else else
@ -2733,6 +2752,7 @@ gtk_clist_button_press (GtkWidget * widget,
GDK_BUTTON1_MOTION_MASK | GDK_BUTTON1_MOTION_MASK |
GDK_BUTTON_RELEASE_MASK, GDK_BUTTON_RELEASE_MASK,
NULL, NULL, event->time); NULL, NULL, event->time);
gtk_grab_add (widget);
if (GTK_CLIST_ADD_MODE (clist)) if (GTK_CLIST_ADD_MODE (clist))
gdk_gc_set_line_attributes (clist->xor_gc, 1, GDK_LINE_SOLID, 0, 0); gdk_gc_set_line_attributes (clist->xor_gc, 1, GDK_LINE_SOLID, 0, 0);
@ -2769,6 +2789,8 @@ gtk_clist_button_release (GtkWidget * widget,
GTK_CLIST_UNSET_FLAG (clist, CLIST_IN_DRAG); GTK_CLIST_UNSET_FLAG (clist, CLIST_IN_DRAG);
gtk_widget_get_pointer (widget, &x, NULL); gtk_widget_get_pointer (widget, &x, NULL);
width = new_column_width (clist, i, &x, &visible); width = new_column_width (clist, i, &x, &visible);
gtk_grab_remove (widget);
gdk_pointer_ungrab (event->time); gdk_pointer_ungrab (event->time);
if (visible) if (visible)
@ -2791,6 +2813,7 @@ gtk_clist_button_release (GtkWidget * widget,
gint column; gint column;
GTK_CLIST_UNSET_FLAG (clist, CLIST_DRAG_SELECTION); GTK_CLIST_UNSET_FLAG (clist, CLIST_DRAG_SELECTION);
gtk_grab_remove (widget);
gdk_pointer_ungrab (event->time); gdk_pointer_ungrab (event->time);
if (clist->htimer) if (clist->htimer)
{ {
@ -4935,7 +4958,7 @@ toggle_add_mode (GtkCList *clist)
g_return_if_fail (clist != 0); g_return_if_fail (clist != 0);
g_return_if_fail (GTK_IS_CLIST (clist)); g_return_if_fail (GTK_IS_CLIST (clist));
if (gdk_pointer_is_grabbed () || if ((gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (clist)) ||
clist->selection_mode != GTK_SELECTION_EXTENDED) clist->selection_mode != GTK_SELECTION_EXTENDED)
return; return;
@ -4962,7 +4985,7 @@ toggle_focus_row (GtkCList *clist)
g_return_if_fail (clist != 0); g_return_if_fail (clist != 0);
g_return_if_fail (GTK_IS_CLIST (clist)); g_return_if_fail (GTK_IS_CLIST (clist));
if (gdk_pointer_is_grabbed () || if ((gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (clist)) ||
clist->focus_row < 0 || clist->focus_row >= clist->rows) clist->focus_row < 0 || clist->focus_row >= clist->rows)
return; return;
@ -5068,7 +5091,7 @@ scroll_horizontal (GtkCList *clist,
g_return_if_fail (clist != 0); g_return_if_fail (clist != 0);
g_return_if_fail (GTK_IS_CLIST (clist)); g_return_if_fail (GTK_IS_CLIST (clist));
if (gdk_pointer_is_grabbed ()) if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (clist))
return; return;
switch (scroll_type) switch (scroll_type)
@ -5123,7 +5146,7 @@ scroll_vertical (GtkCList *clist,
g_return_if_fail (clist != NULL); g_return_if_fail (clist != NULL);
g_return_if_fail (GTK_IS_CLIST (clist)); g_return_if_fail (GTK_IS_CLIST (clist));
if (gdk_pointer_is_grabbed ()) if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (clist))
return; return;
switch (clist->selection_mode) switch (clist->selection_mode)
@ -5477,7 +5500,7 @@ start_selection (GtkCList *clist)
g_return_if_fail (clist != NULL); g_return_if_fail (clist != NULL);
g_return_if_fail (GTK_IS_CLIST (clist)); g_return_if_fail (GTK_IS_CLIST (clist));
if (gdk_pointer_is_grabbed ()) if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (clist))
return; return;
set_anchor (clist, GTK_CLIST_ADD_MODE (clist), clist->focus_row, set_anchor (clist, GTK_CLIST_ADD_MODE (clist), clist->focus_row,
@ -5490,7 +5513,8 @@ end_selection (GtkCList *clist)
g_return_if_fail (clist != NULL); g_return_if_fail (clist != NULL);
g_return_if_fail (GTK_IS_CLIST (clist)); g_return_if_fail (GTK_IS_CLIST (clist));
if (gdk_pointer_is_grabbed () || clist->anchor == -1) if ((gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_FOCUS (clist)) ||
clist->anchor == -1)
return; return;
GTK_CLIST_CLASS_FW (clist)->resync_selection (clist, NULL); GTK_CLIST_CLASS_FW (clist)->resync_selection (clist, NULL);
@ -5505,7 +5529,7 @@ extend_selection (GtkCList *clist,
g_return_if_fail (clist != NULL); g_return_if_fail (clist != NULL);
g_return_if_fail (GTK_IS_CLIST (clist)); g_return_if_fail (GTK_IS_CLIST (clist));
if (gdk_pointer_is_grabbed () || if ((gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (clist)) ||
clist->selection_mode != GTK_SELECTION_EXTENDED) clist->selection_mode != GTK_SELECTION_EXTENDED)
return; return;
@ -5536,6 +5560,7 @@ abort_column_resize (GtkCList *clist)
return; return;
GTK_CLIST_UNSET_FLAG (clist, CLIST_IN_DRAG); GTK_CLIST_UNSET_FLAG (clist, CLIST_IN_DRAG);
gtk_grab_remove (clist);
gdk_pointer_ungrab (gdk_time_get()); gdk_pointer_ungrab (gdk_time_get());
if (clist->x_drag >= 0 && clist->x_drag <= clist->clist_window_width - 1) if (clist->x_drag >= 0 && clist->x_drag <= clist->clist_window_width - 1)
@ -5565,6 +5590,7 @@ gtk_clist_key_press (GtkWidget * widget,
if (event->keyval == GDK_Escape && GTK_CLIST_IN_DRAG (clist)) if (event->keyval == GDK_Escape && GTK_CLIST_IN_DRAG (clist))
{ {
GTK_CLIST_UNSET_FLAG (clist, CLIST_IN_DRAG); GTK_CLIST_UNSET_FLAG (clist, CLIST_IN_DRAG);
gtk_grab_remove (widget);
gdk_pointer_ungrab (event->time); gdk_pointer_ungrab (event->time);
if (clist->x_drag >= 0 && clist->x_drag <= clist->clist_window_width - 1) if (clist->x_drag >= 0 && clist->x_drag <= clist->clist_window_width - 1)
@ -5867,7 +5893,7 @@ real_unselect_all (GtkCList * clist)
g_return_if_fail (clist != NULL); g_return_if_fail (clist != NULL);
g_return_if_fail (GTK_IS_CLIST (clist)); g_return_if_fail (GTK_IS_CLIST (clist));
if (gdk_pointer_is_grabbed ()) if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (clist))
return; return;
switch (clist->selection_mode) switch (clist->selection_mode)
@ -5920,7 +5946,7 @@ real_select_all (GtkCList * clist)
g_return_if_fail (clist != NULL); g_return_if_fail (clist != NULL);
g_return_if_fail (GTK_IS_CLIST (clist)); g_return_if_fail (GTK_IS_CLIST (clist));
if (gdk_pointer_is_grabbed ()) if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (clist))
return; return;
switch (clist->selection_mode) switch (clist->selection_mode)

View File

@ -545,6 +545,7 @@ gtk_ctree_button_press (GtkWidget *widget,
GDK_POINTER_MOTION_HINT_MASK | GDK_POINTER_MOTION_HINT_MASK |
GDK_BUTTON2_MOTION_MASK | GDK_BUTTON_RELEASE_MASK, GDK_BUTTON2_MOTION_MASK | GDK_BUTTON_RELEASE_MASK,
NULL, NULL, event->time); NULL, NULL, event->time);
gtk_grab_add (widget);
ctree->in_drag = TRUE; ctree->in_drag = TRUE;
ctree->drag_source = work; ctree->drag_source = work;
ctree->drag_target = NULL; ctree->drag_target = NULL;
@ -586,6 +587,7 @@ gtk_ctree_button_press (GtkWidget *widget,
GDK_BUTTON1_MOTION_MASK | GDK_BUTTON1_MOTION_MASK |
GDK_BUTTON_RELEASE_MASK, GDK_BUTTON_RELEASE_MASK,
NULL, NULL, event->time); NULL, NULL, event->time);
gtk_grab_add (widget);
if (GTK_CLIST_ADD_MODE (clist)) if (GTK_CLIST_ADD_MODE (clist))
{ {
@ -779,7 +781,9 @@ gtk_ctree_button_release (GtkWidget *widget,
if (event->button == 2 && clist->anchor == -1) if (event->button == 2 && clist->anchor == -1)
{ {
gtk_grab_remove (widget);
gdk_pointer_ungrab (event->time); gdk_pointer_ungrab (event->time);
ctree->in_drag = FALSE; ctree->in_drag = FALSE;
if (ctree->use_icons && ctree->drag_icon) if (ctree->use_icons && ctree->drag_icon)
@ -2633,13 +2637,11 @@ gtk_ctree_unlink (GtkCTree *ctree,
} }
} }
if (work) if (work)
{ {
work->prev->next = NULL; work->prev->next = NULL;
work->prev = node->prev; work->prev = node->prev;
} }
if (node->prev && node->prev->next == node) if (node->prev && node->prev->next == node)
node->prev->next = work; node->prev->next = work;
@ -2781,7 +2783,7 @@ change_focus_row_expansion (GtkCTree *ctree,
clist = GTK_CLIST (ctree); clist = GTK_CLIST (ctree);
if (gdk_pointer_is_grabbed ()) if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (ctree))
return; return;
if (!(node = g_list_nth (clist->row_list, clist->focus_row)) || if (!(node = g_list_nth (clist->row_list, clist->focus_row)) ||
@ -3346,7 +3348,7 @@ real_tree_select (GtkCTree *ctree,
g_return_if_fail (ctree != NULL); g_return_if_fail (ctree != NULL);
g_return_if_fail (GTK_IS_CTREE (ctree)); g_return_if_fail (GTK_IS_CTREE (ctree));
if (!node) if (!node || GTK_CTREE_ROW (node)->row.state == GTK_STATE_SELECTED)
return; return;
clist = GTK_CLIST (ctree); clist = GTK_CLIST (ctree);
@ -3401,14 +3403,11 @@ real_tree_unselect (GtkCTree *ctree,
g_return_if_fail (ctree != NULL); g_return_if_fail (ctree != NULL);
g_return_if_fail (GTK_IS_CTREE (ctree)); g_return_if_fail (GTK_IS_CTREE (ctree));
if (!node) if (!node || GTK_CTREE_ROW (node)->row.state != GTK_STATE_SELECTED)
return; return;
clist = GTK_CLIST (ctree); clist = GTK_CLIST (ctree);
if (GTK_CTREE_ROW (node)->row.state != GTK_STATE_SELECTED)
return;
if (clist->selection_end && clist->selection_end->data == node) if (clist->selection_end && clist->selection_end->data == node)
clist->selection_end = clist->selection_end->prev; clist->selection_end = clist->selection_end->prev;