diff options
Diffstat (limited to 'libdecor/src/desktop-settings.c')
| -rw-r--r-- | libdecor/src/desktop-settings.c | 213 |
1 files changed, 0 insertions, 213 deletions
diff --git a/libdecor/src/desktop-settings.c b/libdecor/src/desktop-settings.c deleted file mode 100644 index 28067ac3e..000000000 --- a/libdecor/src/desktop-settings.c +++ /dev/null @@ -1,213 +0,0 @@ -/* - * Copyright © 2019 Christian Rauch - * Copyright © 2024 Colin Kinloch - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial - * portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#include "desktop-settings.h" -#include <stdlib.h> -#include <string.h> -#include <stdbool.h> -#include <stdint.h> -#include "config.h" - -static bool -get_cursor_settings_from_env(char **theme, int *size) -{ - char *env_xtheme; - char *env_xsize; - - env_xtheme = getenv("XCURSOR_THEME"); - if (env_xtheme != NULL) - *theme = strdup(env_xtheme); - - env_xsize = getenv("XCURSOR_SIZE"); - if (env_xsize != NULL) - *size = atoi(env_xsize); - - return env_xtheme != NULL && env_xsize != NULL; -} - -#ifdef HAS_DBUS -#include <dbus/dbus.h> - -static DBusMessage * -get_setting_sync(DBusConnection *const connection, - const char *key, - const char *value) -{ - DBusError error; - dbus_bool_t success; - DBusMessage *message; - DBusMessage *reply; - - message = dbus_message_new_method_call( - "org.freedesktop.portal.Desktop", - "/org/freedesktop/portal/desktop", - "org.freedesktop.portal.Settings", - "Read"); - - success = dbus_message_append_args(message, - DBUS_TYPE_STRING, &key, - DBUS_TYPE_STRING, &value, - DBUS_TYPE_INVALID); - - if (!success) - return NULL; - - dbus_error_init(&error); - - reply = dbus_connection_send_with_reply_and_block( - connection, - message, - DBUS_TIMEOUT_USE_DEFAULT, - &error); - - dbus_message_unref(message); - - if (dbus_error_is_set(&error)) { - dbus_error_free(&error); - return NULL; - } - - dbus_error_free(&error); - return reply; -} - -static bool -parse_type(DBusMessage *const reply, - const int type, - void *value) -{ - DBusMessageIter iter[3]; - - dbus_message_iter_init(reply, &iter[0]); - if (dbus_message_iter_get_arg_type(&iter[0]) != DBUS_TYPE_VARIANT) - return false; - - dbus_message_iter_recurse(&iter[0], &iter[1]); - if (dbus_message_iter_get_arg_type(&iter[1]) != DBUS_TYPE_VARIANT) - return false; - - dbus_message_iter_recurse(&iter[1], &iter[2]); - if (dbus_message_iter_get_arg_type(&iter[2]) != type) - return false; - - dbus_message_iter_get_basic(&iter[2], value); - - return true; -} - -bool -libdecor_get_cursor_settings(char **theme, int *size) -{ - static const char name[] = "org.gnome.desktop.interface"; - static const char key_theme[] = "cursor-theme"; - static const char key_size[] = "cursor-size"; - - DBusError error; - DBusConnection *connection; - DBusMessage *reply; - const char *value_theme = NULL; - - dbus_error_init(&error); - - connection = dbus_bus_get(DBUS_BUS_SESSION, &error); - - if (dbus_error_is_set(&error)) - goto fallback; - - reply = get_setting_sync(connection, name, key_theme); - if (!reply) - goto fallback; - - if (!parse_type(reply, DBUS_TYPE_STRING, &value_theme)) { - dbus_message_unref(reply); - goto fallback; - } - - *theme = strdup(value_theme); - - dbus_message_unref(reply); - - reply = get_setting_sync(connection, name, key_size); - if (!reply) - goto fallback; - - if (!parse_type(reply, DBUS_TYPE_INT32, size)) { - dbus_message_unref(reply); - goto fallback; - } - - dbus_message_unref(reply); - - return true; - -fallback: - return get_cursor_settings_from_env(theme, size); -} - -enum libdecor_color_scheme -libdecor_get_color_scheme() -{ - static const char name[] = "org.freedesktop.appearance"; - static const char key_color_scheme[] = "color-scheme"; - uint32_t color = 0; - - DBusError error; - DBusConnection *connection; - DBusMessage *reply; - - dbus_error_init(&error); - - connection = dbus_bus_get(DBUS_BUS_SESSION, &error); - - if (dbus_error_is_set(&error)) - return 0; - - reply = get_setting_sync(connection, name, key_color_scheme); - if (!reply) - return 0; - - if (!parse_type(reply, DBUS_TYPE_UINT32, &color)) { - dbus_message_unref(reply); - return 0; - } - - dbus_message_unref(reply); - - return color; -} -#else -bool -libdecor_get_cursor_settings(char **theme, int *size) -{ - return get_cursor_settings_from_env(theme, size); -} - -uint32_t -libdecor_get_color_scheme() -{ - return LIBDECOR_COLOR_SCHEME_DEFAULT; -} -#endif |
