[seed] modules: Add GtkBuilder module for handling gtkbuilder signal connection
- From: Robert Carr <racarr src gnome org>
- To: svn-commits-list gnome org
- Subject: [seed] modules: Add GtkBuilder module for handling gtkbuilder signal connection
- Date: Wed, 20 May 2009 22:11:46 -0400 (EDT)
commit 0aab273bdb295febb68e76d07433ddd4283f9ef6
Author: Robert Carr <racarr svn gnome org>
Date: Wed May 20 22:11:34 2009 -0400
modules: Add GtkBuilder module for handling gtkbuilder signal connection
---
configure.ac | 38 ++++++++++++++++++
libseed/seed.h | 7 ++-
modules/Makefile.am | 2 +-
modules/gtkbuilder/Makefile.am | 27 +++++++++++++
modules/gtkbuilder/gtkbuilder.c | 81 +++++++++++++++++++++++++++++++++++++++
5 files changed, 152 insertions(+), 3 deletions(-)
diff --git a/configure.ac b/configure.ac
index 444d9f7..3d46f96 100644
--- a/configure.ac
+++ b/configure.ac
@@ -186,6 +186,16 @@ AC_ARG_ENABLE(os-module,
AM_CONDITIONAL(BUILD_OS_MODULE, test "x$want_os_module" = "xyes")
AC_SUBST(BUILD_OS_MODULE)
+dnl ==== os ====
+AC_ARG_ENABLE(os-module,
+ AC_HELP_STRING([--enable-os-module],
+ [enable the os Seed module. [default=yes]]),
+ [want_os_module=$enableval],[want_os_module="yes"])
+
+
+AM_CONDITIONAL(BUILD_OS_MODULE, test "x$want_os_module" = "xyes")
+AC_SUBST(BUILD_OS_MODULE)
+
dnl ==== libxml ====
AC_ARG_ENABLE(libxml-module,
AC_HELP_STRING([--enable-libxml-module],
@@ -201,6 +211,32 @@ fi
AM_CONDITIONAL(BUILD_LIBXML_MODULE, test "x$want_libxml_module" = "xyes")
AC_SUBST(BUILD_LIBXML_MODULE)
+dnl ==== os ====
+AC_ARG_ENABLE(os-module,
+ AC_HELP_STRING([--enable-os-module],
+ [enable the os Seed module. [default=yes]]),
+ [want_os_module=$enableval],[want_os_module="yes"])
+
+
+AM_CONDITIONAL(BUILD_OS_MODULE, test "x$want_os_module" = "xyes")
+AC_SUBST(BUILD_OS_MODULE)
+
+dnl ==== gtkbuilder ====
+AC_ARG_ENABLE(gtkbuilder-module,
+ AC_HELP_STRING([--enable-gtkbuilder-module],
+ [enable the gtkbuilder Seed module. [default=yes]]),
+ [want_gtkbuilder_module=$enableval],[want_gtkbuilder_module="yes"])
+
+if test x"$want_gtkbuilder_module" == x"yes" ; then
+ PKG_CHECK_MODULES(GTK, gtk+-2.0)
+ AC_SUBST(GTK_CFLAGS)
+ AC_SUBST(GTK_LDFLAGS)
+fi
+
+AM_CONDITIONAL(BUILD_GTKBUILDER_MODULE, test "x$want_gtkbuilder_module" = "xyes")
+AC_SUBST(BUILD_GTKBUILDER_MODULE)
+
+
dnl ==== cairo ====
AC_ARG_ENABLE(cairo-module,
AC_HELP_STRING([--enable-cairo-module],
@@ -373,6 +409,7 @@ modules/dbus/Makefile
modules/dbus/util/Makefile
modules/libxml/Makefile
modules/cairo/Makefile
+modules/gtkbuilder/Makefile
])
AC_OUTPUT
@@ -396,6 +433,7 @@ Modules:
DBus.......................$want_dbus_module
libxml.....................$want_libxml_module
cairo......................$want_cairo_module
+ gtkbuilder.................$want_gtkbuilder_module
Examples:
Turtle.....................$want_turtle_example
diff --git a/libseed/seed.h b/libseed/seed.h
index 9efad7d..f1e09c9 100644
--- a/libseed/seed.h
+++ b/libseed/seed.h
@@ -78,10 +78,13 @@ SeedEngine *seed_init (gint *argc, gchar ***argv);
SeedEngine *seed_init_with_context_group (gint *argc, gchar ***argv,
SeedContextGroup group);
-SeedValue seed_simple_evaluate (SeedContext ctx, gchar * source, SeedException *exception);
+SeedValue seed_simple_evaluate (SeedContext ctx,
+ gchar * source,
+ SeedException *exception);
SeedScript *seed_make_script (SeedContext ctx,
- const gchar * js, const gchar * source_url,
+ const gchar * js,
+ const gchar * source_url,
gint line_number);
SeedScript *seed_script_new_from_file (SeedContext ctx, gchar * file);
SeedException seed_script_exception (SeedScript * s);
diff --git a/modules/Makefile.am b/modules/Makefile.am
index a658a85..c29069e 100644
--- a/modules/Makefile.am
+++ b/modules/Makefile.am
@@ -1 +1 @@
-SUBDIRS = example sqlite canvas Multiprocessing readline os sandbox dbus libxml cairo
+SUBDIRS = example sqlite canvas Multiprocessing readline os sandbox dbus libxml cairo gtkbuilder
diff --git a/modules/gtkbuilder/Makefile.am b/modules/gtkbuilder/Makefile.am
new file mode 100644
index 0000000..d24cd5a
--- /dev/null
+++ b/modules/gtkbuilder/Makefile.am
@@ -0,0 +1,27 @@
+if BUILD_GTKBUILDER_MODULE
+
+seedlibdir = ${libdir}/seed
+
+seedlib_LTLIBRARIES = \
+ libgtkbuilder.la
+
+libgtkbuilder_la_SOURCES = \
+ gtkbuilder.c
+
+
+AM_CPPFLAGS = \
+ -I top_srcdir@/libseed/ \
+ $(GOBJECT_INTROSPECTION_CFLAGS) \
+ $(GTK_CFLAGS) \
+ $(SEED_DEBUG_CFLAGS) \
+ $(SEED_PROFILE_CFLAGS)
+
+libgtkbuilder_la_LDFLAGS = \
+ $(GTK_LDFLAGS) \
+ $(GOBJECT_INTROSPECTION_LDFLAGS) \
+ $(SEED_PROFILE_LIBS)
+
+endif
+
+
+
diff --git a/modules/gtkbuilder/gtkbuilder.c b/modules/gtkbuilder/gtkbuilder.c
new file mode 100644
index 0000000..6aaba49
--- /dev/null
+++ b/modules/gtkbuilder/gtkbuilder.c
@@ -0,0 +1,81 @@
+#include <seed.h>
+#include <gtk/gtk.h>
+
+typedef struct _builder_ud {
+ SeedContext ctx;
+ SeedObject obj;
+ SeedObject user_data;
+} builder_ud;
+
+// Need to support connect object.
+static void
+seed_builder_connect_func (GtkBuilder *builder,
+ GObject *object,
+ const gchar *signal_name,
+ const gchar *handler_name,
+ GObject *connect_object,
+ GConnectFlags flags,
+ gpointer user_data)
+{
+ SeedContext ctx;
+ SeedObject obj, func;
+ builder_ud *priv = (builder_ud *)user_data;
+ GClosure *closure;
+
+ ctx = priv->ctx;
+ obj = priv->obj;
+
+ func = seed_object_get_property (ctx, obj, handler_name);
+ if (!seed_value_is_object (ctx, func) || !seed_value_is_function (ctx, func))
+ return;
+
+ closure = seed_closure_new (ctx, func, priv->user_data, "signal handler (GtkBuilder)");
+
+ g_signal_connect_closure (object, signal_name, closure, FALSE);
+}
+
+SeedValue
+seed_gtk_builder_connect_signals(SeedContext ctx,
+ SeedObject function,
+ SeedObject this_object,
+ gsize argument_count,
+ const SeedValue arguments[],
+ SeedException *exception)
+{
+ builder_ud ud;
+ GtkBuilder *b;
+
+ if (!seed_value_is_object (ctx, arguments[0]))
+ {
+ seed_make_exception (ctx, exception, "ArgumentError",
+ "connect_signals expects one object as an argument");
+ return seed_make_undefined (ctx);
+ }
+
+ b = GTK_BUILDER (seed_value_to_object (ctx, this_object, exception));
+ ud.ctx = ctx;
+ ud.obj = arguments[0];
+ if (argument_count == 2)
+ ud.user_data = arguments[1];
+ else
+ ud.user_data = NULL;
+ gtk_builder_connect_signals_full(b, seed_builder_connect_func, &ud);
+
+ return seed_make_undefined (ctx);
+}
+
+SeedObject
+seed_module_init(SeedEngine *eng)
+{
+ SeedObject gtkbuilder_proto;
+
+ gtkbuilder_proto = seed_simple_evaluate (eng->context,
+ "imports.gi.Gtk.Builder.prototype",
+ NULL);
+ seed_create_function (eng->context,
+ "connect_signals",
+ seed_gtk_builder_connect_signals,
+ gtkbuilder_proto);
+
+ return seed_make_object (eng->context, NULL, NULL);
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]