Ecore_Evas VNC: Properly set mouse/canvas in/out properties.

This commit is contained in:
Guilherme Iscaro 2016-10-27 15:40:20 -02:00 committed by Bruno Dilly
parent 75619fc290
commit 75e24fc32f
1 changed files with 28 additions and 2 deletions

View File

@ -101,6 +101,10 @@ typedef struct _Ecore_Evas_Vnc_Server_Client_Data {
#define VNC_SAMPLES_PER_PIXEL (3)
#define VNC_BYTES_PER_PIXEL (4)
static void _ecore_evas_vnc_server_ecore_event_generic_free(void *user_data,
void *func_data);
static void
_ecore_evas_vnc_server_update_clients(rfbScreenInfoPtr vnc_screen)
{
@ -151,16 +155,34 @@ _ecore_evas_vnc_server_socket_listen_activity(void *data,
return ECORE_CALLBACK_RENEW;
}
static void
_ecore_evas_vnc_server_mouse_inout_emit(Ecore_Evas_Vnc_Server *server,
Evas_Device *dev, int event_type)
{
Ecore_Event_Mouse_IO *io = calloc(1, sizeof(Ecore_Event_Mouse_IO));
EINA_SAFETY_ON_NULL_RETURN(io);
io->timestamp = time(NULL);
io->dev = efl_ref(dev);
io->event_window = io->window = server->ee->prop.window;
ecore_event_add(event_type, io,
_ecore_evas_vnc_server_ecore_event_generic_free, dev);
}
static void
_ecore_evas_vnc_server_client_gone(rfbClientRec *client)
{
Ecore_Evas_Vnc_Server_Client_Data *cdata = client->clientData;
Ecore_Evas_Vnc_Server *server = client->screen->screenData;
Ecore_Evas_Vnc_Server_Client_Data *cdata = client->clientData;
DBG("VNC client on seat '%s' gone", evas_device_name_get(cdata->seat));
if (server->disc_cb)
server->disc_cb(server->cb_data, server->ee, client->host);
_ecore_evas_vnc_server_mouse_inout_emit(server, cdata->mouse,
ECORE_EVENT_MOUSE_OUT);
_ecore_evas_mouse_inout_set(server->ee, cdata->mouse, EINA_FALSE,
EINA_FALSE);
ecore_evas_focus_device_set(server->ee, cdata->seat, EINA_FALSE);
ecore_main_fd_handler_del(cdata->handler);
evas_device_del(cdata->keyboard);
evas_device_del(cdata->mouse);
@ -240,7 +262,11 @@ _ecore_evas_vnc_server_client_connection_new(rfbClientRec *client)
DBG("New VNC client on seat '%u'", _available_seat);
_available_seat++;
_ecore_evas_vnc_server_mouse_inout_emit(server, cdata->mouse,
ECORE_EVENT_MOUSE_IN);
_ecore_evas_mouse_inout_set(server->ee, cdata->mouse, EINA_TRUE,
EINA_FALSE);
ecore_evas_focus_device_set(server->ee, cdata->seat, EINA_TRUE);
return RFB_CLIENT_ACCEPT;
err_mouse: