soylent r128 - trunk/src



Author: treitter
Date: Mon Apr  7 04:12:40 2008
New Revision: 128
URL: http://svn.gnome.org/viewvc/soylent?rev=128&view=rev

Log:
factor out the mass-widget-signal-connection code into a generic function

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

Modified: trunk/src/soylent-browser-menu-bar.c
==============================================================================
--- trunk/src/soylent-browser-menu-bar.c	(original)
+++ trunk/src/soylent-browser-menu-bar.c	Mon Apr  7 04:12:40 2008
@@ -34,7 +34,7 @@
 gboolean
 soylent_browser_menu_bar_setup (SoylentBrowser *browser)
 {
-  widget_signal_args_t signal_handlers[] =
+  const widget_signal_args_t const signal_handlers[] =
     {
       /* File menu */
       {"imagemenuitem_new_person", "activate",
@@ -57,92 +57,18 @@
       /* nothing to do here */
     };
   gboolean retval = FALSE;
-  GladeXML *wtree = NULL;
-  GtkWidget *menu_edit_edit = NULL;
-  GtkWidget *menu_edit_delete = NULL;
   gint signals_num = -1;
-  gint i = -1;
 
   g_return_val_if_fail (browser, retval);
   /* FIXME: uncomment once SoylentBrowser is a GObject:
   g_return_val_if_fail (SOYLENT_IS_BROWSER (browser), retval);
    */
-
-  wtree = soylent_browser_get_widget_tree (browser);
-  menu_edit_edit = glade_xml_get_widget (wtree, "imagemenuitem_edit");
-  menu_edit_delete = glade_xml_get_widget (wtree, "imagemenuitem_delete");
-
   signals_num = ARRAY_LEN (signal_handlers);
-
-  /* invert usual logic to simplify the loop below */
-  retval = TRUE;
-
-  for (i = 0; i < signals_num; i++)
-    {
-      gboolean connect_retval = FALSE;
-      widget_signal_args_t cur_args = signal_handlers[i];
-      cb_entry_changed_e_contact *cb_data = NULL;
-
-      switch (cur_args.cb_data_type)
-        {
-          case CB_DATA_SIMPLE:
-            connect_retval = widget_signal_connect (wtree, cur_args.widget_name,
-                                                    cur_args.signal_name,
-                                                    cur_args.callback,
-                                                    cur_args.user_data);
-            break;
-          case CB_DATA_COMPLEX_FROM_E_CONTACT_FIELD:
-            cb_data = g_new0 (cb_entry_changed_e_contact, 1);
-            if (cb_data)
-              {
-                cb_data->browser = browser;
-                cb_data->widget_name = cur_args.widget_name;
-                cb_data->field = g_new0 (EContactField, 1);
-                if (cb_data->field)
-                  {
-                    *(cb_data->field) = (EContactField) cur_args.user_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,
-                                                           cur_args.widget_name,
-                                                           cur_args.signal_name,
-                                                           cur_args.callback,
-                                                           cb_data);
-                  }
-              }
-
-            if (!connect_retval)
-              {
-                if (cb_data)
-                  {
-                    g_free (cb_data->field);
-                    g_free (cb_data);
-                  }
-                /*
-                g_free (widget_name);
-                */
-              }
-          break;
-          default:
-            g_critical ("unhandled signal setup cb_data_t: %d\n",
-                        cur_args.cb_data_type);
-            break;
-
-          if (!connect_retval)
-            {
-              g_critical ("failed to set up signal handler for widget %s::%s\n",
-                          cur_args.widget_name, cur_args.signal_name);
-              retval = FALSE;
-            }
-        }
-    }
+  retval = widget_signal_connect_mass (browser, signal_handlers, signals_num);
 
   return retval;
 }
 
-
 /* Update the menu bar's menus' items for current selection
  *
  * Return TRUE for success, FALSE for any failure. */

Modified: trunk/src/soylent-browser.c
==============================================================================
--- trunk/src/soylent-browser.c	(original)
+++ trunk/src/soylent-browser.c	Mon Apr  7 04:12:40 2008
@@ -1592,7 +1592,7 @@
 {
   /* XXX: this is dangerously close to being "clever", but it's better than a
    * bunch of similar-but-different functions */
-  widget_signal_args_t signal_handlers[] =
+  const widget_signal_args_t const signal_handlers[] =
     {
       /* Main app window */
       {"window_main", "delete-event", soylent_browser_delete_cb, CB_DATA_SIMPLE,
@@ -1776,96 +1776,18 @@
        CB_DATA_COMPLEX_FROM_E_CONTACT_FIELD, (void*) E_CONTACT_VIDEO_URL},
     };
   gboolean retval = FALSE;
-  GladeXML *wtree = NULL;
-  guint signals_num = -1;
-  guint i = -1;
+  gint signals_num = -1;
 
   g_return_val_if_fail (browser, retval);
   /* FIXME: uncomment once SoylentBrowser is a GObject:
   g_return_val_if_fail (SOYLENT_IS_BROWSER (browser), retval);
    */
 
-  wtree = browser->main_window;
   signals_num = ARRAY_LEN (signal_handlers);
 
-  /* invert usual logic to simplify the loop below */
   retval = TRUE;
-
-  wtree = browser->main_window;
-  for (i = 0; i < signals_num; i++)
-    {
-      gboolean connect_retval = FALSE;
-      widget_signal_args_t cur_args = signal_handlers[i];
-      cb_entry_changed_e_contact *cb_data = NULL;
-
-      switch (cur_args.cb_data_type)
-        {
-          case CB_DATA_SIMPLE:
-            connect_retval = widget_signal_connect (wtree, cur_args.widget_name,
-                                                    cur_args.signal_name,
-                                                    cur_args.callback,
-                                                    cur_args.user_data);
-            break;
-          case CB_DATA_COMPLEX_FROM_E_CONTACT_FIELD:
-            cb_data = g_new0 (cb_entry_changed_e_contact, 1);
-            if (cb_data)
-              {
-                cb_data->browser = browser;
-                cb_data->widget_name = cur_args.widget_name;
-                cb_data->field = g_new0 (EContactField, 1);
-                if (cb_data->field)
-                  {
-                    *(cb_data->field) = (EContactField) cur_args.user_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,
-                                                           cur_args.widget_name,
-                                                           cur_args.signal_name,
-                                                           cur_args.callback,
-                                                           cb_data);
-                  }
-              }
-
-            if (!connect_retval)
-              {
-                if (cb_data)
-                  {
-                    g_free (cb_data->field);
-                    g_free (cb_data);
-                  }
-                /*
-                g_free (widget_name);
-                */
-              }
-          break;
-          default:
-            g_critical ("unhandled signal setup cb_data_t: %d\n",
-                        cur_args.cb_data_type);
-            break;
-
-          if (!connect_retval)
-            {
-              g_critical ("failed to set up signal handler for widget %s::%s\n",
-                          cur_args.widget_name, cur_args.signal_name);
-              retval = FALSE;
-            }
-        }
-    }
-
-  {
-    gboolean mail_signals_retval = FALSE;
-
-    /* TODO: push the contents of this function into the massive struct above */
-    mail_signals_retval =
-                      soylent_browser_person_info_mail_signals_setup (browser);
-
-    if (mail_signals_retval == FALSE)
-      {
-        retval = FALSE;
-      }
-  }
+  retval &= widget_signal_connect_mass (browser, signal_handlers, signals_num);
+  retval &= soylent_browser_person_info_mail_signals_setup (browser);
 
   return retval;
 }

Modified: trunk/src/soylent-utils.c
==============================================================================
--- trunk/src/soylent-utils.c	(original)
+++ trunk/src/soylent-utils.c	Mon Apr  7 04:12:40 2008
@@ -77,6 +77,87 @@
   return retval;
 }
 
+gboolean
+widget_signal_connect_mass (SoylentBrowser *browser,
+                            const widget_signal_args_t const *signal_handlers,
+                            guint signals_num)
+{
+  gboolean retval = FALSE;
+  GladeXML *wtree = NULL;
+  gint i = -1;
+
+  g_return_val_if_fail (browser, retval);
+  /* FIXME: uncomment once SoylentBrowser is a GObject:
+  g_return_val_if_fail (SOYLENT_IS_BROWSER (browser), retval);
+   */
+
+  wtree = soylent_browser_get_widget_tree (browser);
+
+  /* invert usual logic to simplify the loop below */
+  retval = TRUE;
+
+  for (i = 0; i < signals_num; i++)
+    {
+      gboolean connect_retval = FALSE;
+      widget_signal_args_t cur_args = signal_handlers[i];
+      cb_entry_changed_e_contact *cb_data = NULL;
+
+      switch (cur_args.cb_data_type)
+        {
+          case CB_DATA_SIMPLE:
+            connect_retval = widget_signal_connect (wtree, cur_args.widget_name,
+                                                    cur_args.signal_name,
+                                                    cur_args.callback,
+                                                    cur_args.user_data);
+            break;
+          case CB_DATA_COMPLEX_FROM_E_CONTACT_FIELD:
+            cb_data = g_new0 (cb_entry_changed_e_contact, 1);
+            if (cb_data)
+              {
+                cb_data->browser = browser;
+                cb_data->widget_name = cur_args.widget_name;
+                cb_data->field = g_new0 (EContactField, 1);
+                if (cb_data->field)
+                  {
+                    *(cb_data->field) = (EContactField) cur_args.user_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,
+                                                           cur_args.widget_name,
+                                                           cur_args.signal_name,
+                                                           cur_args.callback,
+                                                           cb_data);
+                  }
+              }
+
+            if (!connect_retval)
+              {
+                if (cb_data)
+                  {
+                    g_free (cb_data->field);
+                    g_free (cb_data);
+                  }
+              }
+          break;
+          default:
+            g_critical ("unhandled signal setup cb_data_t: %d\n",
+                        cur_args.cb_data_type);
+            break;
+
+          if (!connect_retval)
+            {
+              g_critical ("failed to set up signal handler for widget %s::%s\n",
+                          cur_args.widget_name, cur_args.signal_name);
+              retval = FALSE;
+            }
+        }
+    }
+
+  return retval;
+}
+
 /* Set the contents of a GtkTextBuffer without triggering its handler
  * (eg, when pre-filling them with e-d-s fields for the given person) */
 void

Modified: trunk/src/soylent-utils.h
==============================================================================
--- trunk/src/soylent-utils.h	(original)
+++ trunk/src/soylent-utils.h	Mon Apr  7 04:12:40 2008
@@ -61,6 +61,10 @@
 gboolean widget_signal_connect (GladeXML *wtree, const gchar *widget_name,
                                 const gchar *signal, gconstpointer callback,
                                 gpointer user_data);
+gboolean widget_signal_connect_mass 
+                            (SoylentBrowser *browser,
+                             const widget_signal_args_t const *signal_handlers,
+                             guint signals_num);
 
 void text_buffer_set_text_block_handler (GtkTextBuffer *buf, const gchar *text,
                                          gpointer handler);



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