mirror of
https://github.com/brl/mutter.git
synced 2024-11-25 17:40:40 -05:00
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:
parent
b18542f2b6
commit
e84f694668
@ -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;
|
||||||
|
|
||||||
|
if (!meta_xwayland_is_xwayland_surface (surface))
|
||||||
|
{
|
||||||
monitor = meta_screen_get_monitor_for_point (screen, x, y);
|
monitor = meta_screen_get_monitor_for_point (screen, x, y);
|
||||||
meta_cursor_sprite_set_texture_scale (cursor_sprite,
|
meta_cursor_sprite_set_texture_scale (cursor_sprite,
|
||||||
(float)monitor->scale / surface->scale);
|
(float)monitor->scale / surface->scale);
|
||||||
|
}
|
||||||
meta_wayland_surface_update_outputs (surface);
|
meta_wayland_surface_update_outputs (surface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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,
|
||||||
|
@ -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 */
|
||||||
|
Loading…
Reference in New Issue
Block a user