aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2023-11-30 12:23:00 +0100
committerSimon Zeni <simon@bl4ckb0ne.ca>2023-12-04 15:39:04 +0000
commit78836298efc6930db482806fadc605de72897ccc (patch)
tree5e29e71c7ff006c14272ce1145879e53303c36a4
parent4ed8df9ab2fd540113a171940f990874063641ad (diff)
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.
-rw-r--r--types/wlr_cursor.c11
1 files changed, 11 insertions, 0 deletions
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 <stdlib.h>
#include <wayland-server-core.h>
#include <wlr/types/wlr_cursor.h>
+#include <wlr/types/wlr_fractional_scale_v1.h>
#include <wlr/types/wlr_input_device.h>
#include <wlr/types/wlr_output_layout.h>
#include <wlr/types/wlr_output.h>
@@ -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;