diff options
-rw-r--r-- | src/modules/ecore_evas/vnc_server/ecore_evas_vnc_server.c | 29 |
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); |