Move xcursor theme loading and cursor warping to output

Since this is inherently output independent, we can move this to here
and avoid the inexistance of an output we ran into in the previous
commit.

Warping the cursor is no problem here either: since we restrict
ourselves to a single output, there won't be any confusing UX by having
the cursor jump from one output to the newly attached one.
This commit is contained in:
Jente Hidskes 2018-12-31 00:18:37 +01:00
parent 2cf40f7a9b
commit fd4ff669dd
No known key found for this signature in database
GPG key ID: 04BE5A29F32D91EA
3 changed files with 13 additions and 15 deletions

View file

@ -163,4 +163,15 @@ handle_new_output(struct wl_listener *listener, void *data)
/* Disconnect the signal now, because we only use one static output. */
wl_list_remove(&server->new_output.link);
if (wlr_xcursor_manager_load(server->seat->xcursor_manager, wlr_output->scale)) {
wlr_log(WLR_ERROR, "Cannot load XCursor theme for output '%s' with scale %f",
wlr_output->name,
wlr_output->scale);
}
wlr_xcursor_manager_set_cursor_image(server->seat->xcursor_manager, DEFAULT_XCURSOR,
server->seat->cursor);
/* Place the cursor in the center of the screen. */
wlr_cursor_warp(server->seat->cursor, NULL, wlr_output->width / 2, wlr_output->height / 2);
}

15
seat.c
View file

@ -20,7 +20,6 @@
#include "server.h"
#include "view.h"
#define DEFAULT_XCURSOR "left_ptr"
#define XCURSOR_SIZE 24
static inline bool
@ -452,20 +451,6 @@ cg_seat_create(struct cg_server *server)
}
}
float scale = 1.f; // TODO: segault because server->output->wlr_output->scale does not exist yet;
if (wlr_xcursor_manager_load(seat->xcursor_manager, scale)) {
wlr_log(WLR_ERROR, "Cannot load XCursor theme for output '%s' with scale %f",
server->output->wlr_output->name,
server->output->wlr_output->scale);
}
wlr_xcursor_manager_set_cursor_image(seat->xcursor_manager, DEFAULT_XCURSOR, seat->cursor);
// TODO: warp to the center?
/* /\* Place the cursor in the center of the screen and make it visible. *\/ */
/* wlr_cursor_warp_absolute(seat->cursor, NULL, .5, .5); */
wlr_cursor_warp(seat->cursor, NULL, seat->cursor->x, seat->cursor->y);
seat->cursor_motion.notify = handle_cursor_motion;
wl_signal_add(&seat->cursor->events.motion, &seat->cursor_motion);
seat->cursor_motion_absolute.notify = handle_cursor_motion_absolute;

2
seat.h
View file

@ -10,6 +10,8 @@
#include "server.h"
#include "view.h"
#define DEFAULT_XCURSOR "left_ptr"
struct cg_seat {
struct wlr_seat *seat;
struct cg_server *server;