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