]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Do not handle signals of irrelevant object paths
authorJürg Billeter <j@bitron.ch>
Wed, 4 Feb 2009 20:31:24 +0000 (20:31 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Wed, 4 Feb 2009 20:31:24 +0000 (20:31 +0000)
2009-02-04  Jürg Billeter  <j@bitron.ch>

* gobject/valadbusclientmodule.vala:

Do not handle signals of irrelevant object paths

svn path=/trunk/; revision=2419

ChangeLog
gobject/valadbusclientmodule.vala

index 730f93ad9fddfdef971c30e875acbe164056c505..fd3c44da8d1c75a39c6bc7722f0e95427a5cef71 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-02-04  Jürg Billeter  <j@bitron.ch>
+
+       * gobject/valadbusclientmodule.vala:
+
+       Do not handle signals of irrelevant object paths
+
 2009-02-04  Jürg Billeter  <j@bitron.ch>
 
        * vapi/glib-2.0.vapi:
index 0272f75bc228c836004c33560884a24eabb704e0..d5153724276c76d6d3d25bfcf2cc385a780fe59b 100644 (file)
@@ -982,7 +982,30 @@ internal class Vala.DBusClientModule : DBusModule {
 
                var filter_block = new CCodeBlock ();
 
-               handle_signals (iface, filter_block);
+               // only handle signals concering the object path
+               var cdecl = new CCodeDeclaration ("char*");
+               cdecl.add_declarator (new CCodeVariableDeclarator ("path"));
+               filter_block.add_statement (cdecl);
+
+               var get_path = new CCodeFunctionCall (new CCodeIdentifier ("g_object_get"));
+               get_path.add_argument (new CCodeIdentifier ("user_data"));
+               get_path.add_argument (new CCodeConstant ("\"path\""));
+               get_path.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("path")));
+               get_path.add_argument (new CCodeConstant ("NULL"));
+               filter_block.add_statement (new CCodeExpressionStatement (get_path));
+
+               var ccheck = new CCodeFunctionCall (new CCodeIdentifier ("dbus_message_has_path"));
+               ccheck.add_argument (new CCodeIdentifier ("message"));
+               ccheck.add_argument (new CCodeIdentifier ("path"));
+
+               var object_filter_block = new CCodeBlock ();
+               filter_block.add_statement (new CCodeIfStatement (ccheck, object_filter_block));
+
+               handle_signals (iface, object_filter_block);
+
+               var free_path = new CCodeFunctionCall (new CCodeIdentifier ("g_free"));
+               free_path.add_argument (new CCodeIdentifier ("path"));
+               filter_block.add_statement (new CCodeExpressionStatement (free_path));
 
                filter_block.add_statement (new CCodeReturnStatement (new CCodeIdentifier ("DBUS_HANDLER_RESULT_NOT_YET_HANDLED")));