diff options
| -rw-r--r-- | ChangeLog | 13 | ||||
| -rw-r--r-- | glib/dbus-gmain.c | 8 | ||||
| -rw-r--r-- | python/_dbus.py | 4 | ||||
| -rw-r--r-- | python/proxies.py | 82 | 
4 files changed, 59 insertions, 48 deletions
@@ -1,3 +1,16 @@ +2005-05-16  John (J5) Palmieri  <johnp@redhat.com> + +	* glib/dbus-gmain.c (io_handler_dispatch): fix deadlock +	when using recursive g_main_loops + +	* python/_dbus.py (class Bus): add the ProxyObjectClass +	alias for ProxyObject to make it easier for the Twisted  +	networking framework to integrate dbus. + +	* python/proxies.py (class ProxyObject): add the ProxyMethodClass +	alias for ProxyMethod to make it easier for the Twisted  +	networking framework to integrate dbus.  +  2005-05-11  Ross Burton  <ross@burtonini.com>  	* glib/dbus-glib-tool.c: Add --prefix argument. diff --git a/glib/dbus-gmain.c b/glib/dbus-gmain.c index b824f01d..046c493c 100644 --- a/glib/dbus-gmain.c +++ b/glib/dbus-gmain.c @@ -240,13 +240,7 @@ io_handler_dispatch (GIOChannel   *source,    handler = NULL;    if (connection) -    { -      /* Dispatch messages */ -      while (dbus_connection_dispatch (connection) == DBUS_DISPATCH_DATA_REMAINS) -        ; -       -      dbus_connection_unref (connection); -    } +    dbus_connection_unref (connection);    return TRUE;  } diff --git a/python/_dbus.py b/python/_dbus.py index d9c81235..ca7a156a 100644 --- a/python/_dbus.py +++ b/python/_dbus.py @@ -70,6 +70,8 @@ class Bus:      """bus_type=[Bus.TYPE_SESSION | Bus.TYPE_SYSTEM | Bus.TYPE_STARTER]      """ +    ProxyObjectClass = ProxyObject +      START_REPLY_SUCCESS = dbus_bindings.DBUS_START_REPLY_SUCCESS      START_REPLY_ALREADY_RUNNING = dbus_bindings.DBUS_START_REPLY_ALREADY_RUNNING  @@ -106,7 +108,7 @@ class Bus:      def get_object(self, named_service, object_path):          """Get a proxy object to call over the bus""" -        return ProxyObject(self, named_service, object_path) +        return self.ProxyObjectClass(self, named_service, object_path)      def add_signal_receiver(self, handler_function, signal_name=None, dbus_interface=None, named_service=None, path=None):          match_rule = self._get_match_rule(signal_name, dbus_interface, named_service, path) diff --git a/python/proxies.py b/python/proxies.py index cbd49200..688dd8ab 100644 --- a/python/proxies.py +++ b/python/proxies.py @@ -1,45 +1,5 @@  import dbus_bindings -class ProxyObject: -    """A proxy to the remote Object. - -    A ProxyObject is provided by the Bus. ProxyObjects -    have member functions, and can be called like normal Python objects. -    """ -    def __init__(self, bus, named_service, object_path): -        self._bus          = bus -        self._named_service = named_service -        self._object_path  = object_path - -    def connect_to_signal(self, signal_name, handler_function, dbus_interface=None): -        self._bus.add_signal_receiver(handler_function, -                                      signal_name=signal_name, -                                      dbus_interface=dbus_interface, -                                      named_service=self._named_service, -                                      path=self._object_path) - - - -    def __getattr__(self, member, **keywords): -        if member == '__call__': -            return object.__call__ -        elif member.startswith('__') and member.endswith('__'): -            raise AttributeError(member) -        else: -            iface = None -            if (keywords.has_key('dbus_interface')): -                iface = keywords['dbus_interface'] - -            return ProxyMethod(self._bus.get_connection(), -                                self._named_service, -                                self._object_path, iface, member) - -    def __repr__(self): -        return '<ProxyObject wrapping %s %s %s at %x>'%(  -            self._bus, self._named_service, self._object_path , id(self)) -    __str__ = __repr__ - -  class ProxyMethod:      """A proxy Method. @@ -95,3 +55,45 @@ class ProxyMethod:          else:              return args_tuple + +class ProxyObject: +    """A proxy to the remote Object. + +    A ProxyObject is provided by the Bus. ProxyObjects +    have member functions, and can be called like normal Python objects. +    """ +    ProxyMethodClass = ProxyMethod + +    def __init__(self, bus, named_service, object_path): +        self._bus          = bus +        self._named_service = named_service +        self._object_path  = object_path + +    def connect_to_signal(self, signal_name, handler_function, dbus_interface=None): +        self._bus.add_signal_receiver(handler_function, +                                      signal_name=signal_name, +                                      dbus_interface=dbus_interface, +                                      named_service=self._named_service, +                                      path=self._object_path) + + + +    def __getattr__(self, member, **keywords): +        if member == '__call__': +            return object.__call__ +        elif member.startswith('__') and member.endswith('__'): +            raise AttributeError(member) +        else: +            iface = None +            if (keywords.has_key('dbus_interface')): +                iface = keywords['dbus_interface'] + +            return self.ProxyMethodClass(self._bus.get_connection(), +                                self._named_service, +                                self._object_path, iface, member) + +    def __repr__(self): +        return '<ProxyObject wrapping %s %s %s at %x>'%(  +            self._bus, self._named_service, self._object_path , id(self)) +    __str__ = __repr__ +  | 
