[next] telepathy-glib: handle-channel-context: store handler_info as a GVariant

Guillaume Desmottes gdesmott at kemper.freedesktop.org
Mon Mar 3 02:03:24 PST 2014


Module: telepathy-glib
Branch: next
Commit: 9b107a15f7506de618e495b74c21a4a42365c6e7
URL:    http://cgit.freedesktop.org/telepathy/telepathy-glib/commit/?id=9b107a15f7506de618e495b74c21a4a42365c6e7

Author: Guillaume Desmottes <guillaume.desmottes at collabora.co.uk>
Date:   Fri Feb 28 13:31:12 2014 +0100

handle-channel-context: store handler_info as a GVariant

---

 telepathy-glib/base-client.c                     |    2 +-
 telepathy-glib/handle-channel-context-internal.h |    4 +--
 telepathy-glib/handle-channel-context.c          |   32 ++++++++++++----------
 3 files changed, 20 insertions(+), 18 deletions(-)

diff --git a/telepathy-glib/base-client.c b/telepathy-glib/base-client.c
index 8f61d70..5fa6e38 100644
--- a/telepathy-glib/base-client.c
+++ b/telepathy-glib/base-client.c
@@ -2142,7 +2142,7 @@ _tp_base_client_handle_channel (TpSvcClientHandler *iface,
     }
 
   ctx = _tp_handle_channel_context_new (account, connection, channel,
-      requests, user_action_time, handler_info, context);
+      requests, user_action_time, tp_asv_to_vardict (handler_info), context);
 
   account_features = dup_features_for_account (self, account);
   connection_features = dup_features_for_connection (self, connection);
diff --git a/telepathy-glib/handle-channel-context-internal.h b/telepathy-glib/handle-channel-context-internal.h
index a8024ee..954915e 100644
--- a/telepathy-glib/handle-channel-context-internal.h
+++ b/telepathy-glib/handle-channel-context-internal.h
@@ -49,7 +49,7 @@ struct _TpHandleChannelContext {
   /* array of reffed TpChannelRequest */
   GPtrArray *requests_satisfied;
   guint64 user_action_time;
-  GHashTable *handler_info;
+  GVariant *handler_info;
 };
 
 TpHandleChannelContext * _tp_handle_channel_context_new (
@@ -58,7 +58,7 @@ TpHandleChannelContext * _tp_handle_channel_context_new (
     TpChannel *channel,
     GPtrArray *requests_satisfied,
     guint64 user_action_time,
-    GHashTable *handler_info,
+    GVariant *handler_info,
     DBusGMethodInvocation *dbus_context);
 
 TpHandleChannelContextState _tp_handle_channel_context_get_state
diff --git a/telepathy-glib/handle-channel-context.c b/telepathy-glib/handle-channel-context.c
index 522f012..c7e9d23 100644
--- a/telepathy-glib/handle-channel-context.c
+++ b/telepathy-glib/handle-channel-context.c
@@ -152,11 +152,7 @@ tp_handle_channel_context_dispose (GObject *object)
       self->requests_satisfied = NULL;
     }
 
-  if (self->handler_info != NULL)
-    {
-      g_hash_table_unref (self->handler_info);
-      self->handler_info = NULL;
-    }
+  g_clear_pointer (&self->handler_info, g_variant_unref);
 
   if (self->priv->result != NULL)
     {
@@ -200,7 +196,7 @@ tp_handle_channel_context_get_property (GObject *object,
         break;
 
       case PROP_HANDLER_INFO:
-        g_value_set_boxed (value, self->handler_info);
+        g_value_set_variant (value, self->handler_info);
         break;
 
       default:
@@ -243,7 +239,7 @@ tp_handle_channel_context_set_property (GObject *object,
         break;
 
       case PROP_HANDLER_INFO:
-        self->handler_info = g_value_dup_boxed (value);
+        self->handler_info = g_value_dup_variant (value);
         break;
 
       case PROP_DBUS_CONTEXT:
@@ -385,17 +381,16 @@ tp_handle_channel_context_class_init (
   /**
    * TpHandleChannelContext:handler-info:
    *
-   * A #GHashTable where the keys are string and values are GValue instances.
-   * It represents the Handler_info hash table that has been passed to
-   * HandleChannels.
+   * A #G_VARIANT_TYPE_VARDICT #GVariant containing the Handler_Info
+   * dictionnary that has been passed to HandleChannels.
    *
    * This property can't be %NULL.
    *
    * Since: 0.11.6
    */
-  param_spec = g_param_spec_boxed ("handler-info", "Handler info",
+  param_spec = g_param_spec_variant ("handler-info", "Handler info",
       "The Handler that has been passed to ObserveChannels",
-      TP_HASH_TYPE_STRING_VARIANT_MAP,
+      G_VARIANT_TYPE_VARDICT, NULL,
       G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
   g_object_class_install_property (object_class, PROP_HANDLER_INFO,
       param_spec);
@@ -438,10 +433,14 @@ TpHandleChannelContext * _tp_handle_channel_context_new (
     TpChannel *channel,
     GPtrArray *requests_satisfied,
     guint64 user_action_time,
-    GHashTable *handler_info,
+    GVariant *handler_info,
     DBusGMethodInvocation *dbus_context)
 {
-  return g_object_new (TP_TYPE_HANDLE_CHANNELS_CONTEXT,
+  TpHandleChannelContext *ctx;
+
+  g_variant_ref_sink (handler_info);
+
+  ctx = g_object_new (TP_TYPE_HANDLE_CHANNELS_CONTEXT,
       "account", account,
       "connection", connection,
       "channel", channel,
@@ -450,6 +449,9 @@ TpHandleChannelContext * _tp_handle_channel_context_new (
       "handler-info", handler_info,
       "dbus-context", dbus_context,
       NULL);
+
+  g_variant_unref (handler_info);
+  return ctx;
 }
 
 /**
@@ -689,7 +691,7 @@ GVariant *
 tp_handle_channel_context_dup_handler_info (TpHandleChannelContext *self)
 {
   g_return_val_if_fail (TP_IS_HANDLE_CHANNELS_CONTEXT (self), NULL);
-  return g_variant_ref_sink (tp_asv_to_vardict (self->handler_info));
+  return g_variant_ref (self->handler_info);
 }
 
 /**



More information about the telepathy-commits mailing list