Dominique Leuenberger
e7fc0d2ce9
1 OBS-URL: https://build.opensuse.org/request/show/336330 OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/mutter?expand=0&rev=184
140 lines
5.5 KiB
Diff
140 lines
5.5 KiB
Diff
From 4f1461b9c3fd57e092ced0e95775a6f952664acf Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
|
Date: Wed, 16 Sep 2015 15:47:31 +0800
|
|
Subject: [PATCH] wayland: Don't pre-multiply root cursor sizes with primary
|
|
monitor scale
|
|
|
|
We cannot use the XSETTINGS value for cursor theme size because
|
|
gnome-settings-daemon already multiplies it by the primary monitor's
|
|
scale.
|
|
|
|
https://bugzilla.gnome.org/show_bug.cgi?id=755099
|
|
---
|
|
src/core/prefs.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++--------
|
|
1 file changed, 55 insertions(+), 9 deletions(-)
|
|
|
|
diff --git a/src/core/prefs.c b/src/core/prefs.c
|
|
index 2da8da3..90ad108 100644
|
|
--- a/src/core/prefs.c
|
|
+++ b/src/core/prefs.c
|
|
@@ -96,6 +96,10 @@ static gboolean bell_is_audible = TRUE;
|
|
static gboolean gnome_accessibility = FALSE;
|
|
static gboolean gnome_animations = TRUE;
|
|
static char *cursor_theme = NULL;
|
|
+/* cursor_size will, when running as an X11 compositing window manager, be the
|
|
+ * actual cursor size, multiplied with the global window scaling factor. On
|
|
+ * Wayland, it will be the actual cursor size retrieved from gsettings.
|
|
+ */
|
|
static int cursor_size = 24;
|
|
static int draggable_border_width = 10;
|
|
static int drag_threshold;
|
|
@@ -123,6 +127,9 @@ static gboolean update_binding (MetaKeyPref *binding,
|
|
static gboolean update_key_binding (const char *key,
|
|
gchar **strokes);
|
|
|
|
+static void wayland_settings_changed (GSettings *settings,
|
|
+ gchar *key,
|
|
+ gpointer data);
|
|
static void settings_changed (GSettings *settings,
|
|
gchar *key,
|
|
gpointer data);
|
|
@@ -134,9 +141,10 @@ static void shell_shows_app_menu_changed (GtkSettings *settings,
|
|
GParamSpec *pspec,
|
|
gpointer data);
|
|
|
|
-static void update_cursor_size (GtkSettings *settings,
|
|
- GParamSpec *pspec,
|
|
- gpointer data);
|
|
+static void update_cursor_size_from_gtk (GtkSettings *settings,
|
|
+ GParamSpec *pspec,
|
|
+ gpointer data);
|
|
+static void update_cursor_size (void);
|
|
|
|
static void queue_changed (MetaPreference pref);
|
|
|
|
@@ -963,14 +971,18 @@ meta_prefs_init (void)
|
|
G_CALLBACK (settings_changed), NULL);
|
|
g_signal_connect (settings, "changed::" KEY_GNOME_CURSOR_THEME,
|
|
G_CALLBACK (settings_changed), NULL);
|
|
+ if (meta_is_wayland_compositor ())
|
|
+ g_signal_connect (settings, "changed::cursor-size",
|
|
+ G_CALLBACK (wayland_settings_changed), NULL);
|
|
g_hash_table_insert (settings_schemas, g_strdup (SCHEMA_INTERFACE), settings);
|
|
|
|
g_signal_connect (gtk_settings_get_default (),
|
|
"notify::gtk-shell-shows-app-menu",
|
|
G_CALLBACK (shell_shows_app_menu_changed), NULL);
|
|
|
|
- g_signal_connect (gtk_settings_get_default (), "notify::gtk-cursor-theme-size",
|
|
- G_CALLBACK (update_cursor_size), NULL);
|
|
+ if (!meta_is_wayland_compositor ())
|
|
+ g_signal_connect (gtk_settings_get_default (), "notify::gtk-cursor-theme-size",
|
|
+ G_CALLBACK (update_cursor_size_from_gtk), NULL);
|
|
|
|
settings = g_settings_new (SCHEMA_INPUT_SOURCES);
|
|
g_signal_connect (settings, "changed::" KEY_XKB_OPTIONS,
|
|
@@ -992,7 +1004,7 @@ meta_prefs_init (void)
|
|
handle_preference_init_string_array ();
|
|
handle_preference_init_int ();
|
|
|
|
- update_cursor_size (gtk_settings_get_default (), NULL, NULL);
|
|
+ update_cursor_size ();
|
|
shell_shows_app_menu_changed (gtk_settings_get_default (), NULL, NULL);
|
|
|
|
init_bindings ();
|
|
@@ -1134,6 +1146,20 @@ meta_prefs_override_preference_schema (const char *key, const char *schema)
|
|
|
|
|
|
static void
|
|
+wayland_settings_changed (GSettings *settings,
|
|
+ gchar *key,
|
|
+ gpointer data)
|
|
+{
|
|
+ GVariant *value = g_settings_get_value (settings, key);
|
|
+ const GVariantType *type = g_variant_get_type (value);
|
|
+
|
|
+ g_return_if_fail (g_variant_type_equal (type, G_VARIANT_TYPE_INT32));
|
|
+ g_return_if_fail (g_str_equal (key, "cursor-size"));
|
|
+
|
|
+ update_cursor_size ();
|
|
+}
|
|
+
|
|
+static void
|
|
settings_changed (GSettings *settings,
|
|
gchar *key,
|
|
gpointer data)
|
|
@@ -1216,9 +1242,29 @@ shell_shows_app_menu_changed (GtkSettings *settings,
|
|
}
|
|
|
|
static void
|
|
-update_cursor_size (GtkSettings *settings,
|
|
- GParamSpec *pspec,
|
|
- gpointer data)
|
|
+update_cursor_size (void)
|
|
+{
|
|
+ if (meta_is_wayland_compositor ())
|
|
+ {
|
|
+ /* When running as a Wayland compositor, since we size of the cursor
|
|
+ * depends on what output it is on, we cannot use the GTK+
|
|
+ * "gtk-cursor-theme-size" setting because it has already been multiplied
|
|
+ * by the primary monitor scale. So, instead get the non-premultiplied
|
|
+ * cursor size value directly from gsettings instead.
|
|
+ */
|
|
+ cursor_size =
|
|
+ g_settings_get_int (SETTINGS (SCHEMA_INTERFACE), "cursor-size");
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ update_cursor_size_from_gtk (gtk_settings_get_default (), NULL, NULL);
|
|
+ }
|
|
+}
|
|
+
|
|
+static void
|
|
+update_cursor_size_from_gtk (GtkSettings *settings,
|
|
+ GParamSpec *pspec,
|
|
+ gpointer data)
|
|
{
|
|
GdkScreen *screen = gdk_screen_get_default ();
|
|
GValue value = G_VALUE_INIT;
|
|
--
|
|
2.4.3
|