summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuilherme Iscaro <iscaro@profusion.mobi>2016-11-07 14:43:31 -0200
committerGuilherme Iscaro <iscaro@profusion.mobi>2016-11-07 14:59:30 -0200
commit2294c3c9ea4a277a06b43318a389bc4d2e1682f8 (patch)
treea82918a252cb0f20b7032f3a1871cff1432c0143
parentf1316ce859d12d79128bc2663e5f2e66757e0bfe (diff)
downloadefl-devs/iscaro/vnc_disconnect.tar.gz
Ecore Evas VNC: Add client disconnected callback.devs/iscaro/vnc_disconnect
Summary: Ecore Evas VNC: Properly unregister the region push hook callback. This callback must be unregistered when the VNC server is deleted. Subscribers: cedric, jpeg Differential Revision: https://phab.enlightenment.org/D4384
-rw-r--r--src/modules/ecore_evas/vnc_server/ecore_evas_vnc_server.c29
1 files changed, 29 insertions, 0 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 39f80cdcdc..def9593c9e 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
@@ -597,6 +597,8 @@ _ecore_evas_vnc_server_draw(Evas *evas, int x, int y,
ee = evas_data_attach_get(evas);
server = ee->vnc_server;
+ if (!server) return;
+
if (!server->frame_buffer || server->last_w != ee->w || server->last_h != ee->h)
{
char *new_fb;
@@ -802,8 +804,35 @@ ecore_evas_vnc_server_new(Ecore_Evas *ee, int port, const char *addr,
EAPI void
ecore_evas_vnc_server_del(Ecore_Evas_Vnc_Server *server)
{
+ Evas_Engine_Info *engine;
+ Eina_Bool err;
+
EINA_SAFETY_ON_NULL_RETURN(server);
+ engine = evas_engine_info_get(server->ee->evas);
+
+#ifdef BUILD_ENGINE_SOFTWARE_X11
+ if (!strcmp(server->ee->driver, "software_x11"))
+ {
+ Evas_Engine_Info_Software_X11 *x11_engine;
+
+ x11_engine = (Evas_Engine_Info_Software_X11 *)engine;
+ x11_engine->func.region_push_hook = NULL;
+ }
+#endif
+#ifdef BUILD_ENGINE_FB
+ if (!strcmp(server->ee->driver, "fb"))
+ {
+ Evas_Engine_Info_FB *fb_engine;
+
+ fb_engine = (Evas_Engine_Info_FB *)engine;
+ fb_engine->func.region_push_hook = NULL;
+ }
+#endif
+
+ err = evas_engine_info_set(server->ee->evas, engine);
+ if (!err)
+ WRN("Could not unset the region push hook callback");
ecore_main_fd_handler_del(server->vnc_listen6_handler);
ecore_main_fd_handler_del(server->vnc_listen_handler);
free(server->frame_buffer);