talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit 630ef6bb12fce6716ebe5f84a1712e33481a5b9b
parent 9d818b9d27d0c64dc6d02be18408daa13ab454f4
Author: Andrej Kacian <ticho@claws-mail.org>
Date:   Thu, 15 Feb 2018 23:12:15 +0100

Revert "Remove low-level grab handling from GtkCMC widgets, they aren't needed."

This reverts commit 44a06b793270ab026289759ae56ffa3a76a54a53.

Oops, it is still needed.

Diffstat:
Msrc/gtk/gtkcmclist.c | 17+++++++++++++++++
Msrc/gtk/gtkcmctree.c | 12++++++++++++
Msrc/gtk/gtksctree.c | 4++++
3 files changed, 33 insertions(+), 0 deletions(-)

diff --git a/src/gtk/gtkcmclist.c b/src/gtk/gtkcmclist.c @@ -2040,6 +2040,9 @@ abort_column_resize (GtkCMCList *clist) return; GTK_CMCLIST_UNSET_FLAG (clist, CMCLIST_IN_DRAG); + gtk_grab_remove (GTK_WIDGET (clist)); + gdk_display_pointer_ungrab (gtk_widget_get_display (GTK_WIDGET (clist)), + GDK_CURRENT_TIME); clist->drag_pos = -1; if (clist->x_drag >= 0 && clist->x_drag <= clist->clist_window_width - 1) @@ -5073,6 +5076,8 @@ gtk_cmclist_button_press (GtkWidget *widget, 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; @@ -5214,6 +5219,7 @@ gtk_cmclist_button_press (GtkWidget *widget, NULL, NULL, event->time)) return FALSE; + gtk_grab_add (widget); GTK_CMCLIST_SET_FLAG (clist, CMCLIST_IN_DRAG); /* block attached dnd signal handler */ @@ -5270,6 +5276,8 @@ gtk_cmclist_button_release (GtkWidget *widget, GTK_CMCLIST_UNSET_FLAG (clist, CMCLIST_IN_DRAG); gtk_widget_get_pointer (widget, &x, NULL); + gtk_grab_remove (widget); + gdk_display_pointer_ungrab (gtk_widget_get_display (widget), event->time); if (clist->x_drag >= 0) clist_refresh(clist); @@ -7220,6 +7228,15 @@ remove_grab (GtkCMCList *clist) { GtkWidget *widget = GTK_WIDGET (clist); + if (gtk_widget_has_grab (widget)) + { + GdkDisplay *display = gtk_widget_get_display (widget); + + gtk_grab_remove (widget); + if (gtkut_pointer_is_grabbed (widget)) + gdk_display_pointer_ungrab (display, GDK_CURRENT_TIME); + } + if (clist->htimer) { g_source_remove (clist->htimer); diff --git a/src/gtk/gtkcmctree.c b/src/gtk/gtkcmctree.c @@ -1878,6 +1878,10 @@ change_focus_row_expansion (GtkCMCTree *ctree, clist = GTK_CMCLIST (ctree); + if (gtkut_pointer_is_grabbed (GTK_WIDGET (ctree)) && + gtk_widget_has_grab (GTK_WIDGET(ctree))) + return; + if (!(node = GTK_CMCTREE_NODE (g_list_nth (clist->row_list, clist->focus_row))) || GTK_CMCTREE_ROW (node)->is_leaf || !(GTK_CMCTREE_ROW (node)->children)) @@ -4104,6 +4108,14 @@ gtk_cmctree_node_set_shift (GtkCMCTree *ctree, static void remove_grab (GtkCMCList *clist) { + if (gtkut_pointer_is_grabbed (GTK_WIDGET (clist)) && + gtk_widget_has_grab (GTK_WIDGET(clist))) + { + gtk_grab_remove (GTK_WIDGET (clist)); + gdk_display_pointer_ungrab (gtk_widget_get_display (GTK_WIDGET (clist)), + GDK_CURRENT_TIME); + } + if (clist->htimer) { g_source_remove (clist->htimer); diff --git a/src/gtk/gtksctree.c b/src/gtk/gtksctree.c @@ -163,6 +163,10 @@ gtk_sctree_change_focus_row_expansion (GtkCMCTree *ctree, clist = GTK_CMCLIST (ctree); + if (gtkut_pointer_is_grabbed (GTK_WIDGET (ctree)) && + gtk_widget_has_grab (GTK_WIDGET(ctree))) + return; + if (!(node = GTK_CMCTREE_NODE (g_list_nth (clist->row_list, clist->focus_row))) || GTK_CMCTREE_ROW (node)->is_leaf || !(GTK_CMCTREE_ROW (node)->children))