commit 696ff69d34503c5cba0e98287997c089ecd36b18
parent bfc883141ea28d04d8da91fa69dcd0dfeb01b6a0
Author: lumidify <nobody@lumidify.org>
Date:   Mon,  2 Jan 2017 17:13:20 +0100
Add proper clean up functions
Diffstat:
2 files changed, 19 insertions(+), 8 deletions(-)
diff --git a/ltk.c b/ltk.c
@@ -34,16 +34,29 @@ void ltk_init(const char *theme_path)
     ltk->window_hash = NULL;
 }
 
+void ltk_clean_up(void)
+{
+    LtkWindow *window;
+    for (window = ltk_global->window_hash; window != NULL; window = window->hh.next)
+    {
+        ltk_destroy_window(window);
+    }
+    XCloseDisplay(ltk_global->display);
+    ltk_destroy_theme(ltk_global->theme);
+    free(ltk_global);
+}
+
 void ltk_quit(void)
 {
-    printf("CLEAN UP!\n");
-    exit(1);
+    ltk_clean_up();
+    exit(0);
 }
 
 void ltk_fatal(const char *msg)
 {
-    printf(msg);
-    ltk_quit();
+    fprintf(stderr, msg);
+    ltk_clean_up();
+    exit(1);
 };
 
 XColor ltk_create_xcolor(const char *hex)
diff --git a/window.c b/window.c
@@ -84,10 +84,8 @@ LtkWindow *ltk_create_window(const char *title, int x, int y, unsigned int w, un
 void ltk_destroy_window(LtkWindow *window)
 {
     LtkWidget *ptr = window->root_widget;
-    if (ptr)
-    {
-        ptr->destroy(ptr);
-    }
+    if (ptr) ptr->destroy(ptr);
+    XDestroyWindow(ltk_global->display, window->xwindow);
     free(window);
 }