soylent r65 - trunk/src



Author: treitter
Date: Sun Feb 10 23:57:43 2008
New Revision: 65
URL: http://svn.gnome.org/viewvc/soylent?rev=65&view=rev

Log:
begin factoring the signal setup functions in soylent-browser.c; make most of the arguments to widget_signal_connect const

Modified:
   trunk/src/soylent-browser.c
   trunk/src/soylent-utils.c
   trunk/src/soylent-utils.h

Modified: trunk/src/soylent-browser.c
==============================================================================
--- trunk/src/soylent-browser.c	(original)
+++ trunk/src/soylent-browser.c	Sun Feb 10 23:57:43 2008
@@ -78,7 +78,7 @@
 static gboolean soylent_browser_simple_signals_setup (SoylentBrowser *browser);
 static void soylent_browser_person_info_avatar_signals_setup
                                                       (SoylentBrowser *browser);
-static void soylent_browser_person_info_email_signals_setup
+static gboolean soylent_browser_person_info_email_signals_setup
                                                       (SoylentBrowser *browser);
 static void soylent_browser_person_info_phone_signals_setup
                                                       (SoylentBrowser *browser);
@@ -1699,83 +1699,6 @@
   return retval;
 }
 
-/* Hook up handlers for actions related to setting our own presence */
-/*
-static void
-soylent_browser_presence_signals_setup (SoylentBrowser *browser)
-{
-  GladeXML *wtree = NULL;
-  GtkComboBox *cbox_presence = NULL;
-
-  wtree = browser->main_window;
-  cbox_presence = GTK_COMBO_BOX (glade_xml_get_widget (wtree, "cbox_presence"));
-
-  g_signal_connect (G_OBJECT (cbox_presence), "changed",
-                    G_CALLBACK (soylent_browser_presence_set_cb), browser);
-}
-*/
-
-/* Hook up the action button/menu handlers */
-/*
-static void
-soylent_browser_person_actions_signals_setup (SoylentBrowser *browser)
-{
-  GladeXML *wtree = NULL;
-  GtkButton *btn_new_person = NULL;
-  GtkButton *btn_delete_people = NULL;
-  GtkButton *btn_edit_people = NULL;
-  GtkMenuToolButton *btntb_email = NULL;
-  GtkMenuToolButton *btntb_chat = NULL;
-
-  wtree = browser->main_window;
-  btn_new_person = GTK_BUTTON (glade_xml_get_widget (wtree, "btn_new_person"));
-  btn_delete_people = GTK_BUTTON (glade_xml_get_widget (wtree,
-                                                        "btn_delete_people"));
-  btn_edit_people = GTK_BUTTON (glade_xml_get_widget (wtree,
-                                                      "btn_edit_person"));
-  btntb_email = GTK_MENU_TOOL_BUTTON (glade_xml_get_widget (wtree,
-                                                            "btntb_email"));
-  btntb_chat = GTK_MENU_TOOL_BUTTON (glade_xml_get_widget (wtree,
-                                                           "btntb_chat"));
-
-  g_signal_connect (G_OBJECT (btn_new_person), "clicked",
-                    G_CALLBACK (soylent_browser_person_action_new_person_cb),
-                    browser);
-  g_signal_connect
-                (G_OBJECT (btn_delete_people), "clicked",
-                 G_CALLBACK (soylent_browser_person_action_delete_selected_cb),
-                 browser);
-  g_signal_connect (G_OBJECT (btn_edit_people), "clicked",
-                    G_CALLBACK (soylent_browser_person_action_edit_selected_cb),
-                    browser);
-  g_signal_connect
-        (G_OBJECT (btntb_email), "clicked",
-         G_CALLBACK (soylent_browser_person_action_email_menu_tool_button_cb),
-         browser);
-  g_signal_connect
-          (G_OBJECT (btntb_chat), "clicked",
-           G_CALLBACK (soylent_browser_person_action_chat_menu_tool_button_cb),
-           browser);
-}
-*/
-
-/* Hook up signals dealing with actions on people representations (icons) */
-/*
-static void
-soylent_browser_person_icons_signals_setup (SoylentBrowser *browser)
-{
-  GladeXML *wtree = NULL;
-  GtkIconView *iv_people = NULL;
-
-  wtree = browser->main_window;
-  iv_people = GTK_ICON_VIEW (glade_xml_get_widget (wtree, "iv_people"));
-
-  g_signal_connect (G_OBJECT (iv_people), "selection-changed",
-                    G_CALLBACK (soylent_browser_person_selection_changed_cb),
-                    browser);
-}
-*/
-
 /* Hook up handlers for peoples' existing image edits */
 static void
 soylent_browser_person_info_avatar_signals_setup (SoylentBrowser *browser)
@@ -1784,36 +1707,84 @@
 }
 
 /* Hook up handlers for edits to peoples' existing email addresses */
-static void
+static gboolean
 soylent_browser_person_info_email_signals_setup (SoylentBrowser *browser)
 {
+#if 0
+  widget_signal_args_t signal_handlers_template[] =
+    {
+      /* Person Details email edit box */
+      {NULL, "changed", entry_changed_e_contact, NULL},
+    };
+#endif
+  gboolean retval = FALSE;
   GladeXML *wtree = NULL;
+  /*
   GtkEntry *entry_email = NULL;
-  guint email_pos = 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;
 
-  for (email_pos = 0; email_pos < MAX_GUI_EMAIL; email_pos++)
+  /* invert usual logic to simplify the loop below */
+  retval = TRUE;
+
+  for (i = 0; i < MAX_GUI_EMAIL; i++)
     {
-      gchar *widget_str = NULL;
+      gboolean connect_retval = FALSE;
+      const gchar *signal_name = "changed";
+      gchar *widget_name = NULL;
       cb_entry_changed_e_contact *cb_data = NULL;
 
-      widget_str = g_strdup_printf ("entry_person_email_%c", '1' + email_pos);
+      widget_name = g_strdup_printf ("entry_person_email_%c", '1' + i);
+      /*
       entry_email = GTK_ENTRY (glade_xml_get_widget (wtree, widget_str));
+      */
 
       cb_data = g_new0 (cb_entry_changed_e_contact, 1);
-
       cb_data->browser = browser;
-      cb_data->widget_name = g_strdup (widget_str);
-      g_free (widget_str);
+      cb_data->widget_name = g_strdup (widget_name);
       cb_data->field = g_new0 (EContactField, 1);
-      *(cb_data->field) = E_CONTACT_EMAIL_1 + email_pos;
+      *(cb_data->field) = E_CONTACT_EMAIL_1 + i;
 
       /* FIXME - use g_signal_connect_data so we can eventually free
        * each instance of cb_data */
+      /*
       g_signal_connect (G_OBJECT (entry_email), "changed",
                         G_CALLBACK (entry_changed_e_contact), cb_data);
+                        */
+
+      if (cb_data)
+        {
+          /* FIXME - use a version which uses g_signal_connect_data so we can
+           * eventually free each instance of cb_data */
+          connect_retval = widget_signal_connect (wtree, widget_name,
+                                                  signal_name,
+                                                  entry_changed_e_contact,
+                                                  cb_data);
+
+          if (!connect_retval)
+            {
+              g_critical ("failed to set up signal handler for widget %s::%s\n",
+                          widget_name, signal_name);
+              retval = FALSE;
+            }
+        }
+      else
+        {
+          g_critical ("failed to set up callback data for widget %s::%s\n",
+                      widget_name, signal_name);
+        }
+
+      g_free (widget_name);
     }
+
+  return retval;
 }
 
 /* Hook up handlers for edits to peoples' existing phone numbers */
@@ -2061,7 +2032,7 @@
                     browser);
 
   /* FIXME: factor these a little more, and push their contents into this
-   * function; use an array like in *_dialog_signals_setup() */
+   * function; use an array like in *_simple_signals_setup() */
   soylent_browser_person_info_avatar_signals_setup (browser);
   soylent_browser_person_info_email_signals_setup  (browser);
   soylent_browser_person_info_phone_signals_setup  (browser);

Modified: trunk/src/soylent-utils.c
==============================================================================
--- trunk/src/soylent-utils.c	(original)
+++ trunk/src/soylent-utils.c	Sun Feb 10 23:57:43 2008
@@ -32,8 +32,9 @@
  *
  * Return TRUE for success, FALSE for any failure */
 gboolean
-widget_signal_connect (GladeXML *wtree, gchar *widget_name, gchar *signal,
-                       gpointer callback, gpointer user_data)
+widget_signal_connect (GladeXML *wtree, const gchar *widget_name,
+                       const gchar *signal, gconstpointer callback,
+                       gpointer user_data)
 {
   gboolean retval = FALSE;
   GtkWidget *widget = NULL;

Modified: trunk/src/soylent-utils.h
==============================================================================
--- trunk/src/soylent-utils.h	(original)
+++ trunk/src/soylent-utils.h	Sun Feb 10 23:57:43 2008
@@ -45,7 +45,8 @@
 };
 
 gboolean
-widget_signal_connect (GladeXML *wtree, gchar *widget_name, gchar *signal,
-                       gpointer callback, gpointer user_data);
+widget_signal_connect (GladeXML *wtree, const gchar *widget_name,
+                       const gchar *signal, gconstpointer callback,
+                       gpointer user_data);
 
 #endif /* _SOYLENT_UTILS_H_ */



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