ecore-wl2: Add internal function to cleanup Ecore_Wl2_Display when closed
authorChris Michael <cp.michael@samsung.com>
Thu, 20 Aug 2015 14:51:57 +0000 (10:51 -0400)
committerChris Michael <cp.michael@samsung.com>
Thu, 3 Dec 2015 17:02:40 +0000 (12:02 -0500)
Signed-off-by: Chris Michael <cp.michael@samsung.com>
src/lib/ecore_wl2/ecore_wl2_display.c

index 0c7d4d8..89baebe 100644 (file)
@@ -184,6 +184,18 @@ _cb_globals_hash_del(void *data)
    free(global);
 }
 
+static void
+_ecore_wl2_display_cleanup(Ecore_Wl2_Display *ewd)
+{
+   if (ewd->xkb_context) xkb_context_unref(ewd->xkb_context);
+
+   wl_registry_destroy(wl_display_get_registry(ewd->wl.display));
+
+   if (ewd->fd_hdl) ecore_main_fd_handler_del(ewd->fd_hdl);
+
+   eina_hash_free(ewd->globals);
+}
+
 EAPI Ecore_Wl2_Display *
 ecore_wl2_display_create(const char *name)
 {
@@ -299,6 +311,7 @@ EAPI void
 ecore_wl2_display_disconnect(Ecore_Wl2_Display *display)
 {
    EINA_SAFETY_ON_NULL_RETURN(display);
+   _ecore_wl2_display_cleanup(display);
    wl_display_disconnect(display->wl.display);
 }
 
@@ -306,6 +319,7 @@ EAPI void
 ecore_wl2_display_destroy(Ecore_Wl2_Display *display)
 {
    EINA_SAFETY_ON_NULL_RETURN(display);
+   _ecore_wl2_display_cleanup(display);
    wl_display_destroy(display->wl.display);
 }