diff --git a/src/video/x11/SDL_x11modes.c b/src/video/x11/SDL_x11modes.c index f2170c4ba6..53d3076896 100644 --- a/src/video/x11/SDL_x11modes.c +++ b/src/video/x11/SDL_x11modes.c @@ -46,126 +46,6 @@ */ // #define XRANDR_DISABLED_BY_DEFAULT -#ifdef SDL_USE_LIBDBUS - -#define SCALE_FACTOR_NODE "org.freedesktop.portal.Desktop" -#define SCALE_FACTOR_PATH "/org/freedesktop/portal/desktop" -#define SCALE_FACTOR_INTERFACE "org.freedesktop.portal.Settings" -#define SCALE_FACTOR_NAMESPACE "org.gnome.desktop.interface" -#define SCALE_FACTOR_SIGNAL_NAME "SettingChanged" -#define SCALE_FACTOR_KEY "text-scaling-factor" - -static DBusMessage *ReadDBusSetting(SDL_DBusContext *dbus, const char *key) -{ - static const char *iface = SCALE_FACTOR_NAMESPACE; - - DBusMessage *reply = NULL; - DBusMessage *msg = dbus->message_new_method_call(SCALE_FACTOR_NODE, - SCALE_FACTOR_PATH, - SCALE_FACTOR_INTERFACE, - "Read"); // Method - - if (msg) { - if (dbus->message_append_args(msg, DBUS_TYPE_STRING, &iface, DBUS_TYPE_STRING, &key, DBUS_TYPE_INVALID)) { - reply = dbus->connection_send_with_reply_and_block(dbus->session_conn, msg, DBUS_TIMEOUT_USE_DEFAULT, NULL); - } - dbus->message_unref(msg); - } - - return reply; -} - -static bool ParseDBusReply(SDL_DBusContext *dbus, DBusMessage *reply, 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; -} - -static void UpdateDisplayContentScale(float scale) -{ - SDL_VideoDevice *viddevice = SDL_GetVideoDevice(); - int i; - - if (viddevice) { - for (i = 0; i < viddevice->num_displays; ++i) { - SDL_SetDisplayContentScale(viddevice->displays[i], scale); - } - } -} - -static DBusHandlerResult DBus_MessageFilter(DBusConnection *conn, DBusMessage *msg, void *data) -{ - SDL_DBusContext *dbus = SDL_DBus_GetContext(); - double *scale_factor = (double *)data; - double new_scale = 0.0; - - if (dbus->message_is_signal(msg, SCALE_FACTOR_INTERFACE, SCALE_FACTOR_SIGNAL_NAME)) { - DBusMessageIter signal_iter, variant_iter; - const char *namespace, *key; - - dbus->message_iter_init(msg, &signal_iter); - // Check if the parameters are what we expect - if (dbus->message_iter_get_arg_type(&signal_iter) != DBUS_TYPE_STRING) { - goto not_our_signal; - } - dbus->message_iter_get_basic(&signal_iter, &namespace); - if (SDL_strcmp(SCALE_FACTOR_NAMESPACE, namespace) != 0) { - goto not_our_signal; - } - if (!dbus->message_iter_next(&signal_iter)) { - goto not_our_signal; - } - if (dbus->message_iter_get_arg_type(&signal_iter) != DBUS_TYPE_STRING) { - goto not_our_signal; - } - dbus->message_iter_get_basic(&signal_iter, &key); - if (SDL_strcmp(SCALE_FACTOR_KEY, key) != 0) { - goto not_our_signal; - } - if (!dbus->message_iter_next(&signal_iter)) { - goto not_our_signal; - } - if (dbus->message_iter_get_arg_type(&signal_iter) != DBUS_TYPE_VARIANT) { - goto not_our_signal; - } - dbus->message_iter_recurse(&signal_iter, &variant_iter); - if (dbus->message_iter_get_arg_type(&variant_iter) != DBUS_TYPE_DOUBLE) { - goto not_our_signal; - } - dbus->message_iter_get_basic(&variant_iter, &new_scale); - - if (new_scale > 0.0) { - *scale_factor = new_scale; - UpdateDisplayContentScale((float)new_scale); - } - - return DBUS_HANDLER_RESULT_HANDLED; - } - -not_our_signal: - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; -} - -#endif - static float GetGlobalContentScale(SDL_VideoDevice *_this) { static double scale_factor = 0.0; @@ -181,30 +61,6 @@ static float GetGlobalContentScale(SDL_VideoDevice *_this) } } - // Next try the settings portal via D-Bus for the text scaling factor (aka 'Global Scale' on KDE) -#ifdef SDL_USE_LIBDBUS - if (scale_factor <= 0.0) - { - DBusMessage *reply; - SDL_DBusContext *dbus = SDL_DBus_GetContext(); - - if (dbus) { - if ((reply = ReadDBusSetting(dbus, SCALE_FACTOR_KEY))) { - if (ParseDBusReply(dbus, reply, DBUS_TYPE_DOUBLE, &scale_factor)) { - // If the setting exists, register a listener for scale changes. - dbus->bus_add_match(dbus->session_conn, - "type='signal', interface='"SCALE_FACTOR_INTERFACE"'," - "member='"SCALE_FACTOR_SIGNAL_NAME"', arg0='"SCALE_FACTOR_NAMESPACE"'," - "arg1='"SCALE_FACTOR_KEY"'", NULL); - dbus->connection_add_filter(dbus->session_conn, &DBus_MessageFilter, &scale_factor, NULL); - dbus->connection_flush(dbus->session_conn); - } - dbus->message_unref(reply); - } - } - } -#endif - // If that failed, try "Xft.dpi" from the XResourcesDatabase... if (scale_factor <= 0.0) {