soylent r76 - trunk/src



Author: treitter
Date: Mon Feb 11 07:01:01 2008
New Revision: 76
URL: http://svn.gnome.org/viewvc/soylent?rev=76&view=rev

Log:
Simplify the signal setup function for adding new details

Modified:
   trunk/src/soylent-browser.c

Modified: trunk/src/soylent-browser.c
==============================================================================
--- trunk/src/soylent-browser.c	(original)
+++ trunk/src/soylent-browser.c	Mon Feb 11 07:01:01 2008
@@ -90,7 +90,7 @@
                                                       (SoylentBrowser *browser);
 static void soylent_browser_person_info_signals_setup
                                                       (SoylentBrowser *browser);
-static void soylent_browser_person_detail_add_signals_setup
+static gboolean soylent_browser_person_detail_add_signals_setup
                                                       (SoylentBrowser *browser);
 static gboolean soylent_browser_signals_setup (SoylentBrowser *browser);
 
@@ -1654,6 +1654,11 @@
       {"btntb_chat", "clicked",
        soylent_browser_person_action_chat_menu_tool_button_cb, browser},
 
+      /* Adding new details to a person */
+      {"cbox_detail_domain", "changed", cbox_detail_type_update, browser},
+      {"entry_detail_add", "changed", btn_detail_add_update, browser},
+      {"btn_detail_add", "clicked", commit_detail_add, browser},
+
       /* "Save Changes?" dialog */
       {"btn_delete_person_cancel", "clicked", 
        soylent_browser_person_action_delete_selected_hide_dialog_cb, browser,},
@@ -2102,51 +2107,55 @@
   return retval;
 }
 
-/* Hook up handlers for actions on widgets in the Detail Add UI section */
-static void
+/* Hook up handlers for actions on widgets in the Detail Add UI section
+ *
+ * Return TRUE for success, FALSE for any failure. */
+static gboolean
 soylent_browser_person_detail_add_signals_setup (SoylentBrowser *browser)
 {
+  gboolean retval = FALSE;
   GladeXML *wtree = NULL;
-  GtkComboBox *cbox_detail_domain = NULL;
-  GtkEntry *entry_detail_add = NULL;
-  GtkButton *btn_detail_add = NULL;
-  gint i = 0;
+  guint i = 0;
+
+  g_return_val_if_fail (browser != NULL, retval);
+  /* FIXME: uncomment once SoylentBrowser is a GObject:
+  g_return_val_if_fail (SOYLENT_IS_BROWSER (browser), retval);
+   */
 
   wtree = browser->main_window;
-  cbox_detail_domain = GTK_COMBO_BOX (glade_xml_get_widget (wtree,
-                                                        "cbox_detail_domain"));
-  entry_detail_add = GTK_ENTRY (glade_xml_get_widget (wtree,
-                                                      "entry_detail_add"));
-  btn_detail_add = GTK_BUTTON (glade_xml_get_widget (wtree, "btn_detail_add"));
-
-  g_signal_connect (G_OBJECT (cbox_detail_domain), "changed",
-                    G_CALLBACK (cbox_detail_type_update), browser);
-  g_signal_connect (G_OBJECT (entry_detail_add), "changed",
-                    G_CALLBACK (btn_detail_add_update), browser);
-  g_signal_connect (G_OBJECT (btn_detail_add), "clicked",
-                    G_CALLBACK (commit_detail_add), browser);
 
-  /* Set up 'changed' signals for the mail "Detail Add" fields */
+  /* invert usual logic to simplify the loop below */
+  retval = TRUE;
+
   for (i = 0; i < MAIL_FIELDS_NUM; i++)
     {
-      GObject *widget_cur = NULL;
+      const gchar *signal_name = "changed";
+      const GCallback callback = G_CALLBACK (btn_detail_add_update);
+      gboolean connect_retval = FALSE;
       gchar *widget_name = NULL;
 
       widget_name = g_strdup_printf ("%s_person_mail_add_%s",
                                      MAIL_WIDGET_TYPE_STRS[i],
                                      MAIL_FIELD_STRS[i]);
-      widget_cur = G_OBJECT (glade_xml_get_widget (wtree, widget_name));
-      if (GTK_IS_TEXT_VIEW (widget_cur))
-      {
-        widget_cur = G_OBJECT (gtk_text_view_get_buffer (GTK_TEXT_VIEW
-                                                                (widget_cur)));
-      }
 
-      g_signal_connect (widget_cur, "changed",
-                        G_CALLBACK (btn_detail_add_update), browser);
+      connect_retval = widget_signal_connect (wtree, widget_name, signal_name,
+                                              callback, browser);
+      if (connect_retval)
+        {
+          /* success */
+        }
+      else
+        {
+          g_critical ("failed to set up signal handler for widget "
+                      "%s::%s\n", widget_name, signal_name);
+
+          retval = FALSE;
+        }
 
       g_free (widget_name);
     }
+
+  return retval;
 }
 
 /* Hook up handlers for all the people-detail-editing-related widgets */



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