r20532 - gnucash/trunk/src/gnome-utils - Provide gtkbuilder equivalents for some libglade based support functions
Geert Janssens
gjanssens at code.gnucash.org
Tue Apr 5 15:55:37 EDT 2011
Author: gjanssens
Date: 2011-04-05 15:55:37 -0400 (Tue, 05 Apr 2011)
New Revision: 20532
Trac: http://svn.gnucash.org/trac/changeset/20532
Modified:
gnucash/trunk/src/gnome-utils/dialog-utils.c
gnucash/trunk/src/gnome-utils/dialog-utils.h
Log:
Provide gtkbuilder equivalents for some libglade based support functions
Modified: gnucash/trunk/src/gnome-utils/dialog-utils.c
===================================================================
--- gnucash/trunk/src/gnome-utils/dialog-utils.c 2011-04-05 19:55:25 UTC (rev 20531)
+++ gnucash/trunk/src/gnome-utils/dialog-utils.c 2011-04-05 19:55:37 UTC (rev 20532)
@@ -906,7 +906,97 @@
}
}
+/*--------------------------------------------------------------------------
+ * GtkBuilder support functions
+ *-------------------------------------------------------------------------*/
+
+/* gnc_builder_add_from_file:
+ *
+ * a convenience wrapper for gtk_builder_add_objects_from_file.
+ * It takes care of finding the directory for glade files and prints a
+ * warning message in case of an error.
+ */
+GtkBuilder *
+gnc_builder_add_from_file (const char *filename, const char *root)
+{
+ GtkBuilder *gncbuilder = NULL;
+ GError* error = NULL;
+ char *fname;
+ gchar *gnc_builder_dir;
+
+ g_return_val_if_fail (filename != NULL, NULL);
+ g_return_val_if_fail (root != NULL, NULL);
+
+ gnc_builder_dir = gnc_path_get_gtkbuilderdir ();
+ fname = g_build_filename(gnc_builder_dir, filename, (char *)NULL);
+ g_free (gnc_builder_dir);
+
+ {
+ gchar *localroot = g_strdup(root);
+ gchar *objects[] = { localroot, NULL };
+ gncbuilder = gtk_builder_new ();
+ if (!gtk_builder_add_objects_from_file (gncbuilder, fname, objects, &error))
+ {
+ PWARN ("Couldn't load builder file: %s", error->message);
+ g_error_free (error);
+ }
+ g_free (localroot);
+ }
+
+ g_free (fname);
+
+ return gncbuilder;
+}
+
+/*
+ * The following function is built from a couple of glade functions.
+ */
+//GModule *allsymbols = NULL;
+
void
+gnc_builder_connect_full_func(GtkBuilder *builder,
+ GObject *signal_object,
+ const gchar *signal_name,
+ const gchar *handler_name,
+ GObject *connect_object,
+ GConnectFlags flags,
+ gpointer user_data)
+{
+ GCallback func;
+ GCallback *p_func = &func;
+
+ if (allsymbols == NULL)
+ {
+ /* get a handle on the main executable -- use this to find symbols */
+ allsymbols = g_module_open(NULL, 0);
+ }
+
+ if (!g_module_symbol(allsymbols, handler_name, (gpointer *)p_func))
+ {
+#ifdef HAVE_DLSYM
+ /* Fallback to dlsym -- necessary for *BSD linkers */
+ func = dlsym(RTLD_DEFAULT, handler_name);
+#else
+ func = NULL;
+#endif
+ if (func == NULL)
+ {
+ PWARN("ggaff: could not find signal handler '%s'.", handler_name);
+ return;
+ }
+ }
+
+ if (connect_object)
+ g_signal_connect_object (signal_object, signal_name, func,
+ connect_object, flags);
+ else
+ g_signal_connect_data(signal_object, signal_name, func,
+ user_data,NULL , flags);
+}
+
+/* End of GtkBuilder utilities */
+
+void
gnc_gtk_dialog_add_button (GtkWidget *dialog, const gchar *label, const gchar *stock_id, guint response)
{
GtkWidget *button;
Modified: gnucash/trunk/src/gnome-utils/dialog-utils.h
===================================================================
--- gnucash/trunk/src/gnome-utils/dialog-utils.h 2011-04-05 19:55:25 UTC (rev 20531)
+++ gnucash/trunk/src/gnome-utils/dialog-utils.h 2011-04-05 19:55:37 UTC (rev 20532)
@@ -128,6 +128,16 @@
gboolean after,
gpointer user_data);
+GtkBuilder * gnc_builder_add_from_file (const char *filename, const char *root);
+void gnc_builder_connect_full_func(GtkBuilder *builder,
+ GObject *signal_object,
+ const gchar *signal_name,
+ const gchar *handler_name,
+ GObject *connect_object,
+ GConnectFlags flags,
+ gpointer user_data);
+
+
/** This function generates a button with icon and adds it to a
* GtkDialog. This is similar to just adding a stock button to the
* dialog, only you can add an arbitrary pairing of button and label,
More information about the gnucash-changes
mailing list