From 78836298efc6930db482806fadc605de72897ccc Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Thu, 30 Nov 2023 12:23:00 +0100 Subject: [PATCH] cursor: send surface scale events wlr_cursor is responsible for sending enter/leave events, but doesn't send fractional-scale-v1 and wl_surface.preferred_buffer_scale events. This is not an easy thing to do from a compositor, so let's just do it in wlr_cursor itself. --- types/wlr_cursor.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/types/wlr_cursor.c b/types/wlr_cursor.c index 40528f13..cf8f7359 100644 --- a/types/wlr_cursor.c +++ b/types/wlr_cursor.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -544,6 +545,16 @@ static void cursor_output_cursor_update(struct wlr_cursor_output_cursor *output_ } else { wlr_surface_send_leave(surface, output); } + + float scale = 1; + struct wlr_surface_output *surface_output; + wl_list_for_each(surface_output, &surface->current_outputs, link) { + if (surface_output->output->scale > scale) { + scale = surface_output->output->scale; + } + } + wlr_fractional_scale_v1_notify_scale(surface, scale); + wlr_surface_set_preferred_buffer_scale(surface, ceil(scale)); } else if (cur->state->xcursor_name != NULL) { struct wlr_xcursor_manager *manager = cur->state->xcursor_manager; const char *name = cur->state->xcursor_name;