Branch: refs/heads/master Author: Colomban Wendling ban@herbesfolles.org Committer: Colomban Wendling ban@herbesfolles.org Date: Fri, 10 Apr 2015 14:16:18 UTC Commit: c85b846eeb08ff9c3260f35a51367736e8b87287 https://github.com/geany/geany/commit/c85b846eeb08ff9c3260f35a51367736e8b872...
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); - -@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).