diff options
Diffstat (limited to 'python/decorators.py')
| -rw-r--r-- | python/decorators.py | 17 | 
1 files changed, 11 insertions, 6 deletions
diff --git a/python/decorators.py b/python/decorators.py index 3973f3e4..e4cc0249 100644 --- a/python/decorators.py +++ b/python/decorators.py @@ -39,20 +39,25 @@ def signal(dbus_interface, signature=None):      _util._validate_interface_or_name(dbus_interface)      def decorator(func):          def emit_signal(self, *args, **keywords): -            func(self, *args, **keywords)            +            func(self, *args, **keywords)              message = dbus_bindings.Signal(self._object_path, dbus_interface, func.__name__)              iter = message.get_iter(True) -            -            for arg in args: -                iter.append(arg) -       + +            if emit_signal._dbus_signature: +                signature = tuple(dbus_bindings.Signature(emit_signal._dbus_signature)) +                for (arg, sig) in zip(args, signature): +                    iter.append_strict(arg, sig) +            else: +                for arg in args: +                    iter.append(arg) +              self._connection.send(message)          args = inspect.getargspec(func)[0]          args.pop(0)          if signature: -            sig = tuple(dbus_bindings.Signature(func._dbus_signature)) +            sig = tuple(dbus_bindings.Signature(signature))              if len(sig) > len(args):                  raise ValueError, 'signal signature is longer than the number of arguments provided'  | 
