* glib/dbus-gmain.c: Make the previous commit compile.
* python/_dbus.py, python/matchrules.py: Patch from Ole Andre
Ravnaas <ole.andre.ravnaas@collabora.co.uk> to allow you to
specify sender_keyword="foo", path_keyword="bar" when adding
a signal listener, so that you can bind to signals generically
but still do something useful in your callback.
* python/dbus_bindings.pyx: Demarshal the byte type as unsigned
chars so that they're not cast to chars and made negative. Thanks
to Jakub Stachowski for reporting this and testing the fix.
+2006-02-16 Robert McQueen <robot101@debian.org>
+
+ * glib/dbus-gmain.c: Make the previous commit compile.
+
+ * python/_dbus.py, python/matchrules.py: Patch from Ole Andre
+ Ravnaas <ole.andre.ravnaas@collabora.co.uk> to allow you to
+ specify sender_keyword="foo", path_keyword="bar" when adding
+ a signal listener, so that you can bind to signals generically
+ but still do something useful in your callback.
+
+ * python/dbus_bindings.pyx: Demarshal the byte type as unsigned
+ chars so that they're not cast to chars and made negative. Thanks
+ to Jakub Stachowski for reporting this and testing the fix.
+
2006-02-15 John (J5) Palmieri <johnp@redhat.com>
* dbus/dbus-glib.h:
/**
* Returns a connection to the given address.
- *
+ *
* (Internally, calls dbus_connection_open() then calls
* dbus_connection_setup_with_g_main() on the result.)
*
- * @param address address of the connection to open
+ * @param address address of the connection to open
* @param error address where an error can be returned.
* @returns a DBusConnection
*/
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
_dbus_g_value_types_init ();
-
+
dbus_error_init (&derror);
- connection = dbus_connection_open (socket, &derror);
+ connection = dbus_connection_open (address, &derror);
if (connection == NULL)
{
dbus_set_g_error (error, &derror);
args_dict[num] = value
except ValueError:
raise TypeError("Invalid arg index %s"%snum)
+ elif key in ("sender_keyword", "path_keyword"):
+ pass
else:
raise TypeError("Unknown keyword %s"%(key))
match_rule = SignalMatchRule(signal_name, dbus_interface, named_service, path)
+ for kw in ("sender_keyword", "path_keyword"):
+ if kw in keywords:
+ setattr(match_rule, kw, keywords[kw])
+ else:
+ setattr(match_rule, kw, None)
+
if args_dict:
match_rule.add_args_match(args_dict)
return dbus_message_iter_get_element_type(self.iter)
def get_byte(self):
- cdef char c_val
- dbus_message_iter_get_basic(self.iter, <char *>&c_val)
+ cdef unsigned char c_val
+ dbus_message_iter_get_basic(self.iter, <unsigned char *>&c_val)
return c_val
-
+
def get_boolean(self):
cdef dbus_bool_t c_val
dbus_message_iter_get_basic(self.iter, <dbus_bool_t *>&c_val)
self.args = args
def execute(self, message, args=None):
- #optimization just in case we already extarcted the args
+ keywords = {}
+
+ if self.sender_keyword is not None:
+ keywords[self.sender_keyword] = message.get_sender()
+ if self.path_keyword is not None:
+ keywords[self.path_keyword] = message.get_path()
+
+ # optimization just in case we already extracted the args
if not args:
args = message.get_args_list()
for handler in self.handler_functions:
if getattr(handler, "_dbus_pass_message", False):
- keywords = {"dbus_message": message}
- handler(*args, **keywords)
- else:
+ keywords["dbus_message"] = message
+
+ if len(keywords) == 0:
handler(*args)
+ else:
+ handler(*args, **keywords)
def add_handler(self, handler):
self.handler_functions.append(handler)