[geany/geany] c85b84: Simplify automated signal connection

Colomban Wendling git-noreply at xxxxx
Fri Apr 10 14:16:18 UTC 2015


Branch:      refs/heads/master
Author:      Colomban Wendling <ban at herbesfolles.org>
Committer:   Colomban Wendling <ban at herbesfolles.org>
Date:        Fri, 10 Apr 2015 14:16:18 UTC
Commit:      c85b846eeb08ff9c3260f35a51367736e8b87287
             https://github.com/geany/geany/commit/c85b846eeb08ff9c3260f35a51367736e8b87287

Log Message:
-----------
Simplify automated signal connection

Instead of processing a template C source in the build system, generate
a list to be included by the preprocessor.

This simplifies the build system code as it now only generates the list
and doesn't take care of processing the template.  It incidentally
fixes build on systems with 4.2BSD sed (at least OSX and FreeBSD) as it
removes some offending sed code.


Modified Paths:
--------------
    src/Makefile.am
    src/callbacks.c
    src/signalconn.c.in

Modified: src/Makefile.am
16 lines changed, 6 insertions(+), 10 deletions(-)
===================================================================
@@ -10,8 +10,7 @@ EXTRA_DIST = \
 	keybindingsprivate.h \
 	pluginprivate.h \
 	projectprivate.h \
-	makefile.win32 \
-	$(srcdir)/signalconn.c.in
+	makefile.win32
 
 AM_CPPFLAGS = \
 	-I$(top_srcdir) \
@@ -163,18 +162,15 @@ libgeany_la_SOURCES += vte.c vte.h
 
 endif
 
-callbacks.c: signalconn.c
+callbacks.c: signallist.i
 
 glade_file=$(top_srcdir)/data/geany.glade
-template_file=$(srcdir)/signalconn.c.in
 
-signalconn.c: $(glade_file) $(template_file)
+signallist.i: $(glade_file) Makefile
 	$(AM_V_GEN)( \
 		echo '/* This file is auto-generated, do not edit. */' && \
-		$(SED) -n '/@callback_map@/q;p' "$(template_file)" && \
-		$(SED) -n 's/^.*handler="\([^"]\+\)".*$$/\tg_hash_table_insert(hash, (gpointer) "\1", G_CALLBACK(\1));/p' "$(glade_file)" \
-			| $(SORT) | $(UNIQ) && \
-		$(SED) -n '/@callback_map@/{:l;n;p;b l}' "$(template_file)" \
+		$(SED) -n 's/^.*handler="\([^"]\+\)".*$$/ITEM(\1)/p' "$(glade_file)" \
+			| $(SORT) | $(UNIQ) \
 	) > $@ || { $(RM) $@ && exit 1; }
 
-CLEANFILES += signalconn.c
+CLEANFILES += signallist.i


Modified: src/callbacks.c
34 lines changed, 33 insertions(+), 1 deletions(-)
===================================================================
@@ -1909,4 +1909,36 @@ static void on_detect_width_from_file_activate(GtkMenuItem *menuitem, gpointer u
 	}
 }
 
-#include "signalconn.c"
+
+static void builder_connect_func(GtkBuilder *builder, GObject *object,
+	const gchar *signal_name, const gchar *handler_name, GObject *connect_obj,
+	GConnectFlags flags, gpointer user_data)
+{
+	GHashTable *hash = user_data;
+	GCallback callback;
+
+	callback = g_hash_table_lookup(hash, handler_name);
+	g_return_if_fail(callback);
+
+	if (connect_obj == NULL)
+		g_signal_connect_data(object, signal_name, callback, NULL, NULL, flags);
+	else
+		g_signal_connect_object(object, signal_name, callback, connect_obj, flags);
+}
+
+
+void callbacks_connect(GtkBuilder *builder)
+{
+	GHashTable *hash;
+
+	g_return_if_fail(GTK_IS_BUILDER(builder));
+
+	hash = g_hash_table_new(g_str_hash, g_str_equal);
+
+#define ITEM(n) g_hash_table_insert(hash, (gpointer) #n, G_CALLBACK(n));
+#	include "signallist.i"
+#undef ITEM
+
+	gtk_builder_connect_signals_full(builder, builder_connect_func, hash);
+	g_hash_table_destroy(hash);
+}


Modified: src/signalconn.c.in
32 lines changed, 0 insertions(+), 32 deletions(-)
===================================================================
@@ -1,32 +0,0 @@
-
-
-static void builder_connect_func(GtkBuilder *builder, GObject *object,
-	const gchar *signal_name, const gchar *handler_name, GObject *connect_obj,
-	GConnectFlags flags, gpointer user_data)
-{
-	GHashTable *hash = user_data;
-	GCallback callback;
-
-	callback = g_hash_table_lookup(hash, handler_name);
-	g_return_if_fail(callback);
-
-	if (connect_obj == NULL)
-		g_signal_connect_data(object, signal_name, callback, NULL, NULL, flags);
-	else
-		g_signal_connect_object(object, signal_name, callback, connect_obj, flags);
-}
-
-
-void callbacks_connect(GtkBuilder *builder)
-{
-	GHashTable *hash;
-
-	g_return_if_fail(GTK_IS_BUILDER(builder));
-
-	hash = g_hash_table_new(g_str_hash, g_str_equal);
-
- at callback_map@
-
-	gtk_builder_connect_signals_full(builder, builder_connect_func, hash);
-	g_hash_table_destroy(hash);
-}



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Commits mailing list