]> git.0d.be Git - empathy.git/commitdiff
Add the filters not in the Client file to a second Handler
authorSjoerd Simons <sjoerd.simons@collabora.co.uk>
Sat, 29 Aug 2009 16:13:04 +0000 (17:13 +0100)
committerSjoerd Simons <sjoerd.simons@collabora.co.uk>
Sun, 30 Aug 2009 16:28:46 +0000 (17:28 +0100)
A Dispatcher isn't guaranteed to ask the Handlers D-Bus interface for the
filter after launching it. So have our main handler match what is defined in
the client file and add an extra head which contains the complete list

src/empathy.c

index f7017bd960e3f126accea76683c8cc47a7e95699..3d4b3853b2ee656df593b853fc2672dd5be3d477 100644 (file)
@@ -585,14 +585,28 @@ setup_dispatcher (void)
     { TP_IFACE_CHANNEL_TYPE_ROOM_LIST, TP_HANDLE_TYPE_NONE },
   };
   GStrv capabilities = { NULL };
+  GHashTable *asv;
   int i;
 
+  /* Setup the basic Client.Handler that matches our client filter */
   filters = g_ptr_array_new ();
+  asv = tp_asv_new (
+        TP_IFACE_CHANNEL ".ChannelType", G_TYPE_STRING,
+           TP_IFACE_CHANNEL_TYPE_TEXT,
+        TP_IFACE_CHANNEL ".TargetHandleType", G_TYPE_INT,
+            TP_HANDLE_TYPE_CONTACT,
+        NULL);
+  g_ptr_array_add (filters, asv);
+
+  d = empathy_dispatcher_new (PACKAGE_NAME, filters, NULL);
 
+  g_ptr_array_foreach (filters, (GFunc) g_hash_table_destroy, NULL);
+  g_ptr_array_free (filters, TRUE);
+
+  /* Setup the an extended Client.Handler that matches everything we can do */
+  filters = g_ptr_array_new ();
   for (i = 0 ; i < G_N_ELEMENTS (types); i++)
     {
-      GHashTable *asv;
-
       asv = tp_asv_new (
         TP_IFACE_CHANNEL ".ChannelType", G_TYPE_STRING, types[i].channeltype,
         TP_IFACE_CHANNEL ".TargetHandleType", G_TYPE_INT, types[i].handletype,
@@ -601,7 +615,8 @@ setup_dispatcher (void)
       g_ptr_array_add (filters, asv);
     }
 
-  d = empathy_dispatcher_new (PACKAGE_NAME, filters, capabilities);
+  empathy_dispatcher_add_handler (d, PACKAGE_NAME"MoreThenMeetsTheEye",
+    filters, capabilities);
 
   g_ptr_array_foreach (filters, (GFunc) g_hash_table_destroy, NULL);
   g_ptr_array_free (filters, TRUE);