Use transient-seat instead of seat-management
parent
5476e431bd
commit
9e034fabbc
61
src/main.c
61
src/main.c
|
@ -40,7 +40,7 @@
|
||||||
#include "virtual-keyboard-unstable-v1.h"
|
#include "virtual-keyboard-unstable-v1.h"
|
||||||
#include "xdg-output-unstable-v1.h"
|
#include "xdg-output-unstable-v1.h"
|
||||||
#include "linux-dmabuf-unstable-v1.h"
|
#include "linux-dmabuf-unstable-v1.h"
|
||||||
#include "wlr-seat-management-unstable-v1.h"
|
#include "transient-seat-unstable-v1.h"
|
||||||
#include "screencopy.h"
|
#include "screencopy.h"
|
||||||
#include "data-control.h"
|
#include "data-control.h"
|
||||||
#include "strlcpy.h"
|
#include "strlcpy.h"
|
||||||
|
@ -77,7 +77,7 @@ struct wv_client {
|
||||||
|
|
||||||
struct wl_seat* wl_seat;
|
struct wl_seat* wl_seat;
|
||||||
char seat_name[256];
|
char seat_name[256];
|
||||||
struct zwlr_chair_v1* chair;
|
struct zext_transient_seat_v1* chair;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct wayvnc {
|
struct wayvnc {
|
||||||
|
@ -136,7 +136,7 @@ static const char wayvnc_version[] = "UNKNOWN";
|
||||||
struct wl_shm* wl_shm = NULL;
|
struct wl_shm* wl_shm = NULL;
|
||||||
struct zwp_linux_dmabuf_v1* zwp_linux_dmabuf = NULL;
|
struct zwp_linux_dmabuf_v1* zwp_linux_dmabuf = NULL;
|
||||||
struct gbm_device* gbm_device = NULL;
|
struct gbm_device* gbm_device = NULL;
|
||||||
struct zwlr_seat_manager_v1* zwlr_seat_manager = NULL;
|
struct zext_transient_seat_manager_v1* zext_transient_seat_manager = NULL;
|
||||||
|
|
||||||
static uint64_t seat_id = 0;
|
static uint64_t seat_id = 0;
|
||||||
|
|
||||||
|
@ -230,9 +230,9 @@ static void registry_add(void* data, struct wl_registry* registry,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(interface, zwlr_seat_manager_v1_interface.name) == 0) {
|
if (strcmp(interface, zext_transient_seat_manager_v1_interface.name) == 0) {
|
||||||
zwlr_seat_manager = wl_registry_bind(registry, id,
|
zext_transient_seat_manager = wl_registry_bind(registry, id,
|
||||||
&zwlr_seat_manager_v1_interface, 1);
|
&zext_transient_seat_manager_v1_interface, 1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -316,7 +316,7 @@ void wayvnc_destroy(struct wayvnc* self)
|
||||||
output_list_destroy(&self->outputs);
|
output_list_destroy(&self->outputs);
|
||||||
seat_list_destroy(&self->seats);
|
seat_list_destroy(&self->seats);
|
||||||
|
|
||||||
zwlr_seat_manager_v1_destroy(zwlr_seat_manager);
|
zext_transient_seat_manager_v1_destroy(zext_transient_seat_manager);
|
||||||
|
|
||||||
zxdg_output_manager_v1_destroy(self->xdg_output_manager);
|
zxdg_output_manager_v1_destroy(self->xdg_output_manager);
|
||||||
|
|
||||||
|
@ -473,7 +473,7 @@ static void on_client_destroy(struct nvnc_client* nvnc_client)
|
||||||
keyboard_destroy(&client->kb);
|
keyboard_destroy(&client->kb);
|
||||||
}
|
}
|
||||||
|
|
||||||
zwlr_chair_v1_destroy(client->chair);
|
zext_transient_seat_v1_destroy(client->chair);
|
||||||
|
|
||||||
wl_list_remove(&client->link);
|
wl_list_remove(&client->link);
|
||||||
free(client);
|
free(client);
|
||||||
|
@ -515,7 +515,7 @@ static void init_client_inputs(struct wayvnc* wayvnc, struct wv_client* client)
|
||||||
pointer_init(&client->pointer);
|
pointer_init(&client->pointer);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void on_seat_ready(struct seat* seat)
|
void on_seat_ready(struct seat* seat)
|
||||||
{
|
{
|
||||||
struct wayvnc* wayvnc = seat->userdata;
|
struct wayvnc* wayvnc = seat->userdata;
|
||||||
|
|
||||||
|
@ -528,6 +528,35 @@ static void on_seat_ready(struct seat* seat)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void transient_seat_failed(void* data, struct zext_transient_seat_v1* seat,
|
||||||
|
uint32_t reason)
|
||||||
|
{
|
||||||
|
// TODO: Handle properly
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
void transient_seat_ready(void* data, struct zext_transient_seat_v1* chair,
|
||||||
|
const char* name)
|
||||||
|
{
|
||||||
|
struct nvnc_client* nvnc_client = data;
|
||||||
|
struct wv_client* client = nvnc_get_userdata(nvnc_client);
|
||||||
|
struct nvnc* nvnc = nvnc_client_get_server(nvnc_client);
|
||||||
|
struct wayvnc* wayvnc = nvnc_get_userdata(nvnc);
|
||||||
|
|
||||||
|
strlcpy(client->seat_name, name, sizeof(client->seat_name));
|
||||||
|
|
||||||
|
struct seat* seat = seat_find_by_name(&wayvnc->seats, name);
|
||||||
|
if (seat) {
|
||||||
|
client->wl_seat = seat->wl_seat;
|
||||||
|
init_client_inputs(wayvnc, client);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct zext_transient_seat_v1_listener transient_seat_listener = {
|
||||||
|
.failed = transient_seat_failed,
|
||||||
|
.ready = transient_seat_ready,
|
||||||
|
};
|
||||||
|
|
||||||
static void on_new_client(struct nvnc_client* nvnc_client)
|
static void on_new_client(struct nvnc_client* nvnc_client)
|
||||||
{
|
{
|
||||||
struct nvnc* nvnc = nvnc_client_get_server(nvnc_client);
|
struct nvnc* nvnc = nvnc_client_get_server(nvnc_client);
|
||||||
|
@ -536,10 +565,16 @@ static void on_new_client(struct nvnc_client* nvnc_client)
|
||||||
struct wv_client* client = calloc(1, sizeof(*client));
|
struct wv_client* client = calloc(1, sizeof(*client));
|
||||||
assert(client);
|
assert(client);
|
||||||
|
|
||||||
snprintf(client->seat_name, sizeof(client->seat_name),
|
int pid = getpid();
|
||||||
"wayvnc-%" PRIu64, seat_id++);
|
|
||||||
client->chair = zwlr_seat_manager_v1_create_chair(zwlr_seat_manager,
|
char name[256];
|
||||||
client->seat_name);
|
snprintf(name, sizeof(name), "wayvnc-%d-%" PRIu64, pid, seat_id++);
|
||||||
|
|
||||||
|
client->chair = zext_transient_seat_manager_v1_create(
|
||||||
|
zext_transient_seat_manager, name);
|
||||||
|
|
||||||
|
zext_transient_seat_v1_add_listener(client->chair,
|
||||||
|
&transient_seat_listener, nvnc_client);
|
||||||
|
|
||||||
nvnc_set_userdata(nvnc_client, client);
|
nvnc_set_userdata(nvnc_client, client);
|
||||||
nvnc_set_client_cleanup_fn(nvnc_client, on_client_destroy);
|
nvnc_set_client_cleanup_fn(nvnc_client, on_client_destroy);
|
||||||
|
|
Loading…
Reference in New Issue