soylent r106 - trunk/src



Author: treitter
Date: Mon Mar 17 00:44:23 2008
New Revision: 106
URL: http://svn.gnome.org/viewvc/soylent?rev=106&view=rev

Log:
More soylent-browser-person-view.c work; in the middle of cleaning up soylent_browser_person_view_im_update(), but it's better than it was

Modified:
   trunk/src/soylent-browser-person-view.c

Modified: trunk/src/soylent-browser-person-view.c
==============================================================================
--- trunk/src/soylent-browser-person-view.c	(original)
+++ trunk/src/soylent-browser-person-view.c	Mon Mar 17 00:44:23 2008
@@ -101,22 +101,27 @@
 /* Setup/update sections of the person view UI with latest data from e-d-s */
 static gboolean soylent_browser_person_view_update (SoylentBrowser *browser,
                                                     SoylentPerson *person);
-static void soylent_browser_person_view_email_update (SoylentBrowser *browser,
-                                                      SoylentPerson *person);
-static void soylent_browser_person_view_im_update (SoylentBrowser *browser,
-                                                   SoylentPerson *person);
-static void soylent_browser_person_view_avatar_update (SoylentBrowser *browser,
+static gboolean soylent_browser_person_view_email_update
+                                                      (SoylentBrowser *browser,
+                                                       SoylentPerson *person);
+static gboolean soylent_browser_person_view_im_update (SoylentBrowser *browser,
+                                                       SoylentPerson *person);
+static gboolean soylent_browser_person_view_avatar_update
+                                                      (SoylentBrowser *browser,
+                                                       SoylentPerson *person);
+static gboolean soylent_browser_person_view_mail_update
+                                                      (SoylentBrowser *browser,
+                                                       SoylentPerson *person);
+static gboolean soylent_browser_person_view_name_update
+                                                      (SoylentBrowser *browser,
                                                        SoylentPerson *person);
-static void soylent_browser_person_view_mail_update (SoylentBrowser *browser,
-                                                     SoylentPerson *person);
-static void soylent_browser_person_view_name_update (SoylentBrowser *browser,
-                                                     SoylentPerson *person);
-static void soylent_browser_person_view_detail_add_update
+static gboolean soylent_browser_person_view_detail_add_update
                                                       (SoylentBrowser *browser);
-static void soylent_browser_person_view_phone_update (SoylentBrowser *browser,
-                                                      SoylentPerson *person);
-static void soylent_browser_person_view_web_update (SoylentBrowser *browser,
-                                                    SoylentPerson *person);
+static gboolean soylent_browser_person_view_phone_update
+                                                      (SoylentBrowser *browser,
+                                                       SoylentPerson *person);
+static gboolean soylent_browser_person_view_web_update (SoylentBrowser *browser,
+                                                        SoylentPerson *person);
 
 /* Save unsaved changes to the person's details and return to Browse Mode
  *
@@ -2237,17 +2242,17 @@
   g_return_val_if_fail (SOYLENT_IS_PERSON (PERSON), retval);
    */
 
-  soylent_browser_person_view_phone_update (browser, person);
-  soylent_browser_person_view_im_update (browser, person);
-  soylent_browser_person_view_email_update (browser, person);
-  soylent_browser_person_view_mail_update (browser, person);
-  soylent_browser_person_view_web_update (browser, person);
-  soylent_browser_person_view_name_update (browser, person);
-  soylent_browser_person_view_avatar_update (browser, person);
-  soylent_browser_person_view_detail_add_update (browser);
-
   retval = TRUE;
 
+  retval &= soylent_browser_person_view_phone_update (browser, person);
+  retval &= soylent_browser_person_view_im_update (browser, person);
+  retval &= soylent_browser_person_view_email_update (browser, person);
+  retval &= soylent_browser_person_view_mail_update (browser, person);
+  retval &= soylent_browser_person_view_web_update (browser, person);
+  retval &= soylent_browser_person_view_name_update (browser, person);
+  retval &= soylent_browser_person_view_avatar_update (browser, person);
+  retval &= soylent_browser_person_view_detail_add_update (browser);
+
   return retval;
 }
 
@@ -2255,51 +2260,71 @@
  *
  * Eg, if we set the Type of Detail combo box to Mailing Address, display the
  * mailing address field widgets and hide the single GtkEntry for single-value
- * details */
-static void
+ * details
+ *
+ * Return TRUE for success, FALSE for any failure. */
+static gboolean
 soylent_browser_person_view_detail_add_update (SoylentBrowser *browser)
 {
+  gboolean retval = FALSE;
+  gboolean cbox_setup_retval = FALSE;
   GladeXML *wtree = NULL;
   GtkEntry *entry_detail_add = NULL;
   gint i = 0;
 
-  wtree = soylent_browser_get_widget_tree (browser);
+  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 = soylent_browser_get_widget_tree (browser);
   entry_detail_add = GTK_ENTRY (glade_xml_get_widget (wtree,
                                                       "entry_detail_add"));
-  soylent_browser_person_detail_add_cbox_setup (browser, FALSE);
-  gtk_entry_set_text (entry_detail_add, "");
+  cbox_setup_retval = soylent_browser_person_detail_add_cbox_setup (browser,
+                                                                    FALSE);
+  if (cbox_setup_retval)
+    {
+      gtk_entry_set_text (entry_detail_add, "");
+
+      /* Set up 'changed' signals for the mail "Detail Add" fields */
+      for (i = 0; i < MAIL_FIELDS_NUM; i++)
+        {
+          GtkWidget *widget_cur = NULL;
+          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 = glade_xml_get_widget (wtree, widget_name);
+          if (GTK_IS_TEXT_VIEW (widget_cur))
+            {
+              GtkTextBuffer *buf = NULL;
 
-  /* Set up 'changed' signals for the mail "Detail Add" fields */
-  for (i = 0; i < MAIL_FIELDS_NUM; i++)
-    {
-      GObject *widget_cur = NULL;
-      gchar *widget_name = NULL;
+              buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget_cur));
+              gtk_text_buffer_set_text (buf, "", -1);
+            }
+          else if (GTK_IS_ENTRY (widget_cur))
+            {
+              gtk_entry_set_text (GTK_ENTRY (widget_cur), "");
+            }
 
-      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)));
-          gtk_text_buffer_set_text (GTK_TEXT_BUFFER (widget_cur), "", -1);
-        }
-      else if (GTK_IS_ENTRY (widget_cur))
-        {
-          gtk_entry_set_text (GTK_ENTRY (widget_cur), "");
+          g_free (widget_name);
         }
 
-      g_free (widget_name);
+      retval = TRUE;
     }
+
+  return retval;
 }
 
-/* Update the Person View:Email UI section */
-static void
+/* Update the Person View:Email UI section
+ *
+ * Return TRUE for success, FALSE for any failure. */
+static gboolean
 soylent_browser_person_view_email_update (SoylentBrowser *browser,
                                           SoylentPerson *person)
 {
+  gboolean retval = FALSE;
   GladeXML *wtree = NULL;
   EContact *e_contact = NULL;
   GtkEntry *entry_email = NULL;
@@ -2307,253 +2332,314 @@
   gchar *widget_str = NULL;
   gchar *email_str = NULL;
   guint email_list_pos = 0;
-  GList *email_strs_head = NULL;
   GList *l = NULL;
-  guint num_entries_set_email = 0;
+  guint num_entries_set = 0;
   GtkFrame *frame_email = NULL;
   GtkFixed *fixed_email = NULL;
 
-  wtree = soylent_browser_get_widget_tree (browser);
-  e_contact = soylent_person_get_e_contact (person);
+  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);
+   */
+  g_return_val_if_fail (person != NULL, retval);
+  /* FIXME: uncomment once SoylentPerson is a GObject:
+  g_return_val_if_fail (SOYLENT_IS_PERSON (PERSON), retval);
+   */
 
+  wtree = soylent_browser_get_widget_tree (browser);
   frame_email = GTK_FRAME (glade_xml_get_widget (wtree, "frame_person_email"));
   fixed_email = GTK_FIXED (glade_xml_get_widget (wtree, "fixed_person_email"));
 
-  email_strs_head = e_contact_get (e_contact, E_CONTACT_EMAIL);
-  for (l = email_strs_head;
-       l && email_list_pos < MAX_GUI_EMAIL;
-       l = g_list_next (l), email_list_pos++)
-    {
-      widget_str = g_strdup_printf ("entry_person_email_%c",
-                                    '1' + email_list_pos);
-      entry_email = GTK_ENTRY (glade_xml_get_widget (wtree, widget_str));
-      g_free (widget_str);
- 
-      widget_str = g_strdup_printf ("hbox_person_email_%c",
-                                    '1' + email_list_pos);
-      hbox_email = GTK_HBOX (glade_xml_get_widget (wtree, widget_str));
-      g_free (widget_str);
+  e_contact = soylent_person_get_e_contact (person);
+  if (e_contact && E_IS_CONTACT (e_contact))
+    {
+      GList *email_strs_head = NULL;
 
-      email_str = (gchar*) l->data;
+      /* Display up to MAX_GUI_EMAIL email addresses in the Email section of the
+       * person editor */
+      email_strs_head = e_contact_get (e_contact, E_CONTACT_EMAIL);
+      for (l = email_strs_head;
+           l && email_list_pos < MAX_GUI_EMAIL;
+           l = g_list_next (l), email_list_pos++)
+        {
+          widget_str = g_strdup_printf ("entry_person_email_%c",
+                                        '1' + email_list_pos);
+          entry_email = GTK_ENTRY (glade_xml_get_widget (wtree, widget_str));
+          g_free (widget_str);
+    
+          widget_str = g_strdup_printf ("hbox_person_email_%c",
+                                        '1' + email_list_pos);
+          hbox_email = GTK_HBOX (glade_xml_get_widget (wtree, widget_str));
+          g_free (widget_str);
 
-      if (email_str)
-        {
-          entry_set_text_block_handler
-                            (entry_email, email_str,
-                             soylent_browser_person_entry_changed_e_contact_cb);
-          gtk_widget_show (GTK_WIDGET (hbox_email));
-          num_entries_set_email++;
+          email_str = (gchar*) l->data;
+          if (email_str)
+            {
+              entry_set_text_block_handler
+                          (entry_email, email_str,
+                           soylent_browser_person_entry_changed_e_contact_cb);
+              gtk_widget_show (GTK_WIDGET (hbox_email));
+              num_entries_set++;
+            }
+          else
+            {
+              gtk_widget_hide (GTK_WIDGET (hbox_email));
+            }
+
+          g_free (email_str);
         }
-      else
+
+      /* If the number of email addresses > MAX_GUI_EMAIL, free the strings we
+       * couldn't display */
+      for (; l; l = g_list_next (l))
         {
-          gtk_widget_hide (GTK_WIDGET (hbox_email));
+          email_str = (gchar*) l->data;
+          g_free (email_str);
         }
+      g_list_free (email_strs_head);
 
-      g_free (email_str);
-    }
-
-  /* Make sure we free any allocated email strings beyond MAX_GUI_EMAIL */
-  for (; l; l = g_list_next (l))
-    {
-      email_str = (gchar*) l->data;
-      g_free (email_str);
-    }
+      /* If the number of email addresses < MAX_GUI_EMAIL, hide unused email
+       * GtkEntrys */
+      for (; email_list_pos < MAX_GUI_EMAIL; email_list_pos++)
+        {
+          widget_str = g_strdup_printf ("hbox_person_email_%c",
+                                        '1' + email_list_pos);
+          hbox_email = GTK_HBOX (glade_xml_get_widget (wtree, widget_str));
+          g_free (widget_str);
 
-  g_list_free (email_strs_head);
+          gtk_widget_hide (GTK_WIDGET (hbox_email));
+        }
 
-  for (; email_list_pos < MAX_GUI_EMAIL; email_list_pos++)
-    {
-      widget_str = g_strdup_printf ("hbox_person_email_%c",
-                                    '1' + email_list_pos);
-      hbox_email = GTK_HBOX (glade_xml_get_widget (wtree, widget_str));
-      g_free (widget_str);
+      if (num_entries_set == 0)
+        {
+          gtk_widget_hide (GTK_WIDGET (frame_email));
+          gtk_widget_hide (GTK_WIDGET (fixed_email));
+        }
+      else
+        {
+          gtk_widget_show (GTK_WIDGET (frame_email));
+          gtk_widget_show (GTK_WIDGET (fixed_email));
+        }
 
-      gtk_widget_hide (GTK_WIDGET (hbox_email));
+      retval = TRUE;
     }
 
-  if (num_entries_set_email == 0)
-  {
-    gtk_widget_hide (GTK_WIDGET (frame_email));
-    gtk_widget_hide (GTK_WIDGET (fixed_email));
-    return;
-  }
-
-  gtk_widget_show (GTK_WIDGET (frame_email));
-  gtk_widget_show (GTK_WIDGET (fixed_email));
+  return retval;
 }
 
 /* FIXME - this needs a stick of live dynamite throw its way */
-/* Update the Person View:IM UI section */
-static void
+/* Update the Person View:IM UI section
+ *
+ * Return TRUE for success, FALSE for any failure. */
+static gboolean
 soylent_browser_person_view_im_update (SoylentBrowser *browser,
                                        SoylentPerson *person)
 {
+  gboolean retval = FALSE;
   const guint CONTEXT_NUM = 2;
-  const guint NUM_PROTO = 6;
-  guint entry_num[2];
+  const guint PROTO_NUM = 6;
+  const guint ENTRY_POS_INIT = 0;
+  guint entry_pos[2];
   GladeXML *wtree = NULL;
   EContact *e_contact = NULL;
-  GtkLabel *label_im = NULL;
-  GtkEntry *entry_im = NULL;
-  GtkHBox *hbox_im = NULL;
-  GtkFrame *frame_im = NULL;
-  GtkFrame *frame_im_work = NULL;
-  GtkFrame *frame_im_home = NULL;
-  GtkFixed *fixed_im_work = NULL;
-  GtkFixed *fixed_im_home = NULL;
-  frame_im = NULL;
-  frame_im_work = NULL;
-  frame_im_home = NULL;
-  fixed_im_work = NULL;
-  fixed_im_home = NULL;
-  gchar *widget_str = NULL;
-  guint context = 0;
-  guint proto = 0;
   const gchar *im_name = NULL;
-  GList *im_attr_list = NULL;
-  GList *l = NULL;
   EVCardAttribute *attr = NULL;
 
+  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);
+   */
+  g_return_val_if_fail (person != NULL, retval);
+  /* FIXME: uncomment once SoylentPerson is a GObject:
+  g_return_val_if_fail (SOYLENT_IS_PERSON (PERSON), retval);
+   */
+
   wtree = soylent_browser_get_widget_tree (browser);
 
   e_contact = soylent_person_get_e_contact (person);
-  frame_im      = GTK_FRAME (glade_xml_get_widget (wtree, "frame_person_im"));
-  frame_im_work = GTK_FRAME (glade_xml_get_widget (wtree,
-                                                   "frame_person_im_work"));
-  frame_im_home = GTK_FRAME (glade_xml_get_widget (wtree,
-                                                   "frame_person_im_home"));
-  fixed_im_work = GTK_FIXED (glade_xml_get_widget (wtree,
-                                                   "fixed_person_im_work"));
-  fixed_im_home = GTK_FIXED (glade_xml_get_widget (wtree,
-                                                   "fixed_person_im_home"));
-  entry_num[CONTEXT_HOME] = entry_num[CONTEXT_WORK] = 1;
- 
-  for (proto = E_CONTACT_IM_AIM; proto < E_CONTACT_IM_AIM + NUM_PROTO; proto++)
+  if (e_contact && E_IS_CONTACT (e_contact))
     {
-      im_attr_list = e_contact_get_attributes (e_contact, proto);
+      guint context = 0;
+      guint proto = 0;
 
-      for (context = CONTEXT_FIRST; context < CONTEXT_NUM; context++)
+      entry_pos[CONTEXT_HOME] = entry_pos[CONTEXT_WORK] = ENTRY_POS_INIT;
+      for (proto = E_CONTACT_IM_AIM;
+           proto < (E_CONTACT_IM_AIM + PROTO_NUM);
+           proto++)
         {
 
-          for (l = im_attr_list; l; l = g_list_next(l))
+          for (context = CONTEXT_FIRST; context < CONTEXT_NUM; context++)
             {
-              GList *param_type_value = NULL;
+              GList *im_attr_list = NULL;
+              GList *l = NULL;
 
-              if (entry_num[context] > IM_FIELDS_PER_CONTEXT)
+              im_attr_list = e_contact_get_attributes (e_contact, proto);
+              for (l = im_attr_list; l; l = g_list_next(l))
                 {
-                  break;
-                }
+                  GtkHBox *hbox_im = NULL;
+                  GtkLabel *label_im = NULL;
+                  GtkEntry *entry_im = NULL;
+                  GList *param_type_value = NULL;
+                  gchar *widget_str = NULL;
 
-              attr = l->data;
-              im_name = e_vcard_attribute_get_value (attr);
+                  if (entry_pos[context] >= IM_FIELDS_PER_CONTEXT)
+                    {
+                      break;
+                    }
 
-              param_type_value = e_vcard_attribute_get_param (attr, EVC_TYPE);
+                  attr = l->data;
+                  im_name = e_vcard_attribute_get_value (attr);
 
-              widget_str = g_strdup_printf ("hbox_person_im_%s_%c",
-                                            CONTEXT_STRS[context],
-                                            '0' + entry_num[context]);
-              hbox_im = GTK_HBOX (glade_xml_get_widget (wtree, widget_str));
-              g_free (widget_str);
+                  param_type_value = e_vcard_attribute_get_param (attr,
+                                                                  EVC_TYPE);
 
-              /* "HOME" is the catch-all, since that's how Evo does it */
-              if ((context != CONTEXT_HOME
-                  && !(param_type_value
-                        && (g_ascii_strcasecmp (param_type_value->data,
-                                                CONTEXT_STRS[context]) == 0)))
-                  || (context == CONTEXT_HOME
-                    && !(param_type_value
-                          && (g_ascii_strcasecmp (param_type_value->data,
-                                                  CONTEXT_STRS[CONTEXT_HOME])
-                                                                        == 0))))
-                {
-                  continue;
+                  widget_str = g_strdup_printf ("hbox_person_im_%s_%c",
+                                                CONTEXT_STRS[context],
+                                                '1' + entry_pos[context]);
+                  hbox_im = GTK_HBOX (glade_xml_get_widget (wtree, widget_str));
+                  g_free (widget_str);
+
+                  /* "HOME" is the catch-all, since that's how Evo does it */
+                  if (   (context != CONTEXT_HOME
+                          && !(param_type_value
+                               && (g_ascii_strcasecmp (param_type_value->data,
+                                                       CONTEXT_STRS[context])
+                                   == 0)))
+                      || (context == CONTEXT_HOME
+                          && !(param_type_value
+                               && (g_ascii_strcasecmp
+                                                    (param_type_value->data,
+                                                     CONTEXT_STRS[CONTEXT_HOME])
+                                   == 0))))
+                    {
+                      continue;
+                    }
+
+                  widget_str = g_strdup_printf ("entry_person_im_%s_%c",
+                                                CONTEXT_STRS[context],
+                                                '1' + entry_pos[context]);
+
+                  entry_im = GTK_ENTRY (glade_xml_get_widget (wtree,
+                                                              widget_str));
+                  g_free (widget_str);
+
+                  widget_str = g_strdup_printf ("label_person_im_%s_%c",
+                                                CONTEXT_STRS[context],
+                                                '1' + entry_pos[context]);
+
+                  label_im = GTK_LABEL (glade_xml_get_widget (wtree,
+                                                              widget_str));
+                  g_free (widget_str);
+
+                  if (im_name)
+                    {
+                      gtk_label_set_text
+                                        (label_im,
+                                         e_vcard_attribute_get_name (attr) + 2);
+                      entry_set_text_block_handler
+                          (entry_im, im_name,
+                           soylent_browser_person_entry_changed_e_contact_cb);
+
+                      gtk_widget_show (GTK_WIDGET (hbox_im));
+                    }
+
+                  entry_pos[context]++;
                 }
+            }
+        }
 
-              widget_str = g_strdup_printf ("entry_person_im_%s_%c",
-                                            CONTEXT_STRS[context],
-                                            '0' + entry_num[context]);
+      /* Show or hide frames depending on whether their contents were updated
+       * above */
+        {
+          GtkFrame *frame_im = NULL;
+          guint i = 0;
+          guint frames_visible = 0;
 
-              entry_im = GTK_ENTRY (glade_xml_get_widget (wtree, widget_str));
-              g_free (widget_str);
+          frame_im = GTK_FRAME (glade_xml_get_widget (wtree,
+                                                      "frame_person_im"));
 
-              widget_str = g_strdup_printf ("label_person_im_%s_%c",
-                                            CONTEXT_STRS[context],
-                                            '0' + entry_num[context]);
+          for (i = 0; i < CONTEXT_NUM; i++)
+            {
+              GtkFrame *frame_im_cur = NULL;
+              gchar *widget_str = NULL;
 
-              label_im = GTK_LABEL (glade_xml_get_widget (wtree, widget_str));
-              g_free (widget_str);
+              widget_str = g_strdup_printf ("frame_person_im_%s",
+                                            CONTEXT_STRS[i]);
+              frame_im_cur = GTK_FRAME (glade_xml_get_widget (wtree,
+                                                              widget_str));
 
-              if (im_name)
+              if (entry_pos[i] == ENTRY_POS_INIT)
                 {
-                  gtk_label_set_text (label_im,
-                                      e_vcard_attribute_get_name (attr) + 2);
-                  entry_set_text_block_handler
-                            (entry_im, im_name,
-                             soylent_browser_person_entry_changed_e_contact_cb);
-
-                  gtk_widget_show (GTK_WIDGET (hbox_im));
+                  gtk_widget_hide (GTK_WIDGET (frame_im_cur));
+                }
+              else
+                {
+                  frames_visible++;
+                  gtk_widget_show (GTK_WIDGET (frame_im_cur));
                 }
 
-              entry_num[context]++;
+              g_free (widget_str);
             }
-        }
-    }
-
-  if (entry_num[CONTEXT_HOME] == 1 && entry_num[CONTEXT_WORK] == 1)
-    {
-      gtk_widget_hide (GTK_WIDGET (frame_im));
-    }
-  else
-    {
-      if (entry_num[CONTEXT_WORK] == 1)
-        {
-          gtk_widget_hide (GTK_WIDGET (frame_im_work));
-        }
-      else
-        {
-          gtk_widget_show (GTK_WIDGET (frame_im_work));
-        }
 
-      if (entry_num[CONTEXT_HOME] == 1)
-        {
-          gtk_widget_hide (GTK_WIDGET (frame_im_home));
-        }
-      else
-        {
-          gtk_widget_show (GTK_WIDGET (frame_im_home));
+          if (frames_visible > 0)
+            {
+              gtk_widget_show (GTK_WIDGET (frame_im));
+            }
+          else
+            {
+              gtk_widget_hide (GTK_WIDGET (frame_im));
+            }
         }
 
-      gtk_widget_show (GTK_WIDGET (frame_im));
-    }
-
-  /* Hide unfilled hboxes (if the lists combined contain fewer entries in each
-    * context than IM_FIELDS_PER_CONTEXT) */
-  for (context = CONTEXT_FIRST; context < CONTEXT_NUM; context++)
-  {
-    for (; entry_num[context] <= IM_FIELDS_PER_CONTEXT; entry_num[context]++)
+      /* Hide unfilled hboxes (if the lists combined contain fewer entries in
+       * each context than IM_FIELDS_PER_CONTEXT) */
+      for (context = CONTEXT_FIRST; context < CONTEXT_NUM; context++)
       {
-        widget_str = g_strdup_printf ("hbox_person_im_%s_%c",
-                                      CONTEXT_STRS[context],
-                                      '0' + entry_num[context]);
-        hbox_im = GTK_HBOX (glade_xml_get_widget (wtree, widget_str));
+        for (; entry_pos[context] < IM_FIELDS_PER_CONTEXT; entry_pos[context]++)
+          {
+            gchar *widget_str = NULL;
+            GtkHBox *hbox_im = NULL;
+
+            widget_str = g_strdup_printf ("hbox_person_im_%s_%c",
+                                          CONTEXT_STRS[context],
+                                          '1' + entry_pos[context]);
+            hbox_im = GTK_HBOX (glade_xml_get_widget (wtree, widget_str));
 
-        gtk_widget_hide (GTK_WIDGET (hbox_im));
-        g_free (widget_str);
+            gtk_widget_hide (GTK_WIDGET (hbox_im));
+            g_free (widget_str);
+          }
       }
-  }
+
+      /* FIXME: actually set this appropriately above */
+      retval = TRUE;
+    }
+
+  return retval;
 }
 
-/* Update the Person View:Avatar UI section */
-static void
+/* Update the Person View:Avatar UI section
+ *
+ * Return TRUE for success, FALSE for any failure. */
+static gboolean
 soylent_browser_person_view_avatar_update (SoylentBrowser *browser,
                                            SoylentPerson *person)
 {
+  gboolean retval = FALSE;
   GladeXML *wtree = NULL;
   EContact *e_contact = NULL;
   GtkImage *img_person_view = NULL;
   EContactPhoto *photo = NULL;
   GdkPixbuf *pixbuf = NULL;
 
+  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);
+   */
+  g_return_val_if_fail (person != NULL, retval);
+  /* FIXME: uncomment once SoylentPerson is a GObject:
+  g_return_val_if_fail (SOYLENT_IS_PERSON (PERSON), retval);
+   */
+
   wtree = soylent_browser_get_widget_tree (browser);
   e_contact = soylent_person_get_e_contact (person);
   img_person_view = GTK_IMAGE (glade_xml_get_widget (wtree, "img_person_view"));
@@ -2584,14 +2670,22 @@
       gtk_image_clear (img_person_view);
       /* FIXME - probably need to free the pixbuf and the photo */
     }
+
+  /* FIXME: actually set this appropriately above */
+  retval = TRUE;
+
+  return retval;
 }
 
-/* Update the Person View:Mail UI section */
-static void
+/* Update the Person View:Mail UI section
+ *
+ * Return TRUE for success, FALSE for any failure. */
+static gboolean
 soylent_browser_person_view_mail_update (SoylentBrowser *browser,
                                          SoylentPerson *person)
 {
   const guint CONTEXT_NUM = 3;
+  gboolean retval = FALSE;
   GladeXML *wtree = NULL;
   EContact *e_contact = NULL;
   GtkFrame *frame_mail = NULL;
@@ -2599,6 +2693,14 @@
   guint frames_visible = 0;
   const EContactAddress *addr = NULL;
 
+  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);
+   */
+  g_return_val_if_fail (person != NULL, retval);
+  /* FIXME: uncomment once SoylentPerson is a GObject:
+  g_return_val_if_fail (SOYLENT_IS_PERSON (PERSON), retval);
+   */
   wtree = soylent_browser_get_widget_tree (browser);
   e_contact = soylent_person_get_e_contact (person);
   frame_mail = GTK_FRAME (glade_xml_get_widget (wtree, "frame_person_mail"));
@@ -2695,10 +2797,17 @@
       g_assert (GTK_IS_WIDGET (frame_mail));
       gtk_widget_hide (GTK_WIDGET (frame_mail));
     }
+
+  /* FIXME: actually set this appropriately above */
+  retval = TRUE;
+
+  return retval;
 }
 
-/* Update the Person View:Name UI section */
-static void
+/* Update the Person View:Name UI section
+ *
+ * Return TRUE for success, FALSE for any failure. */
+static gboolean
 soylent_browser_person_view_name_update (SoylentBrowser *browser,
                                          SoylentPerson *person)
 {
@@ -2707,6 +2816,16 @@
   GtkEntry *entry_name = NULL;
   const gchar *name = NULL;
 
+gboolean retval = FALSE;
+
+  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);
+   */
+  g_return_val_if_fail (person != NULL, retval);
+  /* FIXME: uncomment once SoylentPerson is a GObject:
+  g_return_val_if_fail (SOYLENT_IS_PERSON (PERSON), retval);
+   */
   wtree = soylent_browser_get_widget_tree (browser);
   e_contact = soylent_person_get_e_contact (person);
   entry_name = GTK_ENTRY (glade_xml_get_widget (wtree, "entry_person_name"));
@@ -2721,10 +2840,17 @@
   soylent_debug ("\n%s\n", 
                  e_vcard_to_string (E_VCARD (e_contact), EVC_FORMAT_VCARD_30));
   */
+
+  /* FIXME: actually set this appropriately above */
+  retval = TRUE;
+
+  return retval;
 }
 
-/* Update the Person View:Phone UI section */
-static void
+/* Update the Person View:Phone UI section
+ *
+ * Return TRUE for success, FALSE for any failure. */
+static gboolean
 soylent_browser_person_view_phone_update (SoylentBrowser *browser,
                                           SoylentPerson *person)
 {
@@ -2734,6 +2860,7 @@
   const gchar *context_list[] = {"work", "home", "cell",};
   const guint NUM_CONTEXT = 3;
   const guint CONTEXT_POS_WORK = 0;
+  gboolean retval = FALSE;
   GladeXML *wtree = NULL;
   EContact *e_contact = NULL;
   GtkEntry *entry_phone = NULL;
@@ -2745,9 +2872,17 @@
    * position in CONTEXT_STRS and have this loop skip over CONTEXT_OTHER */
   gchar *widget_str = NULL;
   guint context = 0;
-  guint num_entries_set_phone = 0;
+  guint num_entries_set = 0;
   const gchar *phone_str = NULL;
 
+  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);
+   */
+  g_return_val_if_fail (person != NULL, retval);
+  /* FIXME: uncomment once SoylentPerson is a GObject:
+  g_return_val_if_fail (SOYLENT_IS_PERSON (PERSON), retval);
+   */
   wtree = soylent_browser_get_widget_tree (browser);
   e_contact = soylent_person_get_e_contact (person);
   frame_phone = GTK_FRAME (glade_xml_get_widget (wtree, "frame_person_phone"));
@@ -2772,7 +2907,7 @@
           entry_set_text_block_handler
                             (entry_phone, phone_str,
                              soylent_browser_person_entry_changed_e_contact_cb);
-          num_entries_set_phone++;
+          num_entries_set++;
 
           gtk_widget_show (GTK_WIDGET (hbox_phone));
         }
@@ -2782,22 +2917,29 @@
         }
     }
 
-  if (num_entries_set_phone == 0)
+  /* FIXME We should probably include at least some of the other phone numbers*/
+
+  if (num_entries_set == 0)
     {
       gtk_widget_hide (GTK_WIDGET (frame_phone));
       gtk_widget_hide (GTK_WIDGET (fixed_phone));
-
-      return;
+    }
+  else
+    {
+      gtk_widget_show (GTK_WIDGET (frame_phone));
+      gtk_widget_show (GTK_WIDGET (fixed_phone));
     }
 
-  /* FIXME We should probably include at least some of the other phone numbers*/
+  /* FIXME: actually set this appropriately above */
+  retval = TRUE;
 
-  gtk_widget_show (GTK_WIDGET (frame_phone));
-  gtk_widget_show (GTK_WIDGET (fixed_phone));
+  return retval;
 }
 
-/* Update the Person View:Web URLs UI section */
-static void
+/* Update the Person View:Web URLs UI section
+ *
+ * Return TRUE for success, FALSE for any failure. */
+static gboolean
 soylent_browser_person_view_web_update (SoylentBrowser *browser,
                                         SoylentPerson *person)
 {
@@ -2807,6 +2949,7 @@
                                     E_CONTACT_VIDEO_URL,};
   const guint NUM_TYPE = 4;
   const gchar *type_list[] = {"homepage", "blog", "calendar", "video",};
+  gboolean retval = FALSE;
   GladeXML *wtree = NULL;
   EContact *e_contact = NULL;
   GtkEntry *entry_web = NULL;
@@ -2817,6 +2960,15 @@
   guint num_entries_set = 0;
   const gchar *web_name = NULL;
 
+
+  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);
+   */
+  g_return_val_if_fail (person != NULL, retval);
+  /* FIXME: uncomment once SoylentPerson is a GObject:
+  g_return_val_if_fail (SOYLENT_IS_PERSON (PERSON), retval);
+   */
   wtree = soylent_browser_get_widget_tree (browser);
   e_contact = soylent_person_get_e_contact (person);
   frame_web = GTK_FRAME (glade_xml_get_widget (wtree, "frame_person_web"));
@@ -2860,6 +3012,11 @@
     {
       gtk_widget_show (GTK_WIDGET (frame_web));
     }
+
+  /* FIXME: actually set this appropriately above */
+  retval = TRUE;
+
+  return retval;
 }
 
 /* Return an uppercased copy of the contents of the given GtkComboBox or NULL



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