summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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);