SDL_DBus_AppendDictWithKeyValue: allows several key/value for other PRs

This commit is contained in:
Sylvain
2023-06-22 10:48:12 +02:00
committed by Sylvain Becker
parent 8aee6908bb
commit 4339113072

View File

@@ -367,14 +367,19 @@ void SDL_DBus_ScreensaverTickle(void)
} }
} }
static SDL_bool SDL_DBus_AppendDictWithKeyValue(DBusMessageIter *iterInit, const char *key, const char *value) static SDL_bool SDL_DBus_AppendDictWithKeysValues(DBusMessageIter *iterInit, const char **keys, const char **values, int count)
{ {
DBusMessageIter iterDict, iterEntry, iterValue; DBusMessageIter iterDict;
if (!dbus.message_iter_open_container(iterInit, DBUS_TYPE_ARRAY, "{sv}", &iterDict)) { if (!dbus.message_iter_open_container(iterInit, DBUS_TYPE_ARRAY, "{sv}", &iterDict)) {
goto failed; goto failed;
} }
for (int i = 0; i < count; i++) {
DBusMessageIter iterEntry, iterValue;
const char *key = keys[i];
const char *value = values[i];
if (!dbus.message_iter_open_container(&iterDict, DBUS_TYPE_DICT_ENTRY, NULL, &iterEntry)) { if (!dbus.message_iter_open_container(&iterDict, DBUS_TYPE_DICT_ENTRY, NULL, &iterEntry)) {
goto failed; goto failed;
} }
@@ -391,7 +396,12 @@ static SDL_bool SDL_DBus_AppendDictWithKeyValue(DBusMessageIter *iterInit, const
goto failed; goto failed;
} }
if (!dbus.message_iter_close_container(&iterEntry, &iterValue) || !dbus.message_iter_close_container(&iterDict, &iterEntry) || !dbus.message_iter_close_container(iterInit, &iterDict)) { if (!dbus.message_iter_close_container(&iterEntry, &iterValue) || !dbus.message_iter_close_container(&iterDict, &iterEntry)) {
goto failed;
}
}
if (!dbus.message_iter_close_container(iterInit, &iterDict)) {
goto failed; goto failed;
} }
@@ -447,10 +457,18 @@ SDL_bool SDL_DBus_ScreensaverInhibit(SDL_bool inhibit)
} }
dbus.message_iter_init_append(msg, &iterInit); dbus.message_iter_init_append(msg, &iterInit);
if (!SDL_DBus_AppendDictWithKeyValue(&iterInit, key, reason)) {
/* a{sv} */
{
const char *keys[1];
const char *values[1];
keys[0] = key;
values[0] = reason;
if (!SDL_DBus_AppendDictWithKeysValues(&iterInit, keys, values, 1)) {
dbus.message_unref(msg); dbus.message_unref(msg);
return SDL_FALSE; return SDL_FALSE;
} }
}
if (SDL_DBus_CallWithBasicReply(dbus.session_conn, msg, DBUS_TYPE_OBJECT_PATH, &reply)) { if (SDL_DBus_CallWithBasicReply(dbus.session_conn, msg, DBUS_TYPE_OBJECT_PATH, &reply)) {
inhibit_handle = SDL_strdup(reply); inhibit_handle = SDL_strdup(reply);