[telepathy-gabble/master] Add gabble_capability_set_remove, gabble_capability_set_exclude

Simon McVittie simon.mcvittie at collabora.co.uk
Mon Aug 24 08:48:22 PDT 2009


---
 src/capabilities.c |   41 +++++++++++++++++++++++++++++++++++++++++
 src/capabilities.h |    4 ++++
 2 files changed, 45 insertions(+), 0 deletions(-)

diff --git a/src/capabilities.c b/src/capabilities.c
index 8583abb..a4bd6fd 100644
--- a/src/capabilities.c
+++ b/src/capabilities.c
@@ -439,6 +439,30 @@ gabble_capability_set_update (GabbleCapabilitySet *target,
   tp_handle_set_update (target->handles, tp_handle_set_peek (source->handles));
 }
 
+static void
+remove_from_set (TpHandleSet *unused G_GNUC_UNUSED,
+    TpHandle handle,
+    gpointer handles)
+{
+  tp_handle_set_remove (handles, handle);
+}
+
+void
+gabble_capability_set_exclude (GabbleCapabilitySet *caps,
+    const GabbleCapabilitySet *removed)
+{
+  g_return_if_fail (caps != NULL);
+  g_return_if_fail (removed != NULL);
+
+  if (caps == removed)
+    {
+      gabble_capability_set_clear (caps);
+      return;
+    }
+
+  tp_handle_set_foreach (removed->handles, remove_from_set, caps->handles);
+}
+
 void
 gabble_capability_set_add (GabbleCapabilitySet *caps,
     const gchar *cap)
@@ -454,6 +478,23 @@ gabble_capability_set_add (GabbleCapabilitySet *caps,
   tp_handle_unref (feature_handles, handle);
 }
 
+gboolean
+gabble_capability_set_remove (GabbleCapabilitySet *caps,
+    const gchar *cap)
+{
+  TpHandle handle;
+
+  g_return_val_if_fail (caps != NULL, FALSE);
+  g_return_val_if_fail (cap != NULL, FALSE);
+
+  handle = tp_handle_lookup (feature_handles, cap, NULL, NULL);
+
+  if (handle == 0)
+    return FALSE;
+
+  return tp_handle_set_remove (caps->handles, handle);
+}
+
 void
 gabble_capability_set_clear (GabbleCapabilitySet *caps)
 {
diff --git a/src/capabilities.h b/src/capabilities.h
index 344fc35..2f11e88 100644
--- a/src/capabilities.h
+++ b/src/capabilities.h
@@ -65,6 +65,10 @@ void gabble_capability_set_update (GabbleCapabilitySet *target,
     const GabbleCapabilitySet *source);
 void gabble_capability_set_add (GabbleCapabilitySet *caps,
     const gchar *cap);
+gboolean gabble_capability_set_remove (GabbleCapabilitySet *caps,
+    const gchar *cap);
+void gabble_capability_set_exclude (GabbleCapabilitySet *caps,
+    const GabbleCapabilitySet *removed);
 gboolean gabble_capability_set_has (const GabbleCapabilitySet *caps,
     const gchar *cap);
 gboolean gabble_capability_set_has_one (const GabbleCapabilitySet *caps,
-- 
1.5.6.5




More information about the telepathy-commits mailing list