diff --git a/include/neatvnc.h b/include/neatvnc.h index ee778ff..bf8daf8 100644 --- a/include/neatvnc.h +++ b/include/neatvnc.h @@ -110,7 +110,8 @@ typedef void (*nvnc_client_fn)(struct nvnc_client*); typedef void (*nvnc_damage_fn)(struct pixman_region16* damage, void* userdata); typedef bool (*nvnc_auth_fn)(const char* username, const char* password, void* userdata); -typedef void (*nvnc_cut_text_fn)(struct nvnc*, const char* text, uint32_t len); +typedef void (*nvnc_cut_text_fn)(struct nvnc_client*, const char* text, + uint32_t len); typedef void (*nvnc_fb_release_fn)(struct nvnc_fb*, void* context); typedef struct nvnc_fb* (*nvnc_fb_alloc_fn)(uint16_t width, uint16_t height, uint32_t format, uint16_t stride); @@ -137,6 +138,7 @@ const char* nvnc_client_get_auth_username(const struct nvnc_client* client); struct nvnc_client* nvnc_client_first(struct nvnc* self); struct nvnc_client* nvnc_client_next(struct nvnc_client* client); + void nvnc_set_name(struct nvnc* self, const char* name); void nvnc_set_key_fn(struct nvnc* self, nvnc_key_fn); @@ -145,7 +147,7 @@ void nvnc_set_pointer_fn(struct nvnc* self, nvnc_pointer_fn); void nvnc_set_fb_req_fn(struct nvnc* self, nvnc_fb_req_fn); void nvnc_set_new_client_fn(struct nvnc* self, nvnc_client_fn); void nvnc_set_client_cleanup_fn(struct nvnc_client* self, nvnc_client_fn fn); -void nvnc_set_cut_text_receive_fn(struct nvnc* self, nvnc_cut_text_fn fn); +void nvnc_set_cut_text_fn(struct nvnc*, nvnc_cut_text_fn fn); bool nvnc_has_auth(void); int nvnc_enable_auth(struct nvnc* self, const char* privkey_path, diff --git a/src/server.c b/src/server.c index 95cc3fd..1a42a4b 100644 --- a/src/server.c +++ b/src/server.c @@ -852,8 +852,6 @@ void nvnc_send_cut_text(struct nvnc* server, const char* text, uint32_t len) static int on_client_cut_text(struct nvnc_client* client) { - struct nvnc* server = client->server; - nvnc_cut_text_fn fn = server->cut_text_fn; struct rfb_cut_text_msg* msg = (struct rfb_cut_text_msg*)(client->msg_buffer + client->buffer_index); @@ -878,8 +876,9 @@ static int on_client_cut_text(struct nvnc_client* client) size_t msg_size = sizeof(*msg) + length; if (msg_size <= left_to_process) { + nvnc_cut_text_fn fn = client->server->cut_text_fn; if (fn) - fn(server, msg->text, length); + fn(client, msg->text, length); return msg_size; } @@ -906,9 +905,6 @@ static int on_client_cut_text(struct nvnc_client* client) static void process_big_cut_text(struct nvnc_client* client) { - struct nvnc* server = client->server; - nvnc_cut_text_fn fn = server->cut_text_fn; - assert(client->cut_text.length > client->cut_text.index); void* start = client->cut_text.buffer + client->cut_text.index; @@ -937,8 +933,9 @@ static void process_big_cut_text(struct nvnc_client* client) if (client->cut_text.index != client->cut_text.length) return; + nvnc_cut_text_fn fn = client->server->cut_text_fn; if (fn) - fn(server, client->cut_text.buffer, client->cut_text.length); + fn(client, client->cut_text.buffer, client->cut_text.length); free(client->cut_text.buffer); client->cut_text.buffer = NULL; @@ -1556,7 +1553,7 @@ void nvnc_set_client_cleanup_fn(struct nvnc_client* self, nvnc_client_fn fn) } EXPORT -void nvnc_set_cut_text_receive_fn(struct nvnc* self, nvnc_cut_text_fn fn) +void nvnc_set_cut_text_fn(struct nvnc* self, nvnc_cut_text_fn fn) { self->cut_text_fn = fn; }