[nautilus-sound-converter] Set pointers to NULL if gtkbuilder file is not found, and use better variable names.



commit e4773e600696236c58bc2226574841aa2e7b4209
Author: Brian Pepple <bpepple fedoraproject org>
Date:   Sat Nov 20 16:51:03 2010 -0500

    Set pointers to NULL if gtkbuilder file is not found, and use better variable names.

 src/nsc-converter.c |   37 ++++++++++++++++---------------
 src/nsc-xml.c       |   58 +++++++++++++++++++++++++-------------------------
 src/nsc-xml.h       |    7 +++--
 3 files changed, 52 insertions(+), 50 deletions(-)
---
diff --git a/src/nsc-converter.c b/src/nsc-converter.c
index be1b08d..d5bfdf9 100644
--- a/src/nsc-converter.c
+++ b/src/nsc-converter.c
@@ -225,19 +225,22 @@ static void
 create_progress_dialog (NscConverter *converter)
 {
 	NscConverterPrivate *priv;
+	GtkBuilder          *gui;
 	GtkWidget           *button;
 
 	priv = NSC_CONVERTER_GET_PRIVATE (converter);
 
 	/* Create the gtkbuilder, and grab the widgets */
-	nsc_xml_get_file ("progress.ui",
-			  "progress_dialog", &priv->progress_dlg,
-			  "file_progressbar", &priv->progressbar,
-			  "speed_progressbar", &priv->speedbar,
-			  "cancel_button", &button,
-			  NULL);
-
-	/* Connect the signal for the cancel button */
+	gui = nsc_builder_get_file ("progress.ui",
+				    "progress_dialog", &priv->progress_dlg,
+				    "file_progressbar", &priv->progressbar,
+				    "speed_progressbar", &priv->speedbar,
+				    "cancel_button", &button,
+				    NULL);
+
+	g_object_unref (gui);
+
+        /* Connect the signal for the cancel button */
 	g_signal_connect (G_OBJECT (button), "clicked",
 			  (GCallback) progress_cancel_cb,
 			  converter);
@@ -647,22 +650,20 @@ static void
 create_main_dialog (NscConverter *converter)
 {
 	NscConverterPrivate *priv;
+	GtkBuilder          *gui;
 	GtkWidget           *hbox, *edit, *image;
 	const gchar         *profile_id;
-	gboolean             result;
 
 	priv = NSC_CONVERTER_GET_PRIVATE (converter);
 
 	/* Create the gtkbuilder and grab some widgets */
-	result = nsc_xml_get_file ("main.ui",
-				   "main_dialog", &priv->dialog,
-				   "path_chooser", &priv->path_chooser,
-				   "format_hbox", &hbox,
-				   NULL);
-
-	if (!result) {
-		return;
-	}
+	gui = nsc_builder_get_file ("main.ui",
+				    "main_dialog", &priv->dialog,
+				    "path_chooser", &priv->path_chooser,
+				    "format_hbox", &hbox,
+				    NULL);
+
+	g_object_unref (gui);
 
 	/*
 	 * Set the source directory if the user wants
diff --git a/src/nsc-xml.c b/src/nsc-xml.c
index eda264a..ac20d1f 100644
--- a/src/nsc-xml.c
+++ b/src/nsc-xml.c
@@ -28,63 +28,63 @@
 
 static GtkBuilder *
 xml_get_file (const gchar *filename,
-              const gchar *first_widget,
+              const gchar *first_object,
               va_list      args)
 {
-	GObject    **pointer;
-	GtkBuilder  *ui = NULL;
+	GtkBuilder  *gui = NULL;
 	const char  *name;
 	gchar       *path;
+	GObject    **object_ptr;
 	GError      *err = NULL;
 
 	/* Create the gtkbuilder */
-	ui = gtk_builder_new ();
-	gtk_builder_set_translation_domain (ui, GETTEXT_PACKAGE);
+	gui = gtk_builder_new ();
+	gtk_builder_set_translation_domain (gui, GETTEXT_PACKAGE);
 	path = g_build_filename (DATADIR, PACKAGE, filename, NULL);
 
 	/* Load the xml file */
-	if (gtk_builder_add_from_file (ui, path, &err) == 0) {
-		g_warning ("XML file error: %s", err->message);
-		g_error_free (err);
+	if (!gtk_builder_add_from_file (gui, path, &err)) {
+		g_critical ("XML file error: %s", err->message);
+		g_clear_error (&err);
 		g_free (path);
+		g_object_unref (gui);
+
+		/* we need to iterate and set all of the pointers to NULL */
+		for (name = first_object; name; name = va_arg (args, const gchar *)) {
+			object_ptr = va_arg (args, GObject**);
+
+			*object_ptr = NULL;
+		}
 		return NULL;
 	}
 	g_free (path);
 
 	/* Grab the widgets */
-	for (name = first_widget; name; name = va_arg (args, char *)) {
-		pointer = va_arg (args, void *);
+	for (name = first_object; name; name = va_arg (args, const gchar *)) {
+		object_ptr = va_arg (args, GObject**);
 		
-		*pointer = gtk_builder_get_object (ui, name);
+		*object_ptr = gtk_builder_get_object (gui, name);
 		
-		if (!*pointer) {
+		if (!*object_ptr) {
 			g_warning ("Widget '%s' at '%s' is missing.",
 				   name, filename);
 			continue;
 		}
 	}
-	return ui;
+	return gui;
 }
 
-gboolean
-nsc_xml_get_file (const gchar *filename,
-		  const gchar *first_widget,
-		  ...)
+GtkBuilder *
+nsc_builder_get_file (const gchar *filename,
+		      const gchar *first_object,
+		      ...)
 {
-	GtkBuilder *ui;
+	GtkBuilder *gui;
 	va_list     args;
 
-	va_start (args, first_widget);
-
-	ui = xml_get_file (filename, first_widget, args);
-
+	va_start (args, first_object);
+	gui = xml_get_file (filename, first_object, args);
 	va_end (args);
 
-	if (!ui) {
-		return FALSE;
-	}
-
-	g_object_unref (ui);
-
-	return TRUE;
+	return gui;
 }
diff --git a/src/nsc-xml.h b/src/nsc-xml.h
index c3bc24e..a43b1a0 100644
--- a/src/nsc-xml.h
+++ b/src/nsc-xml.h
@@ -23,10 +23,11 @@
 #define __NSC_XML_H__
 
 #include <glib/gtypes.h>
+#include <gtk/gtk.h>
 
-gboolean    nsc_xml_get_file (const gchar *filename,
-			      const gchar *first_widget,
-			      ...);
+GtkBuilder *nsc_builder_get_file (const gchar *filename,
+				  const gchar *first_widget,
+				  ...);
 
 #endif /*  __NSC_XML_H__ */
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]