summaryrefslogtreecommitdiffstats
path: root/src/dbus-common.c
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@nokia.com>2008-10-16 22:31:41 +0300
committerJohan Hedberg <johan.hedberg@nokia.com>2008-10-16 22:31:41 +0300
commit58f06324289d7d343a52a9104d02121cb8db1047 (patch)
tree04e7131c6f99cff95d1e0ef788ad62bff8a53173 /src/dbus-common.c
parentc0736ea762bfea95e98c8b9f118b4e5464f2159c (diff)
Add emit_array_property_changed()
Diffstat (limited to 'src/dbus-common.c')
-rw-r--r--src/dbus-common.c126
1 files changed, 59 insertions, 67 deletions
diff --git a/src/dbus-common.c b/src/dbus-common.c
index 89deccbf..b2edd4c1 100644
--- a/src/dbus-common.c
+++ b/src/dbus-common.c
@@ -235,64 +235,39 @@ int hcid_dbus_init(void)
return 0;
}
-static void dbus_message_iter_append_variant(DBusMessageIter *iter,
- int type, void *val)
+static void append_variant(DBusMessageIter *iter, int type, void *val)
{
DBusMessageIter value;
- DBusMessageIter array;
- char *sig;
-
- switch (type) {
- case DBUS_TYPE_STRING:
- sig = DBUS_TYPE_STRING_AS_STRING;
- break;
- case DBUS_TYPE_BYTE:
- sig = DBUS_TYPE_BYTE_AS_STRING;
- break;
- case DBUS_TYPE_INT16:
- sig = DBUS_TYPE_INT16_AS_STRING;
- break;
- case DBUS_TYPE_UINT16:
- sig = DBUS_TYPE_UINT16_AS_STRING;
- break;
- case DBUS_TYPE_INT32:
- sig = DBUS_TYPE_INT32_AS_STRING;
- break;
- case DBUS_TYPE_UINT32:
- sig = DBUS_TYPE_UINT32_AS_STRING;
- break;
- case DBUS_TYPE_BOOLEAN:
- sig = DBUS_TYPE_BOOLEAN_AS_STRING;
- break;
- case DBUS_TYPE_ARRAY:
- sig = DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING;
- break;
- case DBUS_TYPE_OBJECT_PATH:
- sig = DBUS_TYPE_OBJECT_PATH_AS_STRING;
- break;
- default:
- error("Could not append variant with type %d", type);
- return;
- }
+ char sig[2] = { type, '\0' };
dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT, sig, &value);
- if (type == DBUS_TYPE_ARRAY) {
- int i;
- const char ***str_array = val;
+ dbus_message_iter_append_basic(&value, type, val);
+
+ dbus_message_iter_close_container(iter, &value);
+}
- dbus_message_iter_open_container(&value, DBUS_TYPE_ARRAY,
- DBUS_TYPE_STRING_AS_STRING, &array);
+static void append_array_variant(DBusMessageIter *iter, int type, void *val)
+{
+ DBusMessageIter variant, array;
+ char type_sig[2] = { type, '\0' };
+ char array_sig[3] = { DBUS_TYPE_ARRAY, type, '\0' };
+ const char ***str_array = val;
+ int i;
- for (i = 0; (*str_array)[i]; i++)
- dbus_message_iter_append_basic(&array, DBUS_TYPE_STRING,
- &((*str_array)[i]));
+ dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT,
+ array_sig, &variant);
- dbus_message_iter_close_container(&value, &array);
- } else
- dbus_message_iter_append_basic(&value, type, val);
+ dbus_message_iter_open_container(&variant, DBUS_TYPE_ARRAY,
+ type_sig, &array);
- dbus_message_iter_close_container(iter, &value);
+ for (i = 0; (*str_array)[i]; i++)
+ dbus_message_iter_append_basic(&array, type,
+ &((*str_array)[i]));
+
+ dbus_message_iter_close_container(&variant, &array);
+
+ dbus_message_iter_close_container(iter, &variant);
}
void dict_append_entry(DBusMessageIter *dict,
@@ -311,7 +286,7 @@ void dict_append_entry(DBusMessageIter *dict,
dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &key);
- dbus_message_iter_append_variant(&entry, type, val);
+ append_variant(&entry, type, val);
dbus_message_iter_close_container(dict, &entry);
}
@@ -319,35 +294,50 @@ void dict_append_entry(DBusMessageIter *dict,
void dict_append_array(DBusMessageIter *dict, const char *key, int type,
void *val, int n_elements)
{
- DBusMessageIter entry, variant, array;
- char type_sig[2] = { type, '\0' };
- char array_sig[3] = { DBUS_TYPE_ARRAY, type, '\0' };
- const char ***str_array = val;
- int i;
+ DBusMessageIter entry;
dbus_message_iter_open_container(dict, DBUS_TYPE_DICT_ENTRY,
NULL, &entry);
dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &key);
- dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT,
- array_sig, &variant);
+ append_array_variant(&entry, type, val);
- dbus_message_iter_open_container(&variant, DBUS_TYPE_ARRAY,
- type_sig, &array);
+ dbus_message_iter_close_container(dict, &entry);
+}
- for (i = 0; (*str_array)[i]; i++)
- dbus_message_iter_append_basic(&array, type,
- &((*str_array)[i]));
+dbus_bool_t emit_property_changed(DBusConnection *conn,
+ const char *path,
+ const char *interface,
+ const char *name,
+ int type, void *value)
+{
+ DBusMessage *signal;
+ DBusMessageIter iter;
+ gboolean ret;
- dbus_message_iter_close_container(&variant, &array);
+ signal = dbus_message_new_signal(path, interface, "PropertyChanged");
- dbus_message_iter_close_container(&entry, &variant);
+ if (!signal) {
+ error("Unable to allocate new %s.PropertyChanged signal",
+ interface);
+ return FALSE;
+ }
- dbus_message_iter_close_container(dict, &entry);
+ dbus_message_iter_init_append(signal, &iter);
+
+ dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &name);
+
+ append_variant(&iter, type, value);
+
+ ret = dbus_connection_send(conn, signal, NULL);
+
+ dbus_message_unref(signal);
+
+ return ret;
}
-dbus_bool_t emit_property_changed(DBusConnection *conn,
+dbus_bool_t emit_array_property_changed(DBusConnection *conn,
const char *path,
const char *interface,
const char *name,
@@ -368,10 +358,12 @@ dbus_bool_t emit_property_changed(DBusConnection *conn,
dbus_message_iter_init_append(signal, &iter);
dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &name);
- dbus_message_iter_append_variant(&iter, type, value);
+
+ append_array_variant(&iter, type, value);
ret = dbus_connection_send(conn, signal, NULL);
dbus_message_unref(signal);
+
return ret;
}