From: Emanuele Aina Date: Fri, 22 Mar 2013 12:36:30 +0000 (+0100) Subject: ui-utils: Add empathy_builder_get_resource() X-Git-Url: https://git.0d.be/?p=empathy.git;a=commitdiff_plain;h=788d278853ee3ac061f84b611a3290d5adc31577 ui-utils: Add empathy_builder_get_resource() Add the empathy_builder_get_file() companion to load UI elements from embedded resources. https://bugzilla.gnome.org/show_bug.cgi?id=696978 --- diff --git a/libempathy-gtk/empathy-ui-utils.c b/libempathy-gtk/empathy-ui-utils.c index 9f430084..32f1fe38 100644 --- a/libempathy-gtk/empathy-ui-utils.c +++ b/libempathy-gtk/empathy-ui-utils.c @@ -75,8 +75,15 @@ empathy_gtk_init (void) initialized = TRUE; } +enum _BuilderSource +{ + BUILDER_SOURCE_FILE, + BUILDER_SOURCE_RESOURCE +}; + static GtkBuilder * -builder_get_file_valist (const gchar *filename, +builder_get_valist (const gchar *sourcename, + enum _BuilderSource source, const gchar *first_object, va_list args) { @@ -84,16 +91,29 @@ builder_get_file_valist (const gchar *filename, const gchar *name; GObject **object_ptr; GError *error = NULL; + gboolean success; - DEBUG ("Loading file %s", filename); + DEBUG ("Loading %s '%s'", source == BUILDER_SOURCE_FILE ? "file" : "resource", sourcename); gui = gtk_builder_new (); gtk_builder_set_translation_domain (gui, GETTEXT_PACKAGE); - if (!gtk_builder_add_from_file (gui, filename, &error)) + switch (source) + { + case BUILDER_SOURCE_FILE: + success = gtk_builder_add_from_file (gui, sourcename, &error); + break; + case BUILDER_SOURCE_RESOURCE: + success = gtk_builder_add_from_resource (gui, sourcename, &error); + break; + default: + g_assert_not_reached (); + } + + if (!success) { g_critical ("GtkBuilder Error (%s): %s", - filename, error->message); + sourcename, error->message); g_clear_error (&error); g_object_unref (gui); @@ -134,7 +154,22 @@ empathy_builder_get_file (const gchar *filename, va_list args; va_start (args, first_object); - gui = builder_get_file_valist (filename, first_object, args); + gui = builder_get_valist (filename, BUILDER_SOURCE_FILE, first_object, args); + va_end (args); + + return gui; +} + +GtkBuilder * +empathy_builder_get_resource (const gchar *resourcename, + const gchar *first_object, + ...) +{ + GtkBuilder *gui; + va_list args; + + va_start (args, first_object); + gui = builder_get_valist (resourcename, BUILDER_SOURCE_RESOURCE, first_object, args); va_end (args); return gui; diff --git a/libempathy-gtk/empathy-ui-utils.h b/libempathy-gtk/empathy-ui-utils.h index 73232cf5..e5c3aa1f 100644 --- a/libempathy-gtk/empathy-ui-utils.h +++ b/libempathy-gtk/empathy-ui-utils.h @@ -57,6 +57,9 @@ void empathy_gtk_init (void); GtkBuilder * empathy_builder_get_file (const gchar *filename, const gchar *first_object, ...); +GtkBuilder * empathy_builder_get_resource (const gchar *resourcename, + const gchar *first_object, + ...); void empathy_builder_connect (GtkBuilder *gui, gpointer user_data, const gchar *first_object,