[geany/geany] b0b0eb: Make sure not to emit activation/change signals twice from entry action

Colomban Wendling git-noreply at xxxxx
Thu Jul 26 00:03:19 UTC 2012


Branch:      refs/heads/document-messages
Author:      Colomban Wendling <ban at herbesfolles.org>
Committer:   Colomban Wendling <ban at herbesfolles.org>
Date:        Fri, 10 Feb 2012 17:24:10
Commit:      b0b0ebb469a6b7eb74d321e6f5d7fe6f0bfcf6ba
             https://github.com/geany/geany/commit/b0b0ebb469a6b7eb74d321e6f5d7fe6f0bfcf6ba

Log Message:
-----------
Make sure not to emit activation/change signals twice from entry action

If connect_proxy() get called twice, then the handlers would have been
connected twice, leading to wrongly emit activation/change signals twice
for a single input signal.

For whatever reason connect_proxy() is actually called twice for the
quick search entry on Windows (but not on Linux), so this fixes the
search entry behavior on Windows.


Modified Paths:
--------------
    src/geanyentryaction.c

Modified: src/geanyentryaction.c
22 files changed, 15 insertions(+), 7 deletions(-)
===================================================================
@@ -40,6 +40,7 @@ struct _GeanyEntryActionPrivate
 {
 	GtkWidget	*entry;
 	gboolean	 numeric;
+	gboolean	 connected;
 };
 
 enum
@@ -108,13 +109,19 @@ static void geany_entry_action_connect_proxy(GtkAction *action, GtkWidget *widge
 {
 	GeanyEntryActionPrivate *priv = GEANY_ENTRY_ACTION_GET_PRIVATE(action);
 
-	if (priv->numeric)
-		g_signal_connect(priv->entry, "insert-text",
-			G_CALLBACK(ui_editable_insert_text_callback), NULL);
-	g_signal_connect(priv->entry, "changed", G_CALLBACK(delegate_entry_changed_cb), action);
-	g_signal_connect(priv->entry, "activate", G_CALLBACK(delegate_entry_activate_cb), action);
-	g_signal_connect(priv->entry, "activate-backward",
-		G_CALLBACK(delegate_entry_activate_backward_cb), action);
+	/* make sure not to connect handlers twice */
+	if (! priv->connected)
+	{
+		if (priv->numeric)
+			g_signal_connect(priv->entry, "insert-text",
+				G_CALLBACK(ui_editable_insert_text_callback), NULL);
+		g_signal_connect(priv->entry, "changed", G_CALLBACK(delegate_entry_changed_cb), action);
+		g_signal_connect(priv->entry, "activate", G_CALLBACK(delegate_entry_activate_cb), action);
+		g_signal_connect(priv->entry, "activate-backward",
+			G_CALLBACK(delegate_entry_activate_backward_cb), action);
+
+		priv->connected = TRUE;
+	}
 
 	GTK_ACTION_CLASS(geany_entry_action_parent_class)->connect_proxy(action, widget);
 }
@@ -167,6 +174,7 @@ static void geany_entry_action_init(GeanyEntryAction *action)
 	priv = action->priv;
 	priv->entry = NULL;
 	priv->numeric = FALSE;
+	priv->connected = FALSE;
 }
 
 


@@ Diff output truncated at 100000 characters. @@


--------------
This E-Mail was brought to you by github_commit_mail.py (Source: TBD).



More information about the Commits mailing list