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
This commit is contained in:
Jonas Ådahl 2015-09-16 15:49:46 +08:00
parent b18542f2b6
commit e84f694668
3 changed files with 21 additions and 3 deletions

View File

@ -53,6 +53,7 @@
#include "meta-wayland-private.h" #include "meta-wayland-private.h"
#include "meta-wayland-surface.h" #include "meta-wayland-surface.h"
#include "meta-wayland-buffer.h" #include "meta-wayland-buffer.h"
#include "meta-xwayland.h"
#include "meta-cursor.h" #include "meta-cursor.h"
#include "meta-cursor-tracker-private.h" #include "meta-cursor-tracker-private.h"
#include "meta-surface-actor-wayland.h" #include "meta-surface-actor-wayland.h"
@ -819,9 +820,12 @@ cursor_sprite_prepare_at (MetaCursorSprite *cursor_sprite,
MetaScreen *screen = display->screen; MetaScreen *screen = display->screen;
const MetaMonitorInfo *monitor; const MetaMonitorInfo *monitor;
monitor = meta_screen_get_monitor_for_point (screen, x, y); if (!meta_xwayland_is_xwayland_surface (surface))
meta_cursor_sprite_set_texture_scale (cursor_sprite, {
(float)monitor->scale / surface->scale); 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); meta_wayland_surface_update_outputs (surface);
} }

View File

@ -174,6 +174,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 static gboolean
try_display (int display, try_display (int display,
char **filename_out, char **filename_out,

View File

@ -28,8 +28,13 @@
#include <glib.h> #include <glib.h>
#include <meta/types.h> #include <meta/types.h>
#include "wayland/meta-wayland-types.h"
void void
meta_xwayland_handle_wl_surface_id (MetaWindow *window, meta_xwayland_handle_wl_surface_id (MetaWindow *window,
guint32 surface_id); guint32 surface_id);
gboolean
meta_xwayland_is_xwayland_surface (MetaWaylandSurface *surface);
#endif /* META_XWAYLAND_H */ #endif /* META_XWAYLAND_H */