main: Remove leaky abstraction for vnc connection
parent
c35974044d
commit
0c43623ceb
50
src/main.c
50
src/main.c
|
@ -428,43 +428,18 @@ void on_vnc_client_event(void* obj)
|
||||||
do_run = false;
|
do_run = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct vnc_client* connect_to_server(const char* address, int port)
|
int init_vnc_client_handler(struct vnc_client* client)
|
||||||
{
|
{
|
||||||
struct vnc_client* client = vnc_client_create();
|
|
||||||
if (!client)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
client->alloc_fb = on_vnc_client_alloc_fb;
|
|
||||||
client->update_fb = on_vnc_client_update_fb;
|
|
||||||
|
|
||||||
if (vnc_client_set_pixel_format(client, wl_shm_format) < 0) {
|
|
||||||
fprintf(stderr, "Unsupported pixel format\n");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vnc_client_connect(client, address, port) < 0) {
|
|
||||||
fprintf(stderr, "Failed to connect to server\n");
|
|
||||||
goto failure;
|
|
||||||
}
|
|
||||||
|
|
||||||
int fd = vnc_client_get_fd(client);
|
int fd = vnc_client_get_fd(client);
|
||||||
|
|
||||||
struct aml_handler* handler;
|
struct aml_handler* handler;
|
||||||
handler = aml_handler_new(fd, on_vnc_client_event, client, NULL);
|
handler = aml_handler_new(fd, on_vnc_client_event, client, NULL);
|
||||||
if (!handler)
|
if (!handler)
|
||||||
goto failure;
|
return -1;
|
||||||
|
|
||||||
int rc = aml_start(aml_get_default(), handler);
|
int rc = aml_start(aml_get_default(), handler);
|
||||||
aml_unref(handler);
|
aml_unref(handler);
|
||||||
|
return rc;
|
||||||
if (rc < 0)
|
|
||||||
goto failure;
|
|
||||||
|
|
||||||
return client;
|
|
||||||
|
|
||||||
failure:
|
|
||||||
vnc_client_destroy(client);
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int usage(int r)
|
static int usage(int r)
|
||||||
|
@ -533,10 +508,26 @@ int main(int argc, char* argv[])
|
||||||
wl_display_roundtrip(wl_display);
|
wl_display_roundtrip(wl_display);
|
||||||
wl_display_roundtrip(wl_display);
|
wl_display_roundtrip(wl_display);
|
||||||
|
|
||||||
struct vnc_client* vnc = connect_to_server(address, port);
|
struct vnc_client* vnc = vnc_client_create();
|
||||||
if (!vnc)
|
if (!vnc)
|
||||||
goto vnc_failure;
|
goto vnc_failure;
|
||||||
|
|
||||||
|
vnc->alloc_fb = on_vnc_client_alloc_fb;
|
||||||
|
vnc->update_fb = on_vnc_client_update_fb;
|
||||||
|
|
||||||
|
if (vnc_client_set_pixel_format(vnc, wl_shm_format) < 0) {
|
||||||
|
fprintf(stderr, "Unsupported pixel format\n");
|
||||||
|
goto vnc_setup_failure;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vnc_client_connect(vnc, address, port) < 0) {
|
||||||
|
fprintf(stderr, "Failed to connect to server\n");
|
||||||
|
goto vnc_setup_failure;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (init_vnc_client_handler(vnc) < 0)
|
||||||
|
goto vnc_setup_failure;
|
||||||
|
|
||||||
pointers->userdata = vnc;
|
pointers->userdata = vnc;
|
||||||
keyboards->userdata = vnc;
|
keyboards->userdata = vnc;
|
||||||
|
|
||||||
|
@ -551,6 +542,7 @@ int main(int argc, char* argv[])
|
||||||
rc = 0;
|
rc = 0;
|
||||||
if (window)
|
if (window)
|
||||||
window_destroy(window);
|
window_destroy(window);
|
||||||
|
vnc_setup_failure:
|
||||||
vnc_client_destroy(vnc);
|
vnc_client_destroy(vnc);
|
||||||
vnc_failure:
|
vnc_failure:
|
||||||
seat_list_destroy(&seats);
|
seat_list_destroy(&seats);
|
||||||
|
|
Loading…
Reference in New Issue