[gtksourceview] Made block/unblock reintrant



commit 2bff0d24c2432fb93d8cb430c55b433d0cf3db2e
Author: Jesse van den Kieboom <jesse vandenkieboom epfl ch>
Date:   Sun Jan 3 12:57:47 2010 +0100

    Made block/unblock reintrant

 gtksourceview/gtksourcecompletion.c |   27 +++++++++++++++++++++++----
 1 files changed, 23 insertions(+), 4 deletions(-)
---
diff --git a/gtksourceview/gtksourcecompletion.c b/gtksourceview/gtksourcecompletion.c
index 05e372f..4cb27a5 100644
--- a/gtksourceview/gtksourcecompletion.c
+++ b/gtksourceview/gtksourcecompletion.c
@@ -158,6 +158,8 @@ struct _GtkSourceCompletionPrivate
 	gint min_auto_complete_delay;
 	GList *auto_completion_selection;
 	GtkSourceCompletionContext *auto_completion_context;
+
+	gint block_count;
 };
 
 static guint signals[LAST_SIGNAL] = { 0 };
@@ -228,16 +230,33 @@ static void
 completion_begin_block (GtkSourceCompletion *completion,
                         GtkSourceBuffer     *buffer)
 {
-	g_signal_handler_block (buffer, completion->priv->signals_ids[TEXT_BUFFER_INSERT_TEXT]);
-	g_signal_handler_block (buffer, completion->priv->signals_ids[TEXT_BUFFER_DELETE_RANGE]);
+	if (completion->priv->block_count == 0)
+	{
+		g_signal_handler_block (buffer,
+		                        completion->priv->signals_ids[TEXT_BUFFER_INSERT_TEXT]);
+		g_signal_handler_block (buffer,
+		                        completion->priv->signals_ids[TEXT_BUFFER_DELETE_RANGE]);
+	}
+
+	++completion->priv->block_count;
 }
 
 static void
 completion_end_block (GtkSourceCompletion *completion,
                       GtkSourceBuffer     *buffer)
 {
-	g_signal_handler_unblock (buffer, completion->priv->signals_ids[TEXT_BUFFER_INSERT_TEXT]);
-	g_signal_handler_unblock (buffer, completion->priv->signals_ids[TEXT_BUFFER_DELETE_RANGE]);
+	if (completion->priv->block_count == 0)
+	{
+		return;
+	}
+
+	if (--completion->priv->block_count == 0)
+	{
+		g_signal_handler_unblock (buffer,
+		                          completion->priv->signals_ids[TEXT_BUFFER_INSERT_TEXT]);
+		g_signal_handler_unblock (buffer,
+		                          completion->priv->signals_ids[TEXT_BUFFER_DELETE_RANGE]);
+	}
 }
 
 static gboolean



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]