From: Jürg Billeter Date: Wed, 4 Feb 2009 20:31:24 +0000 (+0000) Subject: Do not handle signals of irrelevant object paths X-Git-Tag: 0.5.7~51 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=341e96865e270deedce344d2da8eb13240fee9ee;p=thirdparty%2Fvala.git Do not handle signals of irrelevant object paths 2009-02-04 Jürg Billeter * gobject/valadbusclientmodule.vala: Do not handle signals of irrelevant object paths svn path=/trunk/; revision=2419 --- diff --git a/ChangeLog b/ChangeLog index 730f93ad9..fd3c44da8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2009-02-04 Jürg Billeter + + * gobject/valadbusclientmodule.vala: + + Do not handle signals of irrelevant object paths + 2009-02-04 Jürg Billeter * vapi/glib-2.0.vapi: diff --git a/gobject/valadbusclientmodule.vala b/gobject/valadbusclientmodule.vala index 0272f75bc..d51537242 100644 --- a/gobject/valadbusclientmodule.vala +++ b/gobject/valadbusclientmodule.vala @@ -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")));