mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-26 14:45:58 +01:00
xwayland: listen to wlr_seat destroy signal
This commit is contained in:
parent
58488ec5ce
commit
e0eafa0429
2 changed files with 21 additions and 0 deletions
|
@ -28,6 +28,7 @@ struct wlr_xwayland {
|
||||||
struct wl_event_source *sigusr1_source;
|
struct wl_event_source *sigusr1_source;
|
||||||
struct wl_listener client_destroy;
|
struct wl_listener client_destroy;
|
||||||
struct wl_listener display_destroy;
|
struct wl_listener display_destroy;
|
||||||
|
struct wl_listener seat_destroy;
|
||||||
struct wlr_xwm *xwm;
|
struct wlr_xwm *xwm;
|
||||||
struct wlr_xwayland_cursor *cursor;
|
struct wlr_xwayland_cursor *cursor;
|
||||||
|
|
||||||
|
|
|
@ -134,6 +134,7 @@ static void wlr_xwayland_finish(struct wlr_xwayland *wlr_xwayland) {
|
||||||
free(wlr_xwayland->cursor);
|
free(wlr_xwayland->cursor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wlr_xwayland_set_seat(wlr_xwayland, NULL);
|
||||||
xwm_destroy(wlr_xwayland->xwm);
|
xwm_destroy(wlr_xwayland->xwm);
|
||||||
|
|
||||||
if (wlr_xwayland->client) {
|
if (wlr_xwayland->client) {
|
||||||
|
@ -388,11 +389,30 @@ void wlr_xwayland_set_cursor(struct wlr_xwayland *wlr_xwayland,
|
||||||
wlr_xwayland->cursor->hotspot_y = hotspot_y;
|
wlr_xwayland->cursor->hotspot_y = hotspot_y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void wlr_xwayland_handle_seat_destroy(struct wl_listener *listener,
|
||||||
|
void *data) {
|
||||||
|
struct wlr_xwayland *xwayland =
|
||||||
|
wl_container_of(listener, xwayland, seat_destroy);
|
||||||
|
|
||||||
|
wlr_xwayland_set_seat(xwayland, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
void wlr_xwayland_set_seat(struct wlr_xwayland *xwayland,
|
void wlr_xwayland_set_seat(struct wlr_xwayland *xwayland,
|
||||||
struct wlr_seat *seat) {
|
struct wlr_seat *seat) {
|
||||||
|
if (xwayland->seat) {
|
||||||
|
wl_list_remove(&xwayland->seat_destroy.link);
|
||||||
|
}
|
||||||
|
|
||||||
xwayland->seat = seat;
|
xwayland->seat = seat;
|
||||||
|
|
||||||
if (xwayland->xwm) {
|
if (xwayland->xwm) {
|
||||||
xwm_set_seat(xwayland->xwm, seat);
|
xwm_set_seat(xwayland->xwm, seat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (seat == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
xwayland->seat_destroy.notify = wlr_xwayland_handle_seat_destroy;
|
||||||
|
wl_signal_add(&seat->events.destroy, &xwayland->seat_destroy);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue