[telepathy-mission-control/master] McdAccount: value_is_same: add support for object path and GStrv values

Simon McVittie simon.mcvittie at collabora.co.uk
Wed Jun 10 03:37:57 PDT 2009


---
 src/mcd-account.c |   39 ++++++++++++++++++++++++++++++++++++---
 1 files changed, 36 insertions(+), 3 deletions(-)

diff --git a/src/mcd-account.c b/src/mcd-account.c
index ced53ed..e371495 100644
--- a/src/mcd-account.c
+++ b/src/mcd-account.c
@@ -217,9 +217,42 @@ value_is_same (const GValue *val1, const GValue *val2)
         return g_value_get_double (val1) == g_value_get_double (val2);
 
     default:
-        g_warning ("%s: unexpected type %s",
-                   G_STRFUNC, G_VALUE_TYPE_NAME (val1));
-        return FALSE;
+        if (G_VALUE_TYPE (val1) == DBUS_TYPE_G_OBJECT_PATH)
+        {
+            return !tp_strdiff (g_value_get_boxed (val1),
+                                g_value_get_boxed (val2));
+        }
+        else if (G_VALUE_TYPE (val1) == G_TYPE_STRV)
+        {
+            gchar **left = g_value_get_boxed (val1);
+            gchar **right = g_value_get_boxed (val2);
+
+            if (left == NULL || right == NULL ||
+                *left == NULL || *right == NULL)
+            {
+                return ((left == NULL || *left == NULL) &&
+                        (right == NULL || *right == NULL));
+            }
+
+            while (*left != NULL || *right != NULL)
+            {
+                if (tp_strdiff (*left, *right))
+                {
+                    return FALSE;
+                }
+
+                left++;
+                right++;
+            }
+
+            return TRUE;
+        }
+        else
+        {
+            g_warning ("%s: unexpected type %s",
+                       G_STRFUNC, G_VALUE_TYPE_NAME (val1));
+            return FALSE;
+        }
     }
 }
 
-- 
1.5.6.5




More information about the telepathy-commits mailing list