bdilly pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=2e527851cfdfaa6efc0e261cea978e5cf11afac2
commit 2e527851cfdfaa6efc0e261cea978e5cf11afac2 Author: Guilherme Iscaro <isc...@profusion.mobi> Date: Mon Nov 21 17:05:18 2016 -0200 Ecore Evas VNC: Add support for ecore_evas_pointer_device_xy_get(). This commit adds the support to fetch the mouse position of a VNC client. --- src/lib/ecore_evas/ecore_evas.c | 14 ++++++++- .../ecore_evas/vnc_server/ecore_evas_vnc_server.c | 33 ++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/lib/ecore_evas/ecore_evas.c b/src/lib/ecore_evas/ecore_evas.c index 43ec72a..b493383 100644 --- a/src/lib/ecore_evas/ecore_evas.c +++ b/src/lib/ecore_evas/ecore_evas.c @@ -2393,7 +2393,19 @@ ecore_evas_pointer_device_xy_get(const Ecore_Evas *ee, if (x) *x = 0; if (y) *y = 0; ECORE_EVAS_CHECK(ee); - if (ee->engine.func->fn_pointer_device_xy_get) + if (ee->vnc_server) + { + Eina_Module *mod; + void (*pointer_xy_get)(const void *, const Efl_Input_Device *, Evas_Coord *, Evas_Coord *y); + + mod = _ecore_evas_vnc_server_module_load(); + EINA_SAFETY_ON_NULL_RETURN(mod); + + pointer_xy_get = eina_module_symbol_get(mod, "ecore_evas_vnc_server_pointer_xy_get"); + EINA_SAFETY_ON_NULL_RETURN(pointer_xy_get); + pointer_xy_get(ee->vnc_server, pointer, x, y); + } + else if (ee->engine.func->fn_pointer_device_xy_get) ee->engine.func->fn_pointer_device_xy_get(ee, pointer, x, y); } } 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 c55fb9c..88c02d2 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 @@ -893,5 +893,38 @@ ecore_evas_vnc_server_del(Ecore_Evas_Vnc_Server *server) free(server); } +EAPI void +ecore_evas_vnc_server_pointer_xy_get(const Ecore_Evas_Vnc_Server *server, + const Evas_Device *pointer, + Evas_Coord *x, Evas_Coord *y) +{ + Evas_Coord sx, sy; + rfbClientIteratorPtr itr; + rfbClientRec *client; + Ecore_Evas_Vnc_Server_Client_Data *cdata; + + EINA_SAFETY_ON_NULL_RETURN(server); + EINA_SAFETY_ON_NULL_RETURN(pointer); + + sx = sy = 0; + itr = rfbGetClientIterator(server->vnc_screen); + + while ((client = rfbClientIteratorNext(itr))) + { + cdata = client->clientData; + + if (cdata->mouse == pointer) + { + sx = client->lastPtrX; + sy = client->lastPtrY; + break; + } + } + + rfbReleaseClientIterator(itr); + if (x) *x = sx; + if (y) *y = sy; +} + EINA_MODULE_INIT(_ecore_evas_vnc_server_init); EINA_MODULE_SHUTDOWN(_ecore_evas_vnc_server_shutdown); --