[compiz] [PATCH] dbus list option as array - was: DBus setting
options broken
Mike Dransfield
mike at blueroot.co.uk
Fri Jan 26 12:22:56 PST 2007
David Reveman wrote:
>> I think the correct solution would be to allow
>> the dbus plugin to receive arrays and convert them
>> to lists internally. I can have a look at doing this
>> if you do not mind.
>>
>
> yes, list options should be sent as arrays. i definitely don't mind,
> please look at it.
>
Here is a small patch that means lists options have
to be sent as arrays, it should make it easier for
language bindings.
To send an array using dbus-send, use this syntax
array:string:'foo','bar'
It should work with all the datatypes, I haven't tested
it but I see no reason why it shouldn't.
Zero length arrays are fine so you can unset a list option
by using this as the value
array:string:
This patch is for the set option only, I couldn't see any
other place where an array needs to be converted to a list.
Regards
Mike
-------------- next part --------------
>From 532b92bd64956afdf3f9ebc304f375785afd247e Mon Sep 17 00:00:00 2001
From: mike at blueroot.co.uk <mike at localhost.(none)>
Date: Fri, 26 Jan 2007 20:09:26 +0000
Subject: [PATCH] Allow set method to receive lists as dbus arrays
---
plugins/dbus.c | 16 ++++++++++------
1 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/plugins/dbus.c b/plugins/dbus.c
index d20506e..0346e6b 100644
--- a/plugins/dbus.c
+++ b/plugins/dbus.c
@@ -454,7 +454,7 @@ dbusHandleSetOptionMessage (DBusConnection *connection,
{
if (strcmp (option->name, path[2]) == 0)
{
- DBusMessageIter iter;
+ DBusMessageIter iter, aiter;
CompOptionValue value, tmpValue;
Bool status = FALSE;
@@ -462,11 +462,15 @@ dbusHandleSetOptionMessage (DBusConnection *connection,
if (option->type == CompOptionTypeList)
{
- if (dbus_message_iter_init (message, &iter))
+ if (dbus_message_iter_init (message, &iter) &&
+ dbus_message_iter_get_arg_type (&iter) == DBUS_TYPE_ARRAY)
{
+ dbus_message_iter_recurse (&iter, &aiter);
+
do
{
- if (dbusGetOptionValue (&iter, option->value.list.type,
+ if (dbusGetOptionValue (&aiter,
+ option->value.list.type,
&tmpValue))
{
CompOptionValue *v;
@@ -480,10 +484,10 @@ dbusHandleSetOptionMessage (DBusConnection *connection,
value.list.value = v;
}
}
- } while (dbus_message_iter_next (&iter));
- }
+ } while (dbus_message_iter_next (&aiter));
- status = TRUE;
+ status = TRUE;
+ }
}
else if (dbus_message_iter_init (message, &iter))
{
--
1.4.4.3
More information about the compiz
mailing list