[vinagre] use TpSimpleHandler rather than our own Handler implementation



commit 88b5b686a921a66e56efc5415242ba992244ba8d
Author: Guillaume Desmottes <guillaume desmottes collabora co uk>
Date:   Thu May 27 15:36:51 2010 +0200

    use TpSimpleHandler rather than our own Handler implementation

 vinagre/vinagre-tubes-manager.c |  119 ++++++++++++++++-----------------------
 vinagre/vinagre-tubes-manager.h |    6 +-
 2 files changed, 51 insertions(+), 74 deletions(-)
---
diff --git a/vinagre/vinagre-tubes-manager.c b/vinagre/vinagre-tubes-manager.c
index 98df6a5..48b6fde 100644
--- a/vinagre/vinagre-tubes-manager.c
+++ b/vinagre/vinagre-tubes-manager.c
@@ -27,6 +27,7 @@
 #include <dbus/dbus-glib.h>
 #include <dbus/dbus-glib-bindings.h>
 
+#include <telepathy-glib/simple-handler.h>
 #include <telepathy-glib/enums.h>
 #include <telepathy-glib/dbus.h>
 #include <telepathy-glib/interfaces.h>
@@ -42,7 +43,7 @@
 #define BUS_NAME TP_CLIENT_BUS_NAME_BASE CLIENT_NAME
 #define OBJECT_PATH TP_CLIENT_OBJECT_PATH_BASE CLIENT_NAME
 
-G_DEFINE_TYPE (VinagreTubesManager, vinagre_tubes_manager, TP_TYPE_HANDLER);
+G_DEFINE_TYPE (VinagreTubesManager, vinagre_tubes_manager, G_TYPE_OBJECT);
 
 #define VINAGRE_TUBES_MANAGER_GET_PRIVATE(obj)\
     (G_TYPE_INSTANCE_GET_PRIVATE ((obj), VINAGRE_TYPE_TUBES_MANAGER,\
@@ -52,6 +53,7 @@ typedef struct _VinagreTubesManagerPrivate VinagreTubesManagerPrivate;
 
 struct _VinagreTubesManagerPrivate
 {
+  TpBaseClient *handler;
   VinagreWindow *window;
   GSList *tubes_handler;
 };
@@ -133,22 +135,29 @@ vinagre_tubes_manager_disconnected_cb (VinagreTubeHandler *htube,
   g_object_unref (htube);
 }
 
-static gboolean
-vinagre_tubes_manager_handle_channels (VinagreHandler         *self,
-                                       TpAccount         *account,
-                                       TpConnection      *connection,
-                                       TpChannel        **channels,
-                                       TpChannelRequest **requests,
-                                       guint64            user_action_time,
-                                       GHashTable        *handler_info)
+static void
+vinagre_tubes_manager_handle_channels (TpSimpleHandler *handler,
+    TpAccount *account,
+    TpConnection *connection,
+    GList *channels,
+    GList *requests_satisfied,
+    gint64 user_action_time,
+    TpHandleChannelsContext *context,
+    gpointer user_data)
 {
+  VinagreTubesManager *self = user_data;
   VinagreTubesManagerPrivate *priv = VINAGRE_TUBES_MANAGER_GET_PRIVATE (self);
-  TpChannel *channel, **ptr;
+  GList *l;
 
-  for (ptr = channels; channel = *ptr; ptr++)
+  for (l = channels; l != NULL; l = g_list_next (l))
     {
+      TpChannel *channel = l->data;
       VinagreTubeHandler *htube;
 
+      if (tp_strdiff (tp_channel_get_channel_type (channel),
+            TP_IFACE_CHANNEL_TYPE_STREAM_TUBE))
+        continue;
+
       htube = vinagre_tube_handler_new (priv->window, channel);
       priv->tubes_handler = g_slist_prepend (priv->tubes_handler, htube);
 
@@ -156,42 +165,7 @@ vinagre_tubes_manager_handle_channels (VinagreHandler         *self,
           (vinagre_tubes_manager_disconnected_cb), self);
     }
 
-  return TRUE;
-}
-
-static void
-vinagre_tubes_manager_register_tube_handler (GObject *object)
-{
-  TpDBusDaemon *bus;
-  guint result;
-  GError *error = NULL;
-
-  bus = tp_dbus_daemon_dup (&error);
-  if (error != NULL)
-    {
-      vinagre_debug_message (DEBUG_TUBE, "Failed to connect to bus: %s",
-          error ? error->message : "No error given");
-      g_clear_error (&error);
-      goto OUT;
-    }
-
-  if (!tp_dbus_daemon_request_name (bus, BUS_NAME, FALSE, &error))
-    {
-      vinagre_debug_message (DEBUG_TUBE, "Failed to request name: %s",
-          error ? error->message : "No error given");
-      g_clear_error (&error);
-      goto OUT;
-    }
-
-  vinagre_debug_message (DEBUG_TUBE,
-      "Creating tube handler %s object_path:%s\n",
-      BUS_NAME, OBJECT_PATH);
-  dbus_g_connection_register_g_object (
-      tp_proxy_get_dbus_connection (TP_PROXY (bus)),
-      OBJECT_PATH, G_OBJECT (object));
-
-OUT:
-  g_object_unref (bus);
+  tp_handle_channels_context_accept (context);
 }
 
 static void
@@ -199,8 +173,13 @@ vinagre_tubes_manager_constructed (GObject *object)
 {
   VinagreTubesManagerPrivate *priv = VINAGRE_TUBES_MANAGER_GET_PRIVATE
       (object);
+  GError *error = NULL;
 
-  vinagre_tubes_manager_register_tube_handler (object);
+  if (!tp_base_client_register (priv->handler, &error))
+    {
+      vinagre_debug_message (DEBUG_TUBE, "Failed to register handler: %s",
+          error->message);
+    }
 }
 
 static void
@@ -227,36 +206,36 @@ vinagre_tubes_manager_class_init (VinagreTubesManagerClass *klass)
 }
 
 static void
-vinagre_tubes_manager_init (VinagreTubesManager *object)
+vinagre_tubes_manager_init (VinagreTubesManager *self)
 {
+  VinagreTubesManagerPrivate *priv = VINAGRE_TUBES_MANAGER_GET_PRIVATE (self);
+  TpDBusDaemon *dbus;
+
+  dbus = tp_dbus_daemon_dup (NULL);
+
+  priv->handler = tp_simple_handler_new (dbus, FALSE, FALSE, "Vinagre", FALSE,
+      vinagre_tubes_manager_handle_channels, self, NULL);
+
+  g_object_unref (dbus);
+
+  tp_base_client_take_handler_filter (priv->handler, tp_asv_new (
+        TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
+          TP_IFACE_CHANNEL_TYPE_STREAM_TUBE,
+        TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT,
+          TP_HANDLE_TYPE_CONTACT,
+        TP_PROP_CHANNEL_REQUESTED, G_TYPE_BOOLEAN,
+          FALSE,
+        TP_PROP_CHANNEL_TYPE_STREAM_TUBE_SERVICE, G_TYPE_STRING,
+          SERVICE,
+        NULL));
 }
 
 VinagreTubesManager *
 vinagre_tubes_manager_new (VinagreWindow *vinagre_window)
 {
   VinagreTubesManager *self;
-  GPtrArray *filter = g_ptr_array_new ();
-  GHashTable *map = tp_asv_new (
-      TP_IFACE_CHANNEL ".ChannelType", G_TYPE_STRING,
-              TP_IFACE_CHANNEL_TYPE_STREAM_TUBE,
-      TP_IFACE_CHANNEL ".TargetHandleType", G_TYPE_UINT,
-              TP_HANDLE_TYPE_CONTACT,
-      TP_IFACE_CHANNEL ".Requested", G_TYPE_BOOLEAN,
-              FALSE,
-      TP_IFACE_CHANNEL_TYPE_STREAM_TUBE ".Service", G_TYPE_STRING,
-              SERVICE,
-      NULL);
-  g_ptr_array_add (filter, map);
 
-  self = g_object_new (VINAGRE_TYPE_TUBES_MANAGER,
-      "channel-filter", filter,
-      "bypass-approval", FALSE,
-      "handle-channels-cb", vinagre_tubes_manager_handle_channels,
+  return g_object_new (VINAGRE_TYPE_TUBES_MANAGER,
       "vinagre-window", vinagre_window,
       NULL);
-
-  g_hash_table_destroy (map);
-  g_ptr_array_free (filter, TRUE);
-
-  return self;
 }
diff --git a/vinagre/vinagre-tubes-manager.h b/vinagre/vinagre-tubes-manager.h
index 32ecdcf..574023f 100644
--- a/vinagre/vinagre-tubes-manager.h
+++ b/vinagre/vinagre-tubes-manager.h
@@ -27,8 +27,6 @@
 
 #include <glib-object.h>
 
-#include "handler.h"
-
 #include "vinagre-window.h"
 
 G_BEGIN_DECLS
@@ -51,12 +49,12 @@ typedef struct _VinagreTubesManagerClass VinagreTubesManagerClass;
 
 struct _VinagreTubesManager
 {
-  VinagreHandler parent_instance;
+  GObject parent_instance;
 };
 
 struct _VinagreTubesManagerClass
 {
-  VinagreHandlerClass parent_class;
+  GObjectClass parent_class;
 };
 
 GType vinagre_tubes_manager_get_type (void) G_GNUC_CONST;



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