soylent r105 - trunk/src



Author: treitter
Date: Sun Mar 16 21:37:32 2008
New Revision: 105
URL: http://svn.gnome.org/viewvc/soylent?rev=105&view=rev

Log:
continued soylent-browser-person-view.c cleanup

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	Sun Mar 16 21:37:32 2008
@@ -99,8 +99,8 @@
                                                        const gchar *param_val);
 
 /* Setup/update sections of the person view UI with latest data from e-d-s */
-static void soylent_browser_person_view_update (SoylentBrowser *browser,
-                                                SoylentPerson *person);
+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,
@@ -356,10 +356,15 @@
       }
 #else
       {
-        soylent_browser_person_view_update (browser, person);
+        gboolean view_update_retval = FALSE;
 
-        retval = soylent_browser_view_set_mode (browser,
-                                                SB_PEOPLE_VIEW_MODE_EDIT);
+        view_update_retval = soylent_browser_person_view_update (browser,
+                                                                 person);
+        if (view_update_retval)
+          {
+            retval = soylent_browser_view_set_mode (browser,
+                                                    SB_PEOPLE_VIEW_MODE_EDIT);
+          }
       }
 #endif /* HAVE_CONTACTS_APP */
     }
@@ -1623,15 +1628,21 @@
           /* If we've found our match */
           if (g_str_equal (e_uid, e_uid_cur))
             {
-              gboolean set_mode_retval = FALSE;
+              gboolean view_update_retval = FALSE;
+
+              view_update_retval = soylent_browser_person_view_update (browser,
+                                                                       person);
+              if (view_update_retval)
+                {
+                  gboolean set_mode_retval = FALSE;
 
-              soylent_browser_person_view_update (browser, person);
-              set_mode_retval = soylent_browser_view_set_mode
+                  set_mode_retval = soylent_browser_view_set_mode
                                                     (browser,
                                                      SB_PEOPLE_VIEW_MODE_EDIT);
-              if (set_mode_retval)
-                {
-                  retval = TRUE;
+                  if (set_mode_retval)
+                    {
+                      retval = TRUE;
+                    }
                 }
             }
         }
@@ -1906,7 +1917,7 @@
     }
   else if (GTK_IS_TEXT_VIEW (widget))
     {
-      GtkTextBuffer *buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget));
+      GtkTextBuffer *buf = NULL;
       GtkTextIter start, end;
 
       buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget));
@@ -1948,66 +1959,68 @@
 
 /* FIXME: convert to support multivalued mail fields/widgets */
 /* Propagate existing mailing address changes to the person-being-edited's
- * EContact */
+ * EContact
+ *
+ * Return TRUE for success, FALSE for any failure. */
 static gboolean
 soylent_browser_person_set_mail_fields_from_widgets (gpointer key,
                                                      gpointer value,
                                                      gpointer user_data)
 {
+  gboolean retval = FALSE;
   const gchar *widget_name = NULL;
   EContactField e_contact_field = 0;
   SoylentBrowser *browser = NULL;
   GladeXML *wtree = NULL;
-  const gchar *contents_new = NULL;
   EContact *e_contact = NULL;
   EContactAddress *addr = NULL;
   const gchar *context_str = NULL;
   guint fieldnum = 0;
 
+  g_return_val_if_fail (key != NULL, retval);
+  g_return_val_if_fail (user_data != NULL, retval);
+  /* FIXME: uncomment once SoylentBrowser is a GObject:
+  g_return_val_if_fail (SOYLENT_IS_BROWSER (user_data), retval);
+   */
+
+  browser = (SoylentBrowser*) user_data;
+  wtree = soylent_browser_get_widget_tree (browser);
+
   widget_name = (const gchar*) key;
   e_contact_field = *((EContactField*) value);
-  browser = (SoylentBrowser *) user_data;
-  wtree = soylent_browser_get_widget_tree (browser);
+
   context_str = widget_name + 5;
   e_contact = soylent_browser_get_selected_person_e_contact (browser);
   addr = e_contact_get (e_contact, e_contact_field);
 
   for (fieldnum = 0; fieldnum < MAIL_FIELDS_NUM; fieldnum++)
     {
-      GObject *widget_cur;
-      gchar *widget_name = g_strdup_printf ("%s_person_mail_%s_%s",
-                                            MAIL_WIDGET_TYPE_STRS[fieldnum],
-                                            context_str,
-                                            MAIL_FIELD_STRS[fieldnum]);
-
-      widget_cur = G_OBJECT (glade_xml_get_widget (wtree, widget_name));
-      g_free (widget_name);
+      GtkWidget *widget_cur = NULL;
+      gchar *widget_name = NULL;
+      const gchar *contents_new = NULL;
 
+      widget_name = g_strdup_printf ("%s_person_mail_%s_%s",
+                                     MAIL_WIDGET_TYPE_STRS[fieldnum],
+                                     context_str, MAIL_FIELD_STRS[fieldnum]);
+      widget_cur = glade_xml_get_widget (wtree, widget_name);
       if (GTK_IS_ENTRY (widget_cur))
         {
           contents_new = gtk_entry_get_text (GTK_ENTRY (widget_cur));
         }
       else if (GTK_IS_TEXT_VIEW (widget_cur))
         {
+          GtkTextBuffer *buf = NULL;
           GtkTextIter start;
           GtkTextIter end;
 
-          widget_cur =
-              G_OBJECT (gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget_cur)));
-          gtk_text_buffer_get_bounds (GTK_TEXT_BUFFER (widget_cur), &start,
-                                      &end);
-          contents_new = gtk_text_buffer_get_text (GTK_TEXT_BUFFER (widget_cur),
-                                                   &start, &end, FALSE);
-        }
-      else
-        {
-          g_warning ("got neither a GtkEntry nor GtkTextView for an address"
-                      "field widget");
-          return TRUE;
+          buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget_cur));
+          gtk_text_buffer_get_bounds (buf, &start, &end);
+          contents_new = gtk_text_buffer_get_text (buf, &start, &end, FALSE);
         }
 
       e_contact_address_set_field (addr, MAIL_FIELD_STRS[fieldnum],
                                    contents_new);
+      g_free (widget_name);
     }
 
   if (e_contact_address_is_empty (addr))
@@ -2024,7 +2037,9 @@
                   - E_CONTACT_FIRST_ADDRESS_ID + E_CONTACT_FIRST_LABEL_ID,
                  (gpointer) e_contact_address_to_label (addr));
 
-  return TRUE;
+  retval = TRUE;
+
+  return retval;
 }
 
 /* FIXME: if this changes it to "" (deletes it), find matching EmpathyContact in
@@ -2056,59 +2071,67 @@
                                              const gchar* widget_name,
                                              const gchar* value)
 {
+  gboolean retval = FALSE;
   GladeXML *wtree = NULL;
   GtkLabel *label = NULL;
   const gchar *label_text = NULL;
   gchar *proto_name_lc = NULL;
   gchar *field_name = NULL;
   EContactField field = 0;
-  guint widget_num = 0;
   gchar *context_str = NULL;
   gchar *label_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 (e_contact != NULL, retval);
+  g_return_val_if_fail (E_IS_CONTACT (e_contact), retval);
+  g_return_val_if_fail (widget_name, retval);
+
   wtree = soylent_browser_get_widget_tree (browser);
 
   context_str = (gchar*) CONTEXT_STRS[CONTEXT_WORK];
   label_str = g_strstr_len (widget_name, strlen (widget_name), "person");
   label_str = g_strdup_printf ("label_%s", label_str);
   label = GTK_LABEL (glade_xml_get_widget (wtree, label_str)); 
-  if (label == NULL)
-  {
-    g_warning ("invalid widget (trying to save contents): %s", widget_name);
-    return TRUE;
-  }
-
   label_text = gtk_label_get_text (label);
   proto_name_lc = g_ascii_strdown (label_text, strlen (label_text));
   field_name = g_strdup_printf ("im_%s", proto_name_lc);
   field = e_contact_field_id (field_name);
 
   context_str = (gchar*) CONTEXT_STRS[CONTEXT_WORK];
-
   if (!g_strstr_len (widget_name, strlen (widget_name), context_str))
     {
       context_str = (gchar*) CONTEXT_STRS[CONTEXT_HOME];
       
-      if (!g_strstr_len(widget_name, strlen (widget_name), context_str))
+      if (!g_strstr_len (widget_name, strlen (widget_name), context_str))
         {
           g_warning ("could not find a valid context in the widget name");
-          return TRUE;
+          context_str = NULL;
         }
     }
 
-  context_str = g_ascii_strup (context_str, -1);
+  if (context_str)
+    {
+      guint widget_num = 0;
+
+      /* FIXME: more error checking */
+      widget_num = g_ascii_strtoull (g_strrstr (label_str, "_") + 1, NULL, 10);
+
+      context_str = g_ascii_strup (context_str, -1);
+      e_vcard_attr_list_set_value (e_contact, field, context_str, widget_num,
+                                   value);
 
-  /* FIXME: more error checking */
-  widget_num = g_ascii_strtoull (g_strrstr (label_str, "_") + 1, NULL, 10);
+      retval = TRUE;
+    }
 
-  e_vcard_attr_list_set_value (e_contact, field, context_str, widget_num,
-                               value);
   g_free (label_str);
   g_free (proto_name_lc);
   g_free (field_name);
   g_free (context_str);
 
-  return TRUE;
+  return retval;
 }
 
 /* Save an email address for the person being edited
@@ -2196,27 +2219,36 @@
   return retval;
 }
 
-/* Update the entire Person View UI section */
-static void
+/* Update the entire Person View UI section
+ *
+ * Return TRUE for success, FALSE for any failure. */
+static gboolean
 soylent_browser_person_view_update (SoylentBrowser *browser,
                                     SoylentPerson *person)
 {
-  if (person)
-    {
-      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);
-    }
-  else
-    {
-      g_warning ("invalid person\n");
-      /* TODO: set everything as empty */
-    }
+  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);
+   */
+
+  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;
+
+  return retval;
 }
 
 /* Update the Detail Add section widgets based on broader, related widgets



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