Hello community, here is the log from the commit of package mutter for openSUSE:Factory checked in at 2015-10-14 16:42:57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/mutter (Old) and /work/SRC/openSUSE:Factory/.mutter.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mutter" Changes: -------- --- /work/SRC/openSUSE:Factory/mutter/mutter.changes 2015-10-06 16:31:37.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.mutter.new/mutter.changes 2015-10-14 16:42:58.000000000 +0200 @@ -1,0 +2,7 @@ +Fri Oct 2 21:28:47 UTC 2015 - [email protected] + +- Add wayland-Dont-pre-multiply-root-cursor-sizes.patch and + wayland-Dont-scale-XWayland-pointer-cursor-sprites.patch: taken + from upstream git. Fixes for HiDPI under wayland (bgo#755099). + +------------------------------------------------------------------- New: ---- wayland-Dont-pre-multiply-root-cursor-sizes.patch wayland-Dont-scale-XWayland-pointer-cursor-sprites.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ mutter.spec ++++++ --- /var/tmp/diff_new_pack.Sqn7FZ/_old 2015-10-14 16:42:59.000000000 +0200 +++ /var/tmp/diff_new_pack.Sqn7FZ/_new 2015-10-14 16:42:59.000000000 +0200 @@ -30,6 +30,10 @@ Group: System/GUI/GNOME Url: http://www.gnome.org Source: http://download.gnome.org/sources/mutter/3.18/%{name}-%{version}.tar.xz +# PATCH-FIX-UPSTREAM wayland-Dont-pre-multiply-root-cursor-sizes.patch bgo#755099 [email protected] - Upstream patch for HiDPI in wayland +Patch0: wayland-Dont-pre-multiply-root-cursor-sizes.patch +# PATCH-FIX-UPSTREAM wayland-Dont-scale-XWayland-pointer-cursor-sprites.patch bgo#755099 [email protected] - Upstream patch for HiDPI in wayland +Patch1: wayland-Dont-scale-XWayland-pointer-cursor-sprites.patch BuildRequires: fdupes BuildRequires: gobject-introspection-devel >= 0.9.5 BuildRequires: intltool @@ -136,6 +140,8 @@ %prep %setup -q translation-update-upstream +%patch0 -p1 +%patch1 -p1 %build %configure \ ++++++ wayland-Dont-pre-multiply-root-cursor-sizes.patch ++++++ >From 4f1461b9c3fd57e092ced0e95775a6f952664acf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= <[email protected]> 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++++++ wayland-Dont-scale-XWayland-pointer-cursor-sprites.patch ++++++ >From 505fcdc37c18ed2ed6b45173683a5d6e5e2e33fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= <[email protected]> Date: Wed, 16 Sep 2015 15:49:46 +0800 Subject: [PATCH] wayland: Don't scale XWayland pointer cursor sprites We don't have any way of knowing what the intended size of a XWayland cursor is supposed to be, so lets do what we do with regular XWayland surfaces and don't scale them. The result is that cursor sprites of HiDPI aware X11 clients will show correctly, but non-aware clients may have tiny cursor sprites. https://bugzilla.gnome.org/show_bug.cgi?id=755099 --- src/wayland/meta-wayland-pointer.c | 10 +++++++--- src/wayland/meta-xwayland.c | 9 +++++++++ src/wayland/meta-xwayland.h | 5 +++++ 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/wayland/meta-wayland-pointer.c b/src/wayland/meta-wayland-pointer.c index 08172fb..82dd2c1 100644 --- a/src/wayland/meta-wayland-pointer.c +++ b/src/wayland/meta-wayland-pointer.c @@ -820,9 +820,13 @@ cursor_sprite_prepare_at (MetaCursorSprite *cursor_sprite, MetaScreen *screen = display->screen; const MetaMonitorInfo *monitor; - monitor = meta_screen_get_monitor_for_point (screen, x, y); - meta_cursor_sprite_set_texture_scale (cursor_sprite, - (float)monitor->scale / surface->scale); + + if (!meta_xwayland_is_xwayland_surface (surface)) + { + monitor = meta_screen_get_monitor_for_point (screen, x, y); + meta_cursor_sprite_set_texture_scale (cursor_sprite, + (float)monitor->scale / surface->scale); + } meta_wayland_surface_update_outputs (surface); } diff --git a/src/wayland/meta-xwayland.c b/src/wayland/meta-xwayland.c index 1e7cb34..3cfc69f 100644 --- a/src/wayland/meta-xwayland.c +++ b/src/wayland/meta-xwayland.c @@ -172,6 +172,15 @@ meta_xwayland_handle_wl_surface_id (MetaWindow *window, } } +gboolean +meta_xwayland_is_xwayland_surface (MetaWaylandSurface *surface) +{ + MetaWaylandCompositor *compositor = meta_wayland_compositor_get_default (); + MetaXWaylandManager *manager = &compositor->xwayland_manager; + + return wl_resource_get_client (surface->resource) == manager->client; +} + static gboolean try_display (int display, char **filename_out, diff --git a/src/wayland/meta-xwayland.h b/src/wayland/meta-xwayland.h index 5308f29..caaf510 100644 --- a/src/wayland/meta-xwayland.h +++ b/src/wayland/meta-xwayland.h @@ -28,8 +28,13 @@ #include <glib.h> #include <meta/types.h> +#include "wayland/meta-wayland-types.h" + void meta_xwayland_handle_wl_surface_id (MetaWindow *window, guint32 surface_id); +gboolean +meta_xwayland_is_xwayland_surface (MetaWaylandSurface *surface); + #endif /* META_XWAYLAND_H */ -- 2.4.3
