[gnac/devel] Code refactoring



commit 2343787e7c03ea52920244395f3391a63c7ab71f
Author: BenoÃt Dupasquier <bdupasqu src gnome org>
Date:   Sun Oct 23 11:37:59 2011 +0100

    Code refactoring

 src/gnac-main.c                         |    3 +-
 src/gnac-prefs.c                        |  342 ++++++++++++++-----------------
 src/gnac-properties.c                   |   37 +---
 src/gnac-ui.c                           |   29 +--
 src/gnac-utils.c                        |   24 ++-
 src/gnac-utils.h                        |    9 +
 src/profiles/gnac-profiles-manager.c    |  145 +++++--------
 src/profiles/gnac-profiles-properties.c |  105 ++++------
 8 files changed, 299 insertions(+), 395 deletions(-)
---
diff --git a/src/gnac-main.c b/src/gnac-main.c
index da2ea1a..29ef7a8 100644
--- a/src/gnac-main.c
+++ b/src/gnac-main.c
@@ -56,7 +56,6 @@
 static gboolean   conversion_errors = FALSE;
 static gboolean   continue_files_action;
 static gboolean   quit_app = FALSE;
-static gboolean   overwrite = FALSE;
 static gboolean   remember_overwrite = FALSE;
 static GThread   *file_action_thread = NULL;
 static guint64    prev_time_left = -1;
@@ -435,6 +434,8 @@ gnac_on_converter_overwrite_cb(LibgnacConverter *converter,
   GFileInfo *info;
   GError *error = NULL;
 
+  static gboolean overwrite = FALSE;
+
   uri = (GFile*) file;
   info = g_file_query_info(uri,
       G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME,
diff --git a/src/gnac-prefs.c b/src/gnac-prefs.c
index bec96de..afc9003 100644
--- a/src/gnac-prefs.c
+++ b/src/gnac-prefs.c
@@ -101,169 +101,163 @@ gnac_prefs_free_tooltip_patterns(void)
 }
 
 
+static GtkWidget *
+gnac_prefs_get_widget(const gchar *widget_name)
+{
+  return GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder, widget_name));
+}
+
+
 static const gchar *
-gnac_prefs_entry_get_text(const gchar *name)
+gnac_prefs_entry_get_text(const gchar *entry_name)
+{
+  GtkEntry *entry;
+  entry = GTK_ENTRY(gnac_prefs_get_widget(entry_name));
+  return gtk_entry_get_text(entry);
+}
+
+
+static void
+gnac_prefs_entry_set_text(const gchar *entry_name,
+                          const gchar *text)
+{
+  GtkEntry *entry;
+  entry = GTK_ENTRY(gnac_prefs_get_widget(entry_name));
+  gtk_entry_set_text(entry, text);
+}
+
+
+static void
+gnac_prefs_set_widget_sensitive(const gchar *widget_name,
+                                gboolean     sensitive)
 {
   GtkWidget *widget;
-  widget = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder, name));
-  return gtk_entry_get_text(GTK_ENTRY(widget));
+  widget = gnac_prefs_get_widget(widget_name);
+  gtk_widget_set_sensitive(widget, sensitive);
+}
+
+
+static void
+gnac_prefs_set_event_box_above_child(const gchar *box_name,
+                                     gboolean     above_child)
+{
+  GtkEventBox *event_box;
+  event_box = GTK_EVENT_BOX(gnac_prefs_get_widget(box_name));
+  gtk_event_box_set_above_child(event_box, above_child);
+}
+
+
+static gint
+gnac_prefs_get_combo_box_active(const gchar *box_name)
+{
+  GtkComboBox *combo_box;
+  combo_box = GTK_COMBO_BOX(gnac_prefs_get_widget(box_name));
+  return gtk_combo_box_get_active(combo_box);
+}
+
+
+static void
+gnac_prefs_set_combo_box_active(const gchar *box_name,
+                                gint         index)
+{
+  GtkComboBox *combo_box;
+  combo_box = GTK_COMBO_BOX(gnac_prefs_get_widget(box_name));
+  return gtk_combo_box_set_active(combo_box, index);
 }
 
 
+static void
+gnac_prefs_set_toggle_button_active(const gchar *button_name,
+                                    gboolean     is_active)
+{
+  GtkToggleButton *button;
+  button = GTK_TOGGLE_BUTTON(gnac_prefs_get_widget(button_name));
+  gtk_toggle_button_set_active(button, is_active);
+}
+
 static void 
 gnac_prefs_set_same_mode(void)
 {
-  GtkWidget *filechooserbutton;
-  GtkWidget *subfolder_entry;
-  GtkWidget *subfolder_eventbox;
-  GtkWidget *subfolder_label;
-  GtkWidget *selected_eventbox;
-  GtkWidget *selected_label;
-
-  filechooserbutton = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder, 
-                                                        "filechooserbutton"));
-  subfolder_entry = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder, 
-                                                      "subfolder_entry"));
-  subfolder_eventbox = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder, 
-                                                  "subfolder_eventbox"));
-  subfolder_label = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder, 
-                                                  "subfolder_label"));
-  selected_eventbox = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder,
-                                                  "selected_eventbox"));
-  selected_label = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder, 
-                                                      "selected_label"));
-
-  gtk_event_box_set_above_child(GTK_EVENT_BOX(subfolder_eventbox), TRUE);
-  gtk_event_box_set_above_child(GTK_EVENT_BOX(selected_eventbox), TRUE);
-  gtk_widget_set_sensitive(subfolder_entry, FALSE);
-  gtk_widget_set_sensitive(filechooserbutton, FALSE);
-  gtk_widget_set_sensitive(selected_label, FALSE);
-  gtk_widget_set_sensitive(subfolder_label, FALSE);
+  gnac_prefs_set_event_box_above_child("selected_eventbox", TRUE);
+  gnac_prefs_set_event_box_above_child("subfolder_eventbox", TRUE);
+
+  gnac_prefs_set_widget_sensitive("filechooserbutton", FALSE);
+  gnac_prefs_set_widget_sensitive("subfolder_entry", FALSE);
+  gnac_prefs_set_widget_sensitive("subfolder_label", FALSE);
+  gnac_prefs_set_widget_sensitive("selected_label", FALSE);
 }
 
 
 static void
 gnac_prefs_set_subfolder_mode(void)
 {
-  GtkWidget *filechooserbutton;
-  GtkWidget *subfolder_entry;
-  GtkWidget *subfolder_label;
-  GtkWidget *selected_eventbox;
-  GtkWidget *selected_label;
-
-  filechooserbutton = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder, 
-                                                        "filechooserbutton"));
-  subfolder_entry = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder, 
-                                                      "subfolder_entry"));
-  subfolder_label = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder, 
-                                                  "subfolder_label"));
-  selected_eventbox = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder,
-                                                  "selected_eventbox"));
-  selected_label = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder, 
-                                                      "selected_label"));
-
-  gtk_event_box_set_above_child(GTK_EVENT_BOX(selected_eventbox), TRUE);
-  gtk_widget_set_sensitive(subfolder_entry, TRUE);
-  gtk_widget_set_sensitive(filechooserbutton, FALSE);
-  gtk_widget_set_sensitive(subfolder_label, TRUE);
-  gtk_widget_set_sensitive(selected_label, FALSE);
+  gnac_prefs_set_event_box_above_child("selected_eventbox", TRUE);
+
+  gnac_prefs_set_widget_sensitive("filechooserbutton", FALSE);
+  gnac_prefs_set_widget_sensitive("subfolder_entry", TRUE);
+  gnac_prefs_set_widget_sensitive("subfolder_label", TRUE);
+  gnac_prefs_set_widget_sensitive("selected_label", FALSE);
 }
 
 
 static void
 gnac_prefs_set_selected_mode(void)
 {
-  GtkWidget *filechooserbutton;
-  GtkWidget *subfolder_entry;
-  GtkWidget *subfolder_eventbox;
-  GtkWidget *subfolder_label;
-  GtkWidget *selected_label;
-
-  filechooserbutton = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder, 
-                                                        "filechooserbutton"));
-  subfolder_entry = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder, 
-                                                      "subfolder_entry"));
-  subfolder_eventbox = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder, 
-                                                       "subfolder_eventbox"));
-  subfolder_label = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder, 
-                                                  "subfolder_label"));
-  selected_label = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder, 
-                                                      "selected_label"));
-
-  gtk_event_box_set_above_child(GTK_EVENT_BOX(subfolder_eventbox), TRUE);
-  gtk_widget_set_sensitive(subfolder_entry, FALSE);
-  gtk_widget_set_sensitive(filechooserbutton, TRUE);
-  gtk_widget_set_sensitive(subfolder_label, FALSE);
-  gtk_widget_set_sensitive(selected_label, TRUE);
+  gnac_prefs_set_event_box_above_child("subfolder_eventbox", TRUE);
+
+  gnac_prefs_set_widget_sensitive("filechooserbutton", TRUE);
+  gnac_prefs_set_widget_sensitive("subfolder_entry", FALSE);
+  gnac_prefs_set_widget_sensitive("subfolder_label", FALSE);
+  gnac_prefs_set_widget_sensitive("selected_label", TRUE);
 }
 
 
 static void
 gnac_prefs_retrieve_settings(void)
 {
-  gchar           *str;
-  GtkComboBox     *combo;
-  GtkEntry        *entry;
-  GtkToggleButton *check_button;
-  GtkWidget       *temp;
-  gint folder_type;
+  gchar     *str;
+  gint       folder_type;
+  GtkWidget *temp;
 
   /* output folder */
   folder_type = g_settings_get_int(settings, GNAC_KEY_FOLDER_TYPE);
   /* output filename combo */
-  combo = GTK_COMBO_BOX(gtk_builder_get_object(gnac_prefs_builder,
-                                        "output_filename_combo"));
-  gtk_combo_box_set_active(combo, 
-                  g_settings_get_int(settings, GNAC_KEY_RENAME_PATTERN));
+  gnac_prefs_set_combo_box_active("output_filename_combo",
+      g_settings_get_int(settings, GNAC_KEY_RENAME_PATTERN));
   /* output filename entry */
   str = gnac_prefs_get_rename_pattern_as_str();
-  entry = GTK_ENTRY(gtk_builder_get_object(gnac_prefs_builder,
-                                        "output_filename_entry"));
-  gtk_entry_set_text(entry, str);
+  gnac_prefs_entry_set_text("output_filename_entry", str);
   g_free(str);
   /* folder hierarchy combo */
-  combo = GTK_COMBO_BOX(gtk_builder_get_object(gnac_prefs_builder,
-                                        "folder_hierarchy_combo"));
-  gtk_combo_box_set_active(combo, 
-                  g_settings_get_int(settings, GNAC_KEY_FOLDER_HIERARCHY));
+  gnac_prefs_set_combo_box_active("folder_hierarchy_combo",
+      g_settings_get_int(settings, GNAC_KEY_FOLDER_HIERARCHY));
   /* folder hierarchy entry */
   str = gnac_prefs_get_folder_hierarchy_as_str();
-  entry = GTK_ENTRY(gtk_builder_get_object(gnac_prefs_builder,
-                                        "folder_hierarchy_entry"));
-  gtk_entry_set_text(entry, str);
+  gnac_prefs_entry_set_text("folder_hierarchy_entry", str);
   g_free(str);
   switch (folder_type) 
   {
     case FOLDER_SUBDIRECTORY:
-      check_button = GTK_TOGGLE_BUTTON(gtk_builder_get_object(
-                            gnac_prefs_builder, "subfolder_radiobutton"));
-      temp = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder, 
-                            "subfolder_entry"));
       str = g_settings_get_string(settings, GNAC_KEY_DESTINATION_DIRECTORY);
-      gtk_entry_set_text(GTK_ENTRY(temp), str);
+      gnac_prefs_entry_set_text("subfolder_entry", str);
       g_free(str);
-      gtk_toggle_button_set_active(check_button, TRUE);
+      gnac_prefs_set_toggle_button_active("subfolder_radiobutton", TRUE);
       gnac_prefs_set_subfolder_mode();
     break;
 
     case FOLDER_SELECTED:
-      check_button = GTK_TOGGLE_BUTTON(gtk_builder_get_object(
-                            gnac_prefs_builder, "selected_radiobutton"));
-      temp = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder, 
-                                                "filechooserbutton"));
+      temp = gnac_prefs_get_widget("filechooserbutton");
       str = g_settings_get_string(settings, GNAC_KEY_DESTINATION_DIRECTORY);
       gtk_file_chooser_select_uri(GTK_FILE_CHOOSER(temp), str);
       g_free(str);
-      gtk_toggle_button_set_active(check_button, TRUE);
+      gnac_prefs_set_toggle_button_active("selected_radiobutton", TRUE);
       gnac_prefs_set_selected_mode();
     break;
 
     /* Same as source */
     case FOLDER_CURRENT:
     default:
-      check_button = GTK_TOGGLE_BUTTON(gtk_builder_get_object(
-                            gnac_prefs_builder, "same_radiobutton"));
-      gtk_toggle_button_set_active(check_button, TRUE);
+      gnac_prefs_set_toggle_button_active("same_radiobutton", TRUE);
       gnac_prefs_set_same_mode();
     break;
   }
@@ -273,39 +267,24 @@ gnac_prefs_retrieve_settings(void)
 GtkWidget *
 gnac_prefs_window_new(void)
 {
-  GError *err = NULL;
   GtkWidget *check_button;
   GtkWidget *prefs_window;
 
-  gnac_prefs_builder = gtk_builder_new();
+  gnac_prefs_builder = gnac_utils_create_gtk_builder(PKGDATADIR "/gnac-pref-window.xml");
 
-  gtk_builder_add_from_file(gnac_prefs_builder, 
-                            PKGDATADIR "/gnac-pref-window.xml", &err);
-  if (err != NULL) 
-  {
-    g_printerr("%s: %s\n", _("Unable to read file"), err->message);
-    g_error_free(err);
-  }
-  g_assert(err == NULL && gnac_prefs_builder != NULL);
-  gtk_builder_connect_signals(gnac_prefs_builder, NULL);
-
-  prefs_window = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder, 
-                                            "gnac_preference_window"));
+  prefs_window = gnac_prefs_get_widget("gnac_preference_window");
   /* Set the parent */
   gtk_window_set_transient_for(GTK_WINDOW(prefs_window), 
                                GTK_WINDOW(gnac_ui_get_widget("main_window")));
 
   /* GSettings binding */
-  check_button = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder,
-      "check_notification_icon"));
+  check_button = gnac_prefs_get_widget("check_notification_icon");
   g_settings_bind(settings_ui, GNAC_KEY_TRAY_ICON, check_button,
       "active", G_SETTINGS_BIND_DEFAULT);
-  check_button = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder,
-      "erase_originals_checkbutton"));
+  check_button = gnac_prefs_get_widget("erase_originals_checkbutton");
   g_settings_bind(settings, GNAC_KEY_CLEAR_SOURCE, check_button,
       "active", G_SETTINGS_BIND_DEFAULT);
-  check_button = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder,
-      "strip_special_checkbutton"));
+  check_button = gnac_prefs_get_widget("strip_special_checkbutton");
   g_settings_bind(settings, GNAC_KEY_STRIP_SPECIAL, check_button,
       "active", G_SETTINGS_BIND_DEFAULT);
 
@@ -317,14 +296,14 @@ void
 gnac_prefs_window_show(void)
 {
   GtkWidget *notebook;
-  if (!gnac_prefs_window) {
+  if (G_UNLIKELY(!gnac_prefs_window)) {
     gnac_prefs_window = gnac_prefs_window_new();
   }
 
   gnac_prefs_retrieve_settings();
 
   /* always start with the general tab selected */
-  notebook = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder, "notebook"));
+  notebook = gnac_prefs_get_widget("notebook");
   gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 0);
 
   gtk_widget_show_all(gnac_prefs_window);
@@ -335,17 +314,11 @@ gnac_prefs_window_show(void)
 static gchar *
 gnac_prefs_get_rename_pattern_as_str(void)
 {
-  gint index;
-  gint size;
-  GtkComboBox *combo;
-  combo = GTK_COMBO_BOX(gtk_builder_get_object(gnac_prefs_builder, 
-                                        "output_filename_combo"));
-  index = gtk_combo_box_get_active(combo);
-  size = G_N_ELEMENTS(rename_pattern_default);
-  if (index < 0 || index > size)
-  {
-    index = 0;
-  }
+  gint index = gnac_prefs_get_combo_box_active("output_filename_combo");
+  gint size = G_N_ELEMENTS(rename_pattern_default);
+
+  g_assert(index >= 0 && index <= size);
+
   if (index == size)
   {
     return g_settings_get_string(settings, GNAC_KEY_RENAME_PATTERN_PATTERN);
@@ -357,17 +330,11 @@ gnac_prefs_get_rename_pattern_as_str(void)
 static gchar *
 gnac_prefs_get_folder_hierarchy_as_str(void)
 {
-  gint index;
-  gint size;
-  GtkComboBox *combo;
-  combo = GTK_COMBO_BOX(gtk_builder_get_object(gnac_prefs_builder, 
-                                        "folder_hierarchy_combo"));
-  index = gtk_combo_box_get_active(combo);
-  size = G_N_ELEMENTS(folder_hierarchy_default);
-  if (index < 0 || index > size)
-  {
-    index = 0;
-  }
+  gint index = gnac_prefs_get_combo_box_active("folder_hierarchy_combo");
+  gint size = G_N_ELEMENTS(folder_hierarchy_default);
+
+  g_assert(index >= 0 && index <= size);
+
   if (index == size)
   {
     return g_settings_get_string(settings, GNAC_KEY_FOLDER_HIERARCHY_PATTERN);
@@ -422,8 +389,7 @@ gnac_prefs_selected_radio_toggled(GtkWidget *widget,
 {
   gchar *uri;
   GtkWidget *filechooserbutton;
-  filechooserbutton = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder, 
-                                                        "filechooserbutton"));
+  filechooserbutton = gnac_prefs_get_widget("filechooserbutton");
   gnac_prefs_set_selected_mode();
   gnac_settings_set_int(GNAC_KEY_FOLDER_TYPE, FOLDER_SELECTED);
   uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(filechooserbutton));
@@ -438,8 +404,7 @@ gnac_prefs_selected_uri_changed(GtkWidget *widget,
 {
   gchar *uri;
   GtkWidget *filechooserbutton;
-  filechooserbutton = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder, 
-                                                        "filechooserbutton"));
+  filechooserbutton = gnac_prefs_get_widget("filechooserbutton");
   uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(filechooserbutton));
   gnac_settings_set_string(GNAC_KEY_DESTINATION_DIRECTORY, uri);
   g_free(uri);
@@ -457,11 +422,8 @@ gnac_prefs_update_example_label(GtkWidget *widget,
   GtkWidget   *combo;
   GtkWidget   *label;
 
-  combo = GTK_WIDGET(gtk_builder_get_object(
-                      gnac_prefs_builder, "folder_hierarchy_combo"));
-
-  label = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder, 
-                                            "example_label"));
+  combo = gnac_prefs_get_widget("folder_hierarchy_combo");
+  label = gnac_prefs_get_widget("example_label");
 
   pattern_filename = gnac_prefs_entry_get_text("output_filename_entry");
   if (pattern_filename && !g_str_equal(pattern_filename, ""))
@@ -510,8 +472,7 @@ gnac_prefs_button_press_event_cb(GtkWidget      *widget,
   GtkWidget *child;
   GType      widget_type;
 
-  /* handle left clicks only */
-  if (event->button != 1) return FALSE;
+  if (!gnac_utils_event_is_left_click(event)) return FALSE;
 
   child = gtk_bin_get_child(GTK_BIN(user_data));
   widget_type = G_OBJECT_TYPE(widget);
@@ -535,34 +496,40 @@ gnac_prefs_button_press_event_cb(GtkWidget      *widget,
 }
 
 
+static gboolean
+gnac_prefs_custom_pattern_is_selected(GtkComboBox *combo_box,
+                                      gint         selected_index)
+{
+  gint size = gnac_utils_get_combo_size(combo_box);
+  return (selected_index == size-1);
+}
+
+
 void
 gnac_prefs_pattern_changed_cb(GtkWidget *widget,
                               gpointer   data)
 {
-  gint size;
-  gint active;
+  gint selected_index;
+  gboolean is_custom_pattern;
   gchar *pattern;
   GtkWidget *filename_entry;
-  GtkWidget *filename_eventbox;
 
-  active = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
+  selected_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
+
   gnac_prefs_update_example_label(widget, data);
 
-  filename_entry = GTK_WIDGET(gtk_builder_get_object(
-                      gnac_prefs_builder, "output_filename_entry"));
-  filename_eventbox = GTK_WIDGET(gtk_builder_get_object(
-                      gnac_prefs_builder, "output_filename_eventbox"));
+  filename_entry = gnac_prefs_get_widget("output_filename_entry");
 
-  size = gnac_utils_get_combo_size(GTK_COMBO_BOX(widget));
-  gtk_event_box_set_above_child(GTK_EVENT_BOX(filename_eventbox), 
-                  (active != size-1));
-  gtk_widget_set_sensitive(filename_entry, (active == size-1));
+  is_custom_pattern = gnac_prefs_custom_pattern_is_selected(
+      GTK_COMBO_BOX(widget), selected_index);
+  gnac_prefs_set_event_box_above_child("output_filename_eventbox", !is_custom_pattern);
+  gtk_widget_set_sensitive(filename_entry, is_custom_pattern);
 
   pattern = gnac_prefs_get_rename_pattern_as_str();
 
   gtk_entry_set_text(GTK_ENTRY(filename_entry), pattern);
 
-  gnac_settings_set_int(GNAC_KEY_RENAME_PATTERN, active);
+  gnac_settings_set_int(GNAC_KEY_RENAME_PATTERN, selected_index);
   gnac_settings_set_string(GNAC_KEY_RENAME_PATTERN_PATTERN, pattern);
 
   g_free(pattern);
@@ -573,30 +540,26 @@ void
 gnac_prefs_folder_hierarchy_changed_cb(GtkWidget *widget,
                                        gpointer   data)
 {
-  gint size;
-  gint active;
+  gint selected_index;
+  gboolean is_custom_pattern;
   gchar *pattern;
   GtkWidget *folder_entry;
-  GtkWidget *folder_eventbox;
 
-  active = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
+  selected_index = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
   gnac_prefs_update_example_label(widget, data);
 
-  folder_entry = GTK_WIDGET(gtk_builder_get_object(
-                    gnac_prefs_builder, "folder_hierarchy_entry"));
-  folder_eventbox = GTK_WIDGET(gtk_builder_get_object(
-                       gnac_prefs_builder, "folder_hierarchy_eventbox"));
+  folder_entry = gnac_prefs_get_widget("folder_hierarchy_entry");
 
-  size = gnac_utils_get_combo_size(GTK_COMBO_BOX(widget));
-  gtk_event_box_set_above_child(GTK_EVENT_BOX(folder_eventbox), 
-                  (active != size-1));
-  gtk_widget_set_sensitive(folder_entry, (active == size-1));
+  is_custom_pattern = gnac_prefs_custom_pattern_is_selected(
+      GTK_COMBO_BOX(widget), selected_index);
+  gnac_prefs_set_event_box_above_child("folder_hierarchy_eventbox", !is_custom_pattern);
+  gtk_widget_set_sensitive(folder_entry, is_custom_pattern);
 
   pattern = gnac_prefs_get_folder_hierarchy_as_str();
 
   gtk_entry_set_text(GTK_ENTRY(folder_entry), pattern);
 
-  gnac_settings_set_int(GNAC_KEY_FOLDER_HIERARCHY, active);
+  gnac_settings_set_int(GNAC_KEY_FOLDER_HIERARCHY, selected_index);
   gnac_settings_set_string(GNAC_KEY_FOLDER_HIERARCHY_PATTERN, pattern);
 
   g_free(pattern);
@@ -639,8 +602,7 @@ gnac_prefs_destroy(void)
   GtkWidget *window = NULL;
 
   if (gnac_prefs_builder) {
-    window = GTK_WIDGET(gtk_builder_get_object(gnac_prefs_builder, 
-                                       "gnac_preference_window"));
+    window = gnac_prefs_get_widget("gnac_preference_window");
     if (window) gtk_widget_destroy(window);
     g_object_unref(gnac_prefs_builder);
     gnac_prefs_builder = NULL;
diff --git a/src/gnac-properties.c b/src/gnac-properties.c
index 61bf661..46be600 100644
--- a/src/gnac-properties.c
+++ b/src/gnac-properties.c
@@ -113,6 +113,11 @@ static const gchar *displayed_properties[][2] = {
 
 static LibgnacTags *tags;
 
+static GtkWidget *
+gnac_properties_get_widget(const gchar *widget_name)
+{
+  return GTK_WIDGET(gtk_builder_get_object(gnac_properties_builder, widget_name));
+}
 
 static gboolean
 gnac_properties_visible_func(GtkTreeModel *model,
@@ -413,30 +418,15 @@ gnac_properties_get_property_from_value(const gchar  *name,
 GtkWidget *
 gnac_properties_window_new(void)
 {
-  GError *err = NULL;
   GtkWidget *properties_window;
 
-  gnac_properties_builder = gtk_builder_new();
-
-  gtk_builder_add_from_file(gnac_properties_builder, 
-                            PKGDATADIR "/gnac-properties-window.xml", &err);
-  if (err != NULL) 
-  {
-    g_printerr("%s: %s\n", _("Unable to read file"), err->message);
-    g_error_free (err);
-  } 
-  g_assert (err == NULL && gnac_properties_builder != NULL);
-
-  gtk_builder_connect_signals(gnac_properties_builder, NULL);
+  gnac_properties_builder = gnac_utils_create_gtk_builder(PKGDATADIR "/gnac-properties-window.xml");
 
   gnac_properties_build_table();
 
-  properties_window = GTK_WIDGET(gtk_builder_get_object(gnac_properties_builder, 
-                                            "properties_window"));
-  backward_arrow = GTK_WIDGET(gtk_builder_get_object(gnac_properties_builder, 
-                                                    "backward_btn"));
-  forward_arrow = GTK_WIDGET(gtk_builder_get_object(gnac_properties_builder, 
-                                                          "forward_btn"));
+  properties_window = gnac_properties_get_widget("properties_window");
+  backward_arrow = gnac_properties_get_widget("backward_btn");
+  forward_arrow = gnac_properties_get_widget("forward_btn");
   gtk_window_set_transient_for(GTK_WINDOW(properties_window), 
                                 GTK_WINDOW(gnac_ui_get_widget("main_window")));
   gtk_window_set_type_hint(GTK_WINDOW(properties_window), GDK_WINDOW_TYPE_HINT_DIALOG);
@@ -501,8 +491,7 @@ gnac_properties_reset_spin_if_empty(const gchar *name)
 {
   GtkWidget *spin = NULL;
 
-  spin = GTK_WIDGET(gtk_builder_get_object(gnac_properties_builder, 
-                                            name));
+  spin = gnac_properties_get_widget(name);
 
   if (gtk_spin_button_get_value(GTK_SPIN_BUTTON(spin)) == 0) {
     gtk_entry_set_text(GTK_ENTRY(spin), "");
@@ -520,8 +509,7 @@ gnac_properties_window_show(void)
     gnac_properties_window = gnac_properties_window_new();
   }
 
-  notebook = GTK_WIDGET(gtk_builder_get_object(gnac_properties_builder, 
-                                            "notebook1"));
+  notebook = gnac_properties_get_widget("notebook1");
 
   properties_displayed = TRUE;
 
@@ -686,8 +674,7 @@ gnac_properties_destroy(void)
 {
   GtkWidget *window = NULL;
   if (gnac_properties_builder) {
-    window = GTK_WIDGET(gtk_builder_get_object(gnac_properties_builder, 
-                                            "properties_window"));
+    window = gnac_properties_get_widget("properties_window");
     if (window) gtk_widget_destroy(window);
     g_object_unref(gnac_properties_builder);
     gnac_properties_builder = NULL;
diff --git a/src/gnac-ui.c b/src/gnac-ui.c
index 81ccec9..ab17b88 100644
--- a/src/gnac-ui.c
+++ b/src/gnac-ui.c
@@ -515,6 +515,15 @@ gnac_ui_on_filter_changed(GtkComboBox *combo,
 }
 
 
+static gboolean
+gnac_ui_file_chooser_close_on_add_button_is_active(void)
+{
+  GtkToggleButton *button;
+  button = GTK_TOGGLE_BUTTON(gnac_ui_get_widget("close_on_add_button"));
+  return gtk_toggle_button_get_active(button);
+}
+
+
 void
 gnac_ui_file_chooser_response_cb(GtkDialog *dialog,
                                  gint       response,
@@ -523,8 +532,6 @@ gnac_ui_file_chooser_response_cb(GtkDialog *dialog,
   GSList *list_path;
   GSList *list_files = NULL;
 
-  GtkWidget *close_on_add_button;
-
   switch (response) {
     /* Add button */
     case GTK_RESPONSE_NONE:
@@ -539,10 +546,7 @@ gnac_ui_file_chooser_response_cb(GtkDialog *dialog,
       gnac_add_files(list_files);
 
       /* Do we have to close de file chooser? */
-      close_on_add_button = gnac_ui_get_widget("close_on_add_button");
-
-      if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(close_on_add_button)))
-          return;
+      if (!gnac_ui_file_chooser_close_on_add_button_is_active()) return;
 
       break;
 
@@ -583,19 +587,10 @@ gnac_ui_new(void)
   gchar           *current_profile;
   GtkWidget       *audio_profile_hbox;
   GtkWidget       *file_list;
-  GError          *err = NULL;
 
   gnac_stock_items_init();
 
-  gnac_main_builder = gtk_builder_new();
-
-  gtk_builder_add_from_file(gnac_main_builder, PKGDATADIR "/gnac.xml", &err);
-  if (err != NULL) 
-  {
-    g_printerr("%s: %s\n", _("Unable to read file"), err->message);
-    g_error_free (err);
-  } 
-  g_assert (err == NULL && gnac_main_builder != NULL);
+  gnac_main_builder = gnac_utils_create_gtk_builder(PKGDATADIR "/gnac.xml");
 
   gtk_window_set_default_icon_name(PACKAGE);
 
@@ -639,8 +634,6 @@ gnac_ui_new(void)
       target_list,
       n_targets,
       GDK_ACTION_COPY);
-
-  gtk_builder_connect_signals(gnac_main_builder, NULL);
 }
 
 
diff --git a/src/gnac-utils.c b/src/gnac-utils.c
index 38269f5..a0a73c0 100644
--- a/src/gnac-utils.c
+++ b/src/gnac-utils.c
@@ -240,14 +240,14 @@ gnac_utils_event_is_single_click(GdkEventButton *event)
 }
 
 
-static gboolean
+gboolean
 gnac_utils_event_is_left_click(GdkEventButton *event)
 {
   return event->button == 1;
 }
 
 
-static gboolean
+gboolean
 gnac_utils_event_is_right_click(GdkEventButton *event)
 {
   return event->button == 3;
@@ -268,3 +268,23 @@ gnac_utils_event_is_single_right_click(GdkEventButton *event)
   return gnac_utils_event_is_single_click(event) &&
          gnac_utils_event_is_right_click(event);
 }
+
+
+GtkBuilder *
+gnac_utils_create_gtk_builder(const gchar *filename)
+{
+  GError *error = NULL;
+  GtkBuilder *builder;
+  builder = gtk_builder_new();
+  gtk_builder_add_from_file(builder, filename, &error);
+  if (error) {
+    g_printerr("%s: %s\n", _("Unable to read file"), error->message);
+    g_error_free(error);
+  }
+
+  g_assert(error == NULL && builder);
+
+  gtk_builder_connect_signals(builder, NULL);
+
+  return builder;
+}
diff --git a/src/gnac-utils.h b/src/gnac-utils.h
index 74fcffc..86455a6 100644
--- a/src/gnac-utils.h
+++ b/src/gnac-utils.h
@@ -64,11 +64,20 @@ gboolean
 gnac_utils_file_format_is_supported(const gchar *mime_type);
 
 gboolean
+gnac_utils_event_is_left_click(GdkEventButton *event);
+
+gboolean
+gnac_utils_event_is_right_click(GdkEventButton *event);
+
+gboolean
 gnac_utils_event_is_double_left_click(GdkEventButton *event);
 
 gboolean
 gnac_utils_event_is_single_right_click(GdkEventButton *event);
 
+GtkBuilder *
+gnac_utils_create_gtk_builder(const gchar *filename);
+
 G_END_DECLS
 
 #endif /* GNAC_UTILS_H */
diff --git a/src/profiles/gnac-profiles-manager.c b/src/profiles/gnac-profiles-manager.c
index abbc35f..0af953b 100644
--- a/src/profiles/gnac-profiles-manager.c
+++ b/src/profiles/gnac-profiles-manager.c
@@ -35,6 +35,7 @@
 #include "gnac-main.h"
 #include "gnac-profiles-default.h"
 #include "gnac-profiles-manager.h"
+#include "gnac-utils.h"
 #include "libgnac-debug.h"
 
 /* Translators: Suffix added to a copied profile: 'profile (copy).xml' */
@@ -147,6 +148,25 @@ static void
 gnac_profiles_mgr_on_treeselection_changed(void);
 
 
+static GtkWidget *
+gnac_profiles_mgr_get_widget(const gchar *widget_name)
+{
+  GtkWidget *widget;
+  widget = GTK_WIDGET(gtk_builder_get_object(profiles_mgr_builder, widget_name));
+  return widget;
+}
+
+
+static void
+gnac_profiles_mgr_set_widget_sensitive(const gchar *widget_name,
+                                       gboolean     sensitive)
+{
+  GtkWidget *widget;
+  widget = gnac_profiles_mgr_get_widget(widget_name);
+  gtk_widget_set_sensitive(widget, sensitive);
+}
+
+
 void
 gnac_profiles_mgr_init(StandardCallBack call_back)
 {
@@ -155,21 +175,13 @@ gnac_profiles_mgr_init(StandardCallBack call_back)
   GtkTreeView      *view;
   GtkTreeModel     *model;
   GtkWidget        *widget;
-  GError           *error = NULL;
 
   close_callback = call_back;
 
-  profiles_mgr_builder = gtk_builder_new();
-  gtk_builder_add_from_file(profiles_mgr_builder, 
-      PKGDATADIR "/profiles/gnac-profiles-manager.xml", &error);
-  if (error) {
-    libgnac_critical("%s", error->message);
-    g_error_free(error);
-    gnac_exit(EXIT_FAILURE);
-  }
+  profiles_mgr_builder = gnac_utils_create_gtk_builder(
+      PKGDATADIR "/profiles/gnac-profiles-manager.xml");
 
-  view = GTK_TREE_VIEW(gtk_builder_get_object(profiles_mgr_builder,
-      "profile_treeview"));
+  view = GTK_TREE_VIEW(gnac_profiles_mgr_get_widget("profile_treeview"));
   model = gtk_tree_view_get_model(view);
 
   selection = gtk_tree_view_get_selection(view);
@@ -197,8 +209,7 @@ gnac_profiles_mgr_init(StandardCallBack call_back)
   gtk_drag_source_set(GTK_WIDGET(view), GDK_BUTTON1_MASK, target_list,
       n_targets, GDK_ACTION_COPY);
 
-  widget = GTK_WIDGET(gtk_builder_get_object(profiles_mgr_builder,
-      "profile_manager_window"));
+  widget = gnac_profiles_mgr_get_widget("profile_manager_window");
   gtk_window_set_modal(GTK_WINDOW(widget), TRUE);
   gtk_window_set_type_hint(GTK_WINDOW(widget), GDK_WINDOW_TYPE_HINT_DIALOG);
   
@@ -208,8 +219,6 @@ gnac_profiles_mgr_init(StandardCallBack call_back)
   gnac_profiles_mgr_display_status_message(NULL, NULL);
 
   gnac_profiles_mgr_populate();
-
-  gtk_builder_connect_signals(profiles_mgr_builder, NULL);
 }
 
 
@@ -218,8 +227,7 @@ gnac_profiles_mgr_set_parent(GtkWidget *parent)
 {
   GtkWidget *widget;
 
-  widget = GTK_WIDGET(gtk_builder_get_object(profiles_mgr_builder,
-      "profile_manager_window"));
+  widget = gnac_profiles_mgr_get_widget("profile_manager_window");
   gtk_window_set_transient_for(GTK_WINDOW(widget), GTK_WINDOW(parent));
   gtk_window_set_position(GTK_WINDOW(widget), GTK_WIN_POS_CENTER_ON_PARENT);
 
@@ -506,8 +514,7 @@ gnac_profiles_mgr_get_profiles_list(void)
   GtkTreeIter   iter;
   AudioProfileGeneric *profile;
   
-  model = GTK_TREE_MODEL(gtk_builder_get_object(profiles_mgr_builder,
-      "liststore"));
+  model = GTK_TREE_MODEL(gnac_profiles_mgr_get_widget("liststore"));
   if (gtk_tree_model_get_iter_first(model, &iter)) {
     do {
       gtk_tree_model_get(model, &iter, COL_PROFILE, (gpointer*)&profile, -1);
@@ -526,8 +533,7 @@ gnac_profiles_mgr_destroy(void)
   gnac_profiles_mgr_clear();
 
   if (profiles_mgr_builder) {
-    widget = GTK_WIDGET(gtk_builder_get_object(profiles_mgr_builder,
-        "profile_manager_window"));
+    widget = gnac_profiles_mgr_get_widget("profile_manager_window");
     g_object_unref(profiles_mgr_builder);
     gtk_widget_destroy(widget);
   }
@@ -548,8 +554,7 @@ gnac_profiles_mgr_show(void)
     first_show = FALSE;
   }
 
-  window = GTK_WIDGET(gtk_builder_get_object(profiles_mgr_builder,
-      "profile_manager_window"));
+  window = gnac_profiles_mgr_get_widget("profile_manager_window");
   gtk_widget_show(window);
 
   selected = gnac_profiles_mgr_get_selected_rows();
@@ -570,8 +575,7 @@ gnac_profiles_mgr_clear(void)
   GtkTreeIter   iter;
   AudioProfileGeneric *profile;
   
-  model = GTK_TREE_MODEL(gtk_builder_get_object(profiles_mgr_builder,
-      "liststore"));
+  model = GTK_TREE_MODEL(gnac_profiles_mgr_get_widget("liststore"));
   if (gtk_tree_model_get_iter_first(model, &iter)) {
     do {
       gtk_tree_model_get(model, &iter, COL_PROFILE, (gpointer*)&profile, -1);
@@ -591,8 +595,7 @@ gnac_profiles_mgr_insert(gpointer profile)
   gchar *formatted_name;
 
   generic = ((AudioProfileGeneric*) profile)->generic;
-  model = GTK_LIST_STORE(gtk_builder_get_object(profiles_mgr_builder,
-      "liststore"));
+  model = GTK_LIST_STORE(gnac_profiles_mgr_get_widget("liststore"));
 
   formatted_name = gnac_profiles_properties_filter_text_for_displaying(
       generic->name, MAX_NAME_DISPLAY_SIZE);
@@ -616,8 +619,7 @@ gnac_profiles_mgr_remove(GtkTreeRowReference *ref)
 
   g_return_if_fail(ref);
 
-  model = GTK_TREE_MODEL(gtk_builder_get_object(profiles_mgr_builder,
-      "liststore"));
+  model = GTK_TREE_MODEL(gnac_profiles_mgr_get_widget("liststore"));
   path = gtk_tree_row_reference_get_path(ref);
 
   if (path) {
@@ -647,8 +649,7 @@ gnac_profiles_mgr_get(GtkTreeRowReference *ref,
 
   g_return_if_fail(ref);
 
-  model = GTK_TREE_MODEL(gtk_builder_get_object(profiles_mgr_builder,
-      "liststore"));
+  model = GTK_TREE_MODEL(gnac_profiles_mgr_get_widget("liststore"));
   path = gtk_tree_row_reference_get_path(ref);
 
   if (path) {
@@ -672,8 +673,7 @@ gnac_profiles_mgr_set(GtkTreeRowReference *ref, ...)
 
   g_return_if_fail(ref);
 
-  list_store = GTK_LIST_STORE(gtk_builder_get_object(profiles_mgr_builder,
-      "liststore"));
+  list_store = GTK_LIST_STORE(gnac_profiles_mgr_get_widget("liststore"));
   path = gtk_tree_row_reference_get_path(ref);
 
   if (path) {
@@ -700,10 +700,8 @@ gnac_profiles_mgr_get_selected_rows(void)
   GList *next;
   GList *next_temp;
   
-  model = GTK_TREE_MODEL(gtk_builder_get_object(profiles_mgr_builder,
-      "liststore"));
-  view = GTK_TREE_VIEW(gtk_builder_get_object(profiles_mgr_builder,
-      "profile_treeview"));
+  model = GTK_TREE_MODEL(gnac_profiles_mgr_get_widget("liststore"));
+  view = GTK_TREE_VIEW(gnac_profiles_mgr_get_widget("profile_treeview"));
   selection = gtk_tree_view_get_selection(view);
 
   /* Convert path to GtkTreeRowReference */
@@ -726,19 +724,9 @@ gnac_profiles_mgr_get_selected_rows(void)
 static void
 gnac_profiles_mgr_activate_buttons(gboolean activate)
 {
-  GtkWidget *widget;
-
-  widget = GTK_WIDGET(gtk_builder_get_object(profiles_mgr_builder,
-      "copy_button"));
-  gtk_widget_set_sensitive(widget, activate);
-
-  widget = GTK_WIDGET(gtk_builder_get_object(profiles_mgr_builder,
-      "edit_button"));
-  gtk_widget_set_sensitive(widget, activate);
-
-  widget = GTK_WIDGET(gtk_builder_get_object(profiles_mgr_builder,
-      "delete_button"));
-  gtk_widget_set_sensitive(widget, activate);
+  gnac_profiles_mgr_set_widget_sensitive("copy_button", activate);
+  gnac_profiles_mgr_set_widget_sensitive("edit_button", activate);
+  gnac_profiles_mgr_set_widget_sensitive("delete_button", activate);
 }
 
 
@@ -747,8 +735,7 @@ gnac_profiles_mgr_show_description_frame(gboolean show)
 {
   GtkWidget *widget;
   
-  widget = GTK_WIDGET(gtk_builder_get_object(profiles_mgr_builder,
-      "frame-description"));
+  widget = gnac_profiles_mgr_get_widget("frame-description");
 
   if (show) {
     gtk_widget_show_all(widget);
@@ -763,8 +750,7 @@ gnac_profiles_mgr_show_import_progressbar(gboolean show)
 {
   GtkWidget *widget;
 
-  widget = GTK_WIDGET(gtk_builder_get_object(profiles_mgr_builder,
-      "frame-import"));
+  widget = gnac_profiles_mgr_get_widget("frame-import");
 
   if (show) {
     gtk_widget_show_all(widget);
@@ -777,23 +763,10 @@ gnac_profiles_mgr_show_import_progressbar(gboolean show)
 static void
 gnac_profiles_mgr_set_window_sensitive(gboolean sensitive)
 {
-  GtkWidget *widget;
-
-  widget = GTK_WIDGET(gtk_builder_get_object(profiles_mgr_builder,
-      "frame-profiles-list"));
-  gtk_widget_set_sensitive(widget, sensitive);
-
-  widget = GTK_WIDGET(gtk_builder_get_object(profiles_mgr_builder,
-      "frame-description"));
-  gtk_widget_set_sensitive(widget, sensitive);
-
-  widget = GTK_WIDGET(gtk_builder_get_object(profiles_mgr_builder,
-      "frame-status"));
-  gtk_widget_set_sensitive(widget, sensitive);
-
-  widget = GTK_WIDGET(gtk_builder_get_object(profiles_mgr_builder,
-      "close_button"));
-  gtk_widget_set_sensitive(widget, sensitive);
+  gnac_profiles_mgr_set_widget_sensitive("frame-profiles-list", sensitive);
+  gnac_profiles_mgr_set_widget_sensitive("frame-description", sensitive);
+  gnac_profiles_mgr_set_widget_sensitive("frame-status", sensitive);
+  gnac_profiles_mgr_set_widget_sensitive("close_button", sensitive);
 }
 
 
@@ -802,8 +775,7 @@ gnac_profiles_mgr_set_progress_bar_fraction(gdouble fraction)
 {
   GtkWidget *widget;
     
-  widget = GTK_WIDGET(gtk_builder_get_object(profiles_mgr_builder,
-      "progressbar-import"));
+  widget = gnac_profiles_mgr_get_widget("progressbar-import");
   gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widget), fraction);
 }
 
@@ -818,21 +790,16 @@ gnac_profiles_mgr_display_status_message(const gchar *ok,
   GtkWidget *label_status_error;
   GtkWidget *image_status_error;
   
-  frame_status = GTK_WIDGET(gtk_builder_get_object(profiles_mgr_builder,
-      "frame-status"));
+  frame_status = gnac_profiles_mgr_get_widget("frame-status");
 
   if ((ok == NULL) && (error == NULL)) {
     gtk_widget_hide(frame_status);
   } else {
     gtk_widget_show_all(frame_status);
-    label_status_ok = GTK_WIDGET(gtk_builder_get_object(profiles_mgr_builder,
-        "label-status-ok"));
-    image_status_ok = GTK_WIDGET(gtk_builder_get_object(profiles_mgr_builder,
-        "image-status-ok"));
-    label_status_error = GTK_WIDGET(gtk_builder_get_object(profiles_mgr_builder,
-        "label-status-error"));
-    image_status_error = GTK_WIDGET(gtk_builder_get_object(profiles_mgr_builder,
-        "image-status-error"));
+    label_status_ok = gnac_profiles_mgr_get_widget("label-status-ok");
+    image_status_ok = gnac_profiles_mgr_get_widget("image-status-ok");
+    label_status_error = gnac_profiles_mgr_get_widget("label-status-error");
+    image_status_error = gnac_profiles_mgr_get_widget("image-status-error");
     if (ok != NULL) {
       gtk_label_set_markup(GTK_LABEL(label_status_ok), ok);
       gtk_widget_show(label_status_ok);
@@ -1319,8 +1286,7 @@ gnac_profiles_mgr_on_remove(GtkWidget *widget,
         GtkTreeView      *view;
         GtkTreeSelection *selection;
 
-        view = GTK_TREE_VIEW(gtk_builder_get_object(profiles_mgr_builder, 
-            "profile_treeview"));
+        view = GTK_TREE_VIEW(gnac_profiles_mgr_get_widget("profile_treeview"));
         selection = gtk_tree_view_get_selection(view);
         gtk_tree_selection_select_iter(selection, &iter);
         new_selected = TRUE;
@@ -1389,8 +1355,7 @@ gnac_profiles_mgr_on_treeselection_changed(void)
     
     gnac_profiles_mgr_get((GtkTreeRowReference*)selected->data,
         COL_PROFILE, (gpointer*) &profile);
-    widget = GTK_WIDGET(gtk_builder_get_object(profiles_mgr_builder, 
-        "label-description-content"));
+    widget = gnac_profiles_mgr_get_widget("label-description-content");
     descr = gnac_profiles_properties_filter_text_for_displaying(
         profile->generic->description, MAX_DESCR_DISPLAY_SIZE);
     gtk_label_set_text(GTK_LABEL(widget), descr);
@@ -1411,8 +1376,7 @@ gnac_profiles_mgr_on_close(GtkWidget *widget,
 {
   GtkWidget *window;
   
-  window = GTK_WIDGET(gtk_builder_get_object(profiles_mgr_builder,
-      "profile_manager_window"));
+  window = gnac_profiles_mgr_get_widget("profile_manager_window");
   gtk_widget_hide(window);
   close_callback(widget, data);
 }
@@ -1455,8 +1419,7 @@ gnac_profiles_mgr_on_key_pressed(GtkWidget   *widget,
   switch (event->keyval)
   {
     case GDK_Escape:
-      widget = GTK_WIDGET(gtk_builder_get_object(profiles_mgr_builder,
-          "close_button"));
+      widget = gnac_profiles_mgr_get_widget("close_button");
       gtk_button_clicked(GTK_BUTTON(widget));
       return TRUE;
 
diff --git a/src/profiles/gnac-profiles-properties.c b/src/profiles/gnac-profiles-properties.c
index b6e4653..6053215 100644
--- a/src/profiles/gnac-profiles-properties.c
+++ b/src/profiles/gnac-profiles-properties.c
@@ -44,6 +44,7 @@
 #include "gnac-main.h"
 #include "gnac-profiles-default.h"
 #include "gnac-profiles-properties.h"
+#include "gnac-utils.h"
 
 #include "libgnac-debug.h"
 
@@ -115,36 +116,31 @@ gnac_profiles_properties_name_description_set_text(const gchar *name,
 static void
 gnac_profiles_properties_reinit(void);
 
+static GtkWidget *
+gnac_profiles_properties_get_widget(const gchar *widget_name)
+{
+  return GTK_WIDGET(gtk_builder_get_object(profiles_properties_builder,
+      widget_name));
+}
+
 
 void
 gnac_profiles_properties_init(void)
 {
-  GError    *error = NULL;
   GtkWidget *widget;
   GtkWidget *combo_format;
   GtkWidget *hbox_properties;
   GtkCellRenderer *renderer_format;
   
-  profiles_properties_builder = gtk_builder_new(); 
+  profiles_properties_builder = gnac_utils_create_gtk_builder(
+      PKGDATADIR "/profiles/gnac-profiles-properties.xml");
   formats = g_hash_table_new(g_str_hash,g_str_equal);
   
   saved_profiles_dir = g_build_filename(g_get_user_data_dir(),
       "gnac", "profiles", NULL);
 
-  if (!gtk_builder_add_from_file(profiles_properties_builder, 
-          PKGDATADIR "/profiles/gnac-profiles-properties.xml", &error))
-  {
-    libgnac_critical("%s", error->message);
-    g_error_free(error);
-    gnac_exit(EXIT_FAILURE);
-  }
-  
-  hbox_properties = GTK_WIDGET(gtk_builder_get_object(
-      profiles_properties_builder, "hbox_properties"));
-
-  combo_format = GTK_WIDGET(gtk_builder_get_object(profiles_properties_builder,
-      "format_combo_box"));
-  gtk_builder_connect_signals(profiles_properties_builder, NULL);
+  hbox_properties = gnac_profiles_properties_get_widget("hbox_properties");
+  combo_format = gnac_profiles_properties_get_widget("format_combo_box");
 
   renderer_format = gtk_cell_renderer_text_new();
   gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo_format),
@@ -156,15 +152,12 @@ gnac_profiles_properties_init(void)
       G_CALLBACK(gnac_profiles_properties_combo_format_on_changed),
       hbox_properties);
  
-  widget = GTK_WIDGET(gtk_builder_get_object(profiles_properties_builder,
-      "window1"));
+  widget = gnac_profiles_properties_get_widget("window1");
   gtk_window_set_type_hint(GTK_WINDOW(widget), GDK_WINDOW_TYPE_HINT_DIALOG);
   
   g_signal_connect(G_OBJECT (widget), "delete_event",
       G_CALLBACK(gtk_widget_hide), NULL);
 
-  gtk_builder_connect_signals(profiles_properties_builder, NULL);
-
   gnac_profiles_properties_init_format();
 
   gnac_profiles_properties_display_status_message(NULL);
@@ -178,8 +171,7 @@ gnac_profiles_properties_set_parent(GtkWidget *parent)
 {
   GtkWidget *widget;
 
-  widget = GTK_WIDGET(gtk_builder_get_object(profiles_properties_builder,
-      "window1"));
+  widget = gnac_profiles_properties_get_widget("window1");
   
   gtk_window_set_transient_for(GTK_WINDOW(widget), GTK_WINDOW(parent));
   gtk_window_set_position(GTK_WINDOW(widget), GTK_WIN_POS_CENTER_ON_PARENT);
@@ -199,10 +191,8 @@ gnac_profiles_properties_init_format(void) {
   gchar        *format_name;
   gint          i;
   
-  hbox_properties = GTK_WIDGET(gtk_builder_get_object(
-      profiles_properties_builder, "hbox_properties"));
-  format_combo_box = GTK_WIDGET(gtk_builder_get_object(
-      profiles_properties_builder, "format_combo_box"));
+  hbox_properties = gnac_profiles_properties_get_widget("hbox_properties");
+  format_combo_box = gnac_profiles_properties_get_widget("format_combo_box");
 
   model = GTK_LIST_STORE(gtk_combo_box_get_model(
       GTK_COMBO_BOX(format_combo_box)));
@@ -244,10 +234,8 @@ gnac_profiles_properties_init_format(void) {
     gtk_tree_path_free(tree_path);
     
     if (format_module->funcs.set_pipeline_func != NULL) {
-      widget = GTK_WIDGET(gtk_builder_get_object(profiles_properties_builder,
-          "gstreamer_pipeline_text_view"));
-      pipeline_box = GTK_WIDGET(gtk_builder_get_object(
-          profiles_properties_builder, "gstreamer_pipeline_box"));
+      widget = gnac_profiles_properties_get_widget("gstreamer_pipeline_text_view");
+      pipeline_box = gnac_profiles_properties_get_widget("gstreamer_pipeline_box");
       format_module->funcs.set_pipeline_func(GTK_TEXT_VIEW(widget),
           pipeline_box);
     }
@@ -276,8 +264,7 @@ gnac_profiles_properties_show(gpointer     profile,
   
   gnac_profiles_properties_reinit();
 
-  widget = GTK_WIDGET(gtk_builder_get_object(profiles_properties_builder,
-      "save-button"));
+  widget = gnac_profiles_properties_get_widget("save-button");
 
   if (g_signal_handler_is_connected(G_OBJECT(widget), save_button_handler_id))
   {
@@ -287,12 +274,10 @@ gnac_profiles_properties_show(gpointer     profile,
   save_button_handler_id = g_signal_connect(G_OBJECT(widget), "clicked",
       G_CALLBACK(gnac_profiles_properties_on_save), call_back);
   
-  widget = GTK_WIDGET(gtk_builder_get_object(profiles_properties_builder,
-      "window1"));
+  widget = gnac_profiles_properties_get_widget("window1");
   gtk_window_set_title(GTK_WINDOW(widget), title);
 
-  format_combo_box = GTK_WIDGET(gtk_builder_get_object(
-      profiles_properties_builder, "format_combo_box"));
+  format_combo_box = gnac_profiles_properties_get_widget("format_combo_box");
   if (profile == NULL) {
     gtk_widget_show(widget);
     gtk_combo_box_set_active(GTK_COMBO_BOX(format_combo_box), 0);
@@ -363,8 +348,7 @@ gnac_profiles_properties_destroy(void)
     formats = NULL;
     g_free(saved_profiles_dir);
 
-    window = GTK_WIDGET(gtk_builder_get_object(profiles_properties_builder,
-        "window1"));
+    window = gnac_profiles_properties_get_widget("window1");
     g_object_unref(G_OBJECT(profiles_properties_builder));
     gtk_widget_destroy(window);
   }
@@ -395,17 +379,14 @@ gnac_profiles_properties_combo_format_on_changed(GtkComboBox *widget,
       gtk_widget_hide(properties);
     }
 
-    text_view = GTK_WIDGET(gtk_builder_get_object(profiles_properties_builder,
-        "gstreamer_pipeline_text_view"));
+    text_view = gnac_profiles_properties_get_widget("gstreamer_pipeline_text_view");
     gtk_text_view_set_editable(GTK_TEXT_VIEW(text_view), FALSE);
     #ifndef GNOME_ENABLE_DEBUG 
-      text_view = GTK_WIDGET(gtk_builder_get_object(profiles_properties_builder,
-          "gstreamer_pipeline_box"));
+      text_view = gnac_profiles_properties_get_widget("gstreamer_pipeline_box");
       gtk_widget_hide(text_view);
     #endif /* GNOME_ENABLE_DEBUG */
 
-    label = GTK_WIDGET(gtk_builder_get_object(profiles_properties_builder,
-        "format_decription_label"));
+    label = gnac_profiles_properties_get_widget("format_decription_label");
     gtk_label_set_markup(GTK_LABEL(label),
         format_module->funcs.get_description());
     properties = format_module->funcs.get_widget(NULL);
@@ -422,8 +403,7 @@ gnac_profiles_properties_update_textbuffer(const gchar *pipeline)
   GtkWidget     *text_view;
   GtkTextBuffer *pipeline_text_buffer;
 
-  text_view = GTK_WIDGET(gtk_builder_get_object(profiles_properties_builder,
-      "gstreamer_pipeline_text_view"));
+  text_view = gnac_profiles_properties_get_widget("gstreamer_pipeline_text_view");
   pipeline_text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view));
   gtk_text_buffer_set_text(pipeline_text_buffer, pipeline,
       g_utf8_strlen(pipeline, -1));
@@ -435,13 +415,11 @@ gnac_profiles_properties_display_status_message(const gchar *error)
 {
   GtkWidget *widget;
   
-  widget = GTK_WIDGET(gtk_builder_get_object(profiles_properties_builder,
-      "hbox-properties-status"));
+  widget = gnac_profiles_properties_get_widget("hbox-properties-status");
   if (error != NULL) {
     gtk_widget_show_all(widget);
 
-    widget = GTK_WIDGET(gtk_builder_get_object(profiles_properties_builder,
-        "label-properties-status-error"));
+    widget = gnac_profiles_properties_get_widget("label-properties-status-error");
     gtk_label_set_text(GTK_LABEL(widget), error);
  
   } else {
@@ -473,15 +451,13 @@ gnac_profiles_properties_name_description_set_text(const gchar *name,
   GtkTextBuffer *text_buffer;
   
   if (name != NULL) {
-    widget = GTK_WIDGET(gtk_builder_get_object(profiles_properties_builder,
-        "name_entry"));
+    widget = gnac_profiles_properties_get_widget("name_entry");
     gtk_entry_set_text(GTK_ENTRY(widget), name);
     current_profile_name = name;
   }
   
   if (description != NULL) {
-    widget = GTK_WIDGET(gtk_builder_get_object(profiles_properties_builder,
-        "profile_description_text_view"));
+    widget = gnac_profiles_properties_get_widget("profile_description_text_view");
     text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget));
     gtk_text_buffer_set_text(GTK_TEXT_BUFFER(text_buffer), description,
         g_utf8_strlen(description, -1));
@@ -503,8 +479,7 @@ gnac_profiles_properties_on_save(GtkWidget *widget,
   AudioProfileGeneric *generic;
   GError              *error = NULL;
 
-  window = GTK_WIDGET(gtk_builder_get_object(profiles_properties_builder,
-      "window1"));
+  window = gnac_profiles_properties_get_widget("window1");
   
   profile = current_format_module->funcs.generate_audio_profile(&error);
   if (profile == NULL) {
@@ -516,8 +491,7 @@ gnac_profiles_properties_on_save(GtkWidget *widget,
     GtkWidget *text_view;
     GtkTextBuffer *pipeline_text_buffer;
 
-    text_view = GTK_WIDGET(gtk_builder_get_object(profiles_properties_builder,
-        "gstreamer_pipeline_text_view"));
+    text_view = gnac_profiles_properties_get_widget("gstreamer_pipeline_text_view");
     pipeline_text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view));
 
     generic = ((AudioProfileGeneric*) profile)->generic;
@@ -529,8 +503,7 @@ gnac_profiles_properties_on_save(GtkWidget *widget,
           &start, &end, FALSE);
     }
     
-    widget = GTK_WIDGET(gtk_builder_get_object(profiles_properties_builder,
-        "name_entry"));
+    widget = gnac_profiles_properties_get_widget("name_entry");
     name = gtk_entry_get_text(GTK_ENTRY(widget));
 
     if (!g_strcmp0(name, "")) {
@@ -553,8 +526,7 @@ gnac_profiles_properties_on_save(GtkWidget *widget,
       gnac_profiles_properties_display_status_message(NULL);
       
       generic->name = g_strdup(name);
-      widget = GTK_WIDGET(gtk_builder_get_object(profiles_properties_builder,
-          "profile_description_text_view"));
+      widget = gnac_profiles_properties_get_widget("profile_description_text_view");
       text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget));
       gtk_text_buffer_get_start_iter(text_buffer, &start);
       gtk_text_buffer_get_end_iter(text_buffer, &end);
@@ -579,8 +551,7 @@ gnac_profiles_properties_on_name_entry_key_pressed(GtkWidget   *widget,
   if (event->keyval == GDK_Return) {
     GtkWidget *widget;
 
-    widget = GTK_WIDGET(gtk_builder_get_object(profiles_properties_builder,
-        "save-button"));
+    widget = gnac_profiles_properties_get_widget("save-button");
     gtk_button_clicked(GTK_BUTTON(widget));
     return TRUE;
   } else if (gnac_profiles_properties_is_valid_filename_char(event->keyval)) {
@@ -607,8 +578,7 @@ gnac_profiles_properties_on_window_key_pressed(GtkWidget   *widget,
   if (event->keyval == GDK_Escape) {
     GtkWidget *widget;
 
-    widget = GTK_WIDGET(gtk_builder_get_object(profiles_properties_builder,
-        "cancel-button"));
+    widget = gnac_profiles_properties_get_widget("cancel-button");
     gtk_button_clicked(GTK_BUTTON(widget));
     return TRUE;
   } else {
@@ -657,8 +627,7 @@ gnac_profiles_properties_on_cancel(GtkWidget *widget,
 {
   GtkWidget *window;
 
-  window = GTK_WIDGET(gtk_builder_get_object(profiles_properties_builder,
-      "window1"));
+  window = gnac_profiles_properties_get_widget("window1");
   gtk_widget_hide(window);
 }
 



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