[gtk+/gtk-3-14] notebook: Protect removal-from-within
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/gtk-3-14] notebook: Protect removal-from-within
- Date: Sat, 31 Jan 2015 19:27:47 +0000 (UTC)
commit 37751cd0fb7bbd8dcdd5ac2ff03f5d84986afa97
Author: Matthias Clasen <mclasen redhat com>
Date: Fri Jan 30 09:26:04 2015 -0500
notebook: Protect removal-from-within
When a tab is dropped, we have to remove it from the notebook to
insert it elsewhere. This is expected part of the tab dnd operation,
and we need to differentiate it from 'spontaneous' removals which
cause us to cancel the drag operation.
gtk/gtknotebook.c | 7 +++++--
1 files changed, 5 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c
index 3d5c920..3834ecd 100644
--- a/gtk/gtknotebook.c
+++ b/gtk/gtknotebook.c
@@ -162,6 +162,7 @@ struct _GtkNotebookPrivate
guint click_child : 3;
guint during_detach : 1;
guint during_reorder : 1;
+ guint remove_in_detach : 1;
guint focus_out : 1; /* Flag used by ::move-focus-out implementation */
guint has_scrolled : 1;
guint in_child : 3;
@@ -3956,7 +3957,9 @@ do_detach_tab (GtkNotebook *from,
"detachable", &detachable,
NULL);
+ from->priv->remove_in_detach = TRUE;
gtk_container_remove (GTK_CONTAINER (from), child);
+ from->priv->remove_in_detach = FALSE;
gtk_widget_get_allocation (GTK_WIDGET (to), &to_allocation);
to_priv->mouse_x = x + to_allocation.x;
@@ -5046,7 +5049,7 @@ gtk_notebook_real_remove (GtkNotebook *notebook,
priv->cur_page = NULL;
if (next_list && !destroying)
gtk_notebook_switch_page (notebook, GTK_NOTEBOOK_PAGE (next_list));
- if (priv->operation == DRAG_OPERATION_REORDER)
+ if (priv->operation == DRAG_OPERATION_REORDER && !priv->remove_in_detach)
gtk_notebook_stop_reorder (notebook);
}
@@ -5054,7 +5057,7 @@ gtk_notebook_real_remove (GtkNotebook *notebook,
{
priv->detached_tab = NULL;
- if (priv->operation == DRAG_OPERATION_DETACH)
+ if (priv->operation == DRAG_OPERATION_DETACH && !priv->remove_in_detach)
{
GdkDragContext *context;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]