summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorKristian Rietveld <kris@gtk.org>2003-06-06 21:42:52 +0000
committerKristian Rietveld <kristian@src.gnome.org>2003-06-06 21:42:52 +0000
commite0e04dd8474fe8d49f7bddcf4a5e8437a804149e (patch)
tree4b2816ab71139850346a09c0cc77308e969b656e /gtk
parent16191e527407f6d24b8cd376de8b106233ee5906 (diff)
downloadgtk+-e0e04dd8474fe8d49f7bddcf4a5e8437a804149e.tar.gz
Merged from stable.
Fri Jun 6 23:38:23 2003 Kristian Rietveld <kris@gtk.org> Merged from stable. * gtk/gtktreeview.c (do_expand_collapse), (expand_collapse_timeout), (cancel_arrow_animation): made expand_collapse_timeout a wrapper with locks around do_expand_collapse, made cancel_arrow_animation use do_expand_collapse. Fixes threadlock. (Fixes #111286, patch from Peter Bloomfield).
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtktreeview.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c
index f0fa79588c..42cb617c77 100644
--- a/gtk/gtktreeview.c
+++ b/gtk/gtktreeview.c
@@ -349,6 +349,7 @@ static void gtk_tree_view_real_set_cursor (GtkTreeView
static gboolean gtk_tree_view_has_special_cell (GtkTreeView *tree_view);
static gboolean expand_collapse_timeout (gpointer data);
+static gboolean do_expand_collapse (GtkTreeView *tree_view);
/* interactive search */
static void gtk_tree_view_search_dialog_destroy (GtkWidget *search_dialog,
@@ -6441,7 +6442,7 @@ static void
cancel_arrow_animation (GtkTreeView *tree_view)
{
if (tree_view->priv->expand_collapse_timeout)
- while (expand_collapse_timeout (tree_view));
+ while (do_expand_collapse (tree_view));
tree_view->priv->expand_collapse_timeout = 0;
}
@@ -9175,14 +9176,25 @@ gtk_tree_view_expand_all (GtkTreeView *tree_view)
static gboolean
expand_collapse_timeout (gpointer data)
{
- GtkTreeView *tree_view = data;
+ gboolean retval;
+
+ GDK_THREADS_ENTER ();
+
+ retval = do_expand_collapse (data);
+
+ GDK_THREADS_LEAVE ();
+
+ return retval;
+}
+
+static gboolean
+do_expand_collapse (GtkTreeView *tree_view)
+{
GtkRBNode *node;
GtkRBTree *tree;
gboolean expanding;
gboolean redraw;
- GDK_THREADS_ENTER ();
-
redraw = FALSE;
expanding = TRUE;
@@ -9231,13 +9243,9 @@ expand_collapse_timeout (gpointer data)
{
gtk_tree_view_queue_draw_arrow (tree_view, tree, node, NULL);
- GDK_THREADS_LEAVE ();
-
return TRUE;
}
- GDK_THREADS_LEAVE ();
-
return FALSE;
}