mirror of
https://github.com/brl/mutter.git
synced 2024-11-25 09:30:45 -05:00
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
This commit is contained in:
parent
e84f694668
commit
130807a308
@ -96,6 +96,10 @@ static gboolean bell_is_audible = TRUE;
|
|||||||
static gboolean gnome_accessibility = FALSE;
|
static gboolean gnome_accessibility = FALSE;
|
||||||
static gboolean gnome_animations = TRUE;
|
static gboolean gnome_animations = TRUE;
|
||||||
static char *cursor_theme = NULL;
|
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 cursor_size = 24;
|
||||||
static int draggable_border_width = 10;
|
static int draggable_border_width = 10;
|
||||||
static int drag_threshold;
|
static int drag_threshold;
|
||||||
@ -123,6 +127,9 @@ static gboolean update_binding (MetaKeyPref *binding,
|
|||||||
static gboolean update_key_binding (const char *key,
|
static gboolean update_key_binding (const char *key,
|
||||||
gchar **strokes);
|
gchar **strokes);
|
||||||
|
|
||||||
|
static void wayland_settings_changed (GSettings *settings,
|
||||||
|
gchar *key,
|
||||||
|
gpointer data);
|
||||||
static void settings_changed (GSettings *settings,
|
static void settings_changed (GSettings *settings,
|
||||||
gchar *key,
|
gchar *key,
|
||||||
gpointer data);
|
gpointer data);
|
||||||
@ -134,9 +141,10 @@ static void shell_shows_app_menu_changed (GtkSettings *settings,
|
|||||||
GParamSpec *pspec,
|
GParamSpec *pspec,
|
||||||
gpointer data);
|
gpointer data);
|
||||||
|
|
||||||
static void update_cursor_size (GtkSettings *settings,
|
static void update_cursor_size_from_gtk (GtkSettings *settings,
|
||||||
GParamSpec *pspec,
|
GParamSpec *pspec,
|
||||||
gpointer data);
|
gpointer data);
|
||||||
|
static void update_cursor_size (void);
|
||||||
|
|
||||||
static void queue_changed (MetaPreference pref);
|
static void queue_changed (MetaPreference pref);
|
||||||
|
|
||||||
@ -963,14 +971,18 @@ meta_prefs_init (void)
|
|||||||
G_CALLBACK (settings_changed), NULL);
|
G_CALLBACK (settings_changed), NULL);
|
||||||
g_signal_connect (settings, "changed::" KEY_GNOME_CURSOR_THEME,
|
g_signal_connect (settings, "changed::" KEY_GNOME_CURSOR_THEME,
|
||||||
G_CALLBACK (settings_changed), NULL);
|
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_hash_table_insert (settings_schemas, g_strdup (SCHEMA_INTERFACE), settings);
|
||||||
|
|
||||||
g_signal_connect (gtk_settings_get_default (),
|
g_signal_connect (gtk_settings_get_default (),
|
||||||
"notify::gtk-shell-shows-app-menu",
|
"notify::gtk-shell-shows-app-menu",
|
||||||
G_CALLBACK (shell_shows_app_menu_changed), NULL);
|
G_CALLBACK (shell_shows_app_menu_changed), NULL);
|
||||||
|
|
||||||
|
if (!meta_is_wayland_compositor ())
|
||||||
g_signal_connect (gtk_settings_get_default (), "notify::gtk-cursor-theme-size",
|
g_signal_connect (gtk_settings_get_default (), "notify::gtk-cursor-theme-size",
|
||||||
G_CALLBACK (update_cursor_size), NULL);
|
G_CALLBACK (update_cursor_size_from_gtk), NULL);
|
||||||
|
|
||||||
settings = g_settings_new (SCHEMA_INPUT_SOURCES);
|
settings = g_settings_new (SCHEMA_INPUT_SOURCES);
|
||||||
g_signal_connect (settings, "changed::" KEY_XKB_OPTIONS,
|
g_signal_connect (settings, "changed::" KEY_XKB_OPTIONS,
|
||||||
@ -992,7 +1004,7 @@ meta_prefs_init (void)
|
|||||||
handle_preference_init_string_array ();
|
handle_preference_init_string_array ();
|
||||||
handle_preference_init_int ();
|
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);
|
shell_shows_app_menu_changed (gtk_settings_get_default (), NULL, NULL);
|
||||||
|
|
||||||
init_bindings ();
|
init_bindings ();
|
||||||
@ -1133,6 +1145,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
|
static void
|
||||||
settings_changed (GSettings *settings,
|
settings_changed (GSettings *settings,
|
||||||
gchar *key,
|
gchar *key,
|
||||||
@ -1216,7 +1242,27 @@ shell_shows_app_menu_changed (GtkSettings *settings,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
update_cursor_size (GtkSettings *settings,
|
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,
|
GParamSpec *pspec,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user