cursor: update cursor image on scale change

This commit is contained in:
Consolatis 2023-01-26 01:21:43 +01:00 committed by Johan Malm
parent 58382260de
commit 4dc99e2f38
3 changed files with 25 additions and 7 deletions

View file

@ -106,6 +106,16 @@ enum lab_cursors cursor_get_from_edge(uint32_t resize_edges);
*/
void cursor_update_focus(struct server *server);
/**
* cursor_update_image - re-set the labwc cursor image
* @seat - seat
*
* This can be used to update the cursor image on output scale changes.
* If the current cursor image was not set by labwc but some client
* this is a no-op.
*/
void cursor_update_image(struct seat *seat);
void cursor_init(struct seat *seat);
void cursor_finish(struct seat *seat);

View file

@ -259,6 +259,17 @@ cursor_set(struct seat *seat, enum lab_cursors cursor)
seat->server_cursor = cursor;
}
void
cursor_update_image(struct seat *seat)
{
enum lab_cursors cursor = seat->server_cursor;
if (cursor == LAB_CURSOR_CLIENT) {
return;
}
wlr_xcursor_manager_set_cursor_image(
seat->xcursor_manager, cursor_names[cursor], seat->cursor);
}
bool
input_inhibit_blocks_surface(struct seat *seat, struct wl_resource *resource)
{

View file

@ -264,15 +264,11 @@ output_update_for_layout_change(struct server *server)
/*
* "Move" each wlr_output_cursor (in per-output coordinates) to
* align with the seat cursor. Set a default cursor image so
* that the cursor isn't invisible on new outputs.
*
* TODO: remember the most recent cursor image (see cursor.c)
* and set that rather than XCURSOR_DEFAULT
* align with the seat cursor. Re-set the cursor image so that
* the cursor isn't invisible on new outputs.
*/
wlr_cursor_move(server->seat.cursor, NULL, 0, 0);
wlr_xcursor_manager_set_cursor_image(server->seat.xcursor_manager,
XCURSOR_DEFAULT, server->seat.cursor);
cursor_update_image(&server->seat);
}
static void
@ -364,6 +360,7 @@ handle_output_manager_apply(struct wl_listener *listener, void *data)
/* Re-set cursor image in case scale changed */
cursor_update_focus(server);
cursor_update_image(&server->seat);
}
/*