mutter/wayland-Dont-scale-XWayland-pointer-cursor-sprites.patch

80 lines
2.8 KiB
Diff

From 505fcdc37c18ed2ed6b45173683a5d6e5e2e33fd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
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