Restructure input initialisation

vencrypt
Andri Yngvason 2020-01-24 20:56:47 +00:00
parent b0077c93fe
commit 7eaece7c0a
3 changed files with 42 additions and 36 deletions

View File

@ -22,7 +22,6 @@
struct pointer {
struct nvnc* vnc;
struct zwlr_virtual_pointer_manager_v1* manager;
struct zwlr_virtual_pointer_v1* pointer;
enum nvnc_button_mask current_mask;
@ -34,7 +33,7 @@ struct pointer {
uint32_t height;
};
int pointer_init(struct pointer* self, struct wl_seat* seat);
int pointer_init(struct pointer* self);
void pointer_destroy(struct pointer* self);
void pointer_set(struct pointer* self, uint32_t x, uint32_t y,

View File

@ -66,6 +66,7 @@ struct wayvnc {
struct zxdg_output_manager_v1* xdg_output_manager;
struct zwp_virtual_keyboard_manager_v1* keyboard_manager;
struct zwlr_virtual_pointer_manager_v1* pointer_manager;
struct renderer renderer;
const struct output* selected_output;
@ -158,7 +159,7 @@ static void registry_add(void* data, struct wl_registry* registry,
}
if (strcmp(interface, zwlr_virtual_pointer_manager_v1_interface.name) == 0) {
self->pointer_backend.manager =
self->pointer_manager =
wl_registry_bind(registry, id,
&zwlr_virtual_pointer_manager_v1_interface,
1);
@ -229,7 +230,7 @@ void wayvnc_destroy(struct wayvnc* self)
zwp_virtual_keyboard_manager_v1_destroy(self->keyboard_manager);
keyboard_destroy(&self->keyboard_backend);
zwlr_virtual_pointer_manager_v1_destroy(self->pointer_backend.manager);
zwlr_virtual_pointer_manager_v1_destroy(self->pointer_manager);
pointer_destroy(&self->pointer_backend);
if (self->screencopy_backend.manager)
@ -241,6 +242,18 @@ void wayvnc_destroy(struct wayvnc* self)
wl_display_disconnect(self->display);
}
static void init_xdg_outputs(struct wayvnc* self)
{
struct output* output;
wl_list_for_each(output, &self->outputs, link) {
struct zxdg_output_v1* xdg_output =
zxdg_output_manager_v1_get_xdg_output(
self->xdg_output_manager, output->wl_output);
output_set_xdg_output(output, xdg_output);
}
}
static int init_wayland(struct wayvnc* self)
{
static const struct wl_registry_listener registry_listener = {
@ -264,6 +277,21 @@ static int init_wayland(struct wayvnc* self)
wl_display_dispatch(self->display);
wl_display_roundtrip(self->display);
init_xdg_outputs(self);
if (!self->pointer_manager) {
log_error("Virtual Pointer protocol not supported by compositor.\n");
goto failure;
}
if (!self->keyboard_manager) {
log_error("Virtual Keyboard protocol not supported by compositor.\n");
goto failure;
}
wl_display_dispatch(self->display);
wl_display_roundtrip(self->display);
if (!self->dmabuf_backend.manager && !self->screencopy_backend.manager) {
log_error("Compositor supports neither screencopy nor export-dmabuf! Exiting.\n");
goto failure;
@ -275,18 +303,6 @@ static int init_wayland(struct wayvnc* self)
self->screencopy_backend.frame_capture.on_done = on_capture_done;
self->screencopy_backend.frame_capture.userdata = self;
struct output* output;
wl_list_for_each(output, &self->outputs, link) {
struct zxdg_output_v1* xdg_output =
zxdg_output_manager_v1_get_xdg_output(
self->xdg_output_manager, output->wl_output);
output_set_xdg_output(output, xdg_output);
}
wl_display_dispatch(self->display);
wl_display_roundtrip(self->display);
return 0;
failure:
@ -405,7 +421,7 @@ int init_nvnc(struct wayvnc* self, const char* addr, uint16_t port)
self->selected_output->height,
format);
if (self->pointer_backend.manager)
if (self->pointer_manager)
nvnc_set_pointer_fn(self->nvnc, on_pointer_event);
if (self->keyboard_backend.virtual_keyboard)
@ -676,27 +692,21 @@ int main(int argc, char* argv[])
self.dmabuf_backend.fc.wl_output = out->wl_output;
self.screencopy_backend.frame_capture.wl_output = out->wl_output;
if (self.pointer_backend.manager) {
self.pointer_backend.width = out->width;
self.pointer_backend.height = out->height;
}
assert(self.keyboard_manager);
self.keyboard_backend.virtual_keyboard =
zwp_virtual_keyboard_manager_v1_create_virtual_keyboard(
self.keyboard_manager, self.selected_seat->wl_seat);
keyboard_init(&self.keyboard_backend, self.kb_layout);
if (self.pointer_backend.manager) {
self.pointer_backend.vnc = self.nvnc;
pointer_init(&self.pointer_backend, self.selected_seat->wl_seat);
} else {
log_error("Compositor does not support %s.\n",
zwlr_virtual_pointer_manager_v1_interface.name);
goto failure;
}
self.pointer_backend.width = out->width;
self.pointer_backend.height = out->height;
self.pointer_backend.pointer =
zwlr_virtual_pointer_manager_v1_create_virtual_pointer(
self.pointer_manager, self.selected_seat->wl_seat);
pointer_init(&self.pointer_backend);
if (renderer_init(&self.renderer, self.selected_output->width,
self.selected_output->height) < 0) {

View File

@ -23,11 +23,8 @@
#include "wlr-virtual-pointer-unstable-v1.h"
#include "time-util.h"
int pointer_init(struct pointer* self, struct wl_seat* seat)
int pointer_init(struct pointer* self)
{
self->pointer =
zwlr_virtual_pointer_manager_v1_create_virtual_pointer(self->manager, seat);
zwlr_virtual_pointer_v1_axis_source(self->pointer,
WL_POINTER_AXIS_SOURCE_WHEEL);
return 0;