Reload cursor theme and size on reconfigure

Fixes: #1587
This commit is contained in:
Simon Long 2024-03-12 19:53:41 +00:00 committed by GitHub
parent 9e0846ea14
commit 1e1e90d0bb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 13 additions and 1 deletions

View file

@ -119,6 +119,7 @@ void cursor_update_focus(struct server *server);
void cursor_update_image(struct seat *seat); void cursor_update_image(struct seat *seat);
void cursor_init(struct seat *seat); void cursor_init(struct seat *seat);
void cursor_load(struct seat *seat);
void cursor_emulate_move_absolute(struct seat *seat, void cursor_emulate_move_absolute(struct seat *seat,
struct wlr_input_device *device, struct wlr_input_device *device,
double x, double y, uint32_t time_msec); double x, double y, uint32_t time_msec);

View file

@ -1253,12 +1253,15 @@ cursor_frame(struct wl_listener *listener, void *data)
} }
void void
cursor_init(struct seat *seat) cursor_load(struct seat *seat)
{ {
const char *xcursor_theme = getenv("XCURSOR_THEME"); const char *xcursor_theme = getenv("XCURSOR_THEME");
const char *xcursor_size = getenv("XCURSOR_SIZE"); const char *xcursor_size = getenv("XCURSOR_SIZE");
uint32_t size = xcursor_size ? atoi(xcursor_size) : 24; uint32_t size = xcursor_size ? atoi(xcursor_size) : 24;
if (seat->xcursor_manager) {
wlr_xcursor_manager_destroy(seat->xcursor_manager);
}
seat->xcursor_manager = wlr_xcursor_manager_create(xcursor_theme, size); seat->xcursor_manager = wlr_xcursor_manager_create(xcursor_theme, size);
wlr_xcursor_manager_load(seat->xcursor_manager, 1); wlr_xcursor_manager_load(seat->xcursor_manager, 1);
@ -1293,6 +1296,12 @@ cursor_init(struct seat *seat)
"Cursor theme is missing cursor names, using fallback"); "Cursor theme is missing cursor names, using fallback");
cursor_names = cursors_x11; cursor_names = cursors_x11;
} }
}
void
cursor_init(struct seat *seat)
{
cursor_load(seat);
/* Set the initial cursor image so the cursor is visible right away */ /* Set the initial cursor image so the cursor is visible right away */
cursor_set(seat, LAB_CURSOR_DEFAULT); cursor_set(seat, LAB_CURSOR_DEFAULT);

View file

@ -529,6 +529,7 @@ seat_init(struct server *server)
seat->input_method_relay = input_method_relay_create(seat); seat->input_method_relay = input_method_relay_create(seat);
seat->xcursor_manager = NULL;
seat->cursor = wlr_cursor_create(); seat->cursor = wlr_cursor_create();
if (!seat->cursor) { if (!seat->cursor) {
wlr_log(WLR_ERROR, "unable to create cursor"); wlr_log(WLR_ERROR, "unable to create cursor");
@ -571,6 +572,7 @@ seat_reconfigure(struct server *server)
{ {
struct seat *seat = &server->seat; struct seat *seat = &server->seat;
struct input *input; struct input *input;
cursor_load(seat);
wl_list_for_each(input, &seat->inputs, link) { wl_list_for_each(input, &seat->inputs, link) {
switch (input->wlr_input_device->type) { switch (input->wlr_input_device->type) {
case WLR_INPUT_DEVICE_KEYBOARD: case WLR_INPUT_DEVICE_KEYBOARD: