bdilly pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=75e24fc32f41880088798334cbae4e5625f64e59
commit 75e24fc32f41880088798334cbae4e5625f64e59 Author: Guilherme Iscaro <[email protected]> Date: Thu Oct 27 15:40:20 2016 -0200 Ecore_Evas VNC: Properly set mouse/canvas in/out properties. --- .../ecore_evas/vnc_server/ecore_evas_vnc_server.c | 30 ++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/modules/ecore_evas/vnc_server/ecore_evas_vnc_server.c b/src/modules/ecore_evas/vnc_server/ecore_evas_vnc_server.c index def9593..8f78f40 100644 --- a/src/modules/ecore_evas/vnc_server/ecore_evas_vnc_server.c +++ b/src/modules/ecore_evas/vnc_server/ecore_evas_vnc_server.c @@ -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) { @@ -152,15 +156,33 @@ _ecore_evas_vnc_server_socket_listen_activity(void *data, } 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: --
