URI: 
       tClean up window even on fatal exit; add -t option for setting title of window - ltk - Socket-based GUI for X11 (WIP)
  HTML git clone git://lumidify.org/ltk.git (fast, but not encrypted)
  HTML git clone https://lumidify.org/git/ltk.git (encrypted, but very slow)
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit f983e20c6046e83fb13b2628d523bd8a4828411d
   DIR parent 941ab3d0f212701eab992f0390279d75425589d4
  HTML Author: lumidify <nobody@lumidify.org>
       Date:   Tue, 29 Dec 2020 20:36:00 +0100
       
       Clean up window even on fatal exit; add -t option for setting title of window
       
       Diffstat:
         M ltkd.c                              |      27 +++++++++++++++++++++++----
         M test.sh                             |       2 +-
       
       2 files changed, 24 insertions(+), 5 deletions(-)
       ---
   DIR diff --git a/ltkd.c b/ltkd.c
       t@@ -109,15 +109,32 @@ static int listenfd = -1;
        static char *ltk_dir = NULL;
        static FILE *ltk_logfile = NULL;
        static char *sock_path = NULL;
       +/* Note: Most functions still take this explicitly because it wasn't
       +   global originally, but that's just the way it is. */
       +static ltk_window *main_window = NULL;
        
        int main(int argc, char *argv[]) {
       -        ltk_window *window = ltk_create_window("theme.ini", "Demo", 0, 0, 500, 500);
       +        int ch;
       +        char *title = "LTK Window";
       +        while ((ch = getopt(argc, argv, "t:")) != -1) {
       +                switch (ch) {
       +                        case 't':
       +                                title = optarg;
       +                                break;
       +                        default:
       +                                ltk_fatal("USAGE: ltkd [-t title]\n");
       +                }
       +        }
       +
       +        /* FIXME: set window size properly - I only run it in a tiling WM
       +           anyways, so it doesn't matter, but still... */
       +        main_window = ltk_create_window("theme.ini", title, 0, 0, 500, 500);
        
                ltk_dir = ltk_setup_directory();
                if (!ltk_dir) ltk_fatal("Unable to setup ltk directory.\n");
                ltk_logfile = open_log(ltk_dir);
                if (!ltk_logfile) ltk_fatal("Unable to open log file.\n");
       -        sock_path = get_sock_path(ltk_dir, window->xwindow);
       +        sock_path = get_sock_path(ltk_dir, main_window->xwindow);
                if (!sock_path) ltk_fatal("Unable to allocate memory for socket path.\n");
        
                /* Note: sockets should be initialized to 0 because it is static */
       t@@ -129,7 +146,7 @@ int main(int argc, char *argv[]) {
                        sockets[i].tokens.tokens = NULL;
                }
        
       -        return ltk_mainloop(window);
       +        return ltk_mainloop(main_window);
        }
        
        static int
       t@@ -337,7 +354,6 @@ ltk_cleanup_nongui(void) {
        
        static void
        ltk_cleanup_gui(ltk_window *window) {
       -        ltk_destroy_theme(window->theme);
                ltk_destroy_window(window);
        }
        
       t@@ -396,6 +412,8 @@ ltk_fatal(const char *msg) {
                (void)fprintf(errfile, msg);
                /* FIXME: cleanup gui stuff too (need window for that) */
                ltk_cleanup_nongui();
       +        if (main_window)
       +                ltk_cleanup_gui(main_window);
                exit(1);
        };
        
       t@@ -543,6 +561,7 @@ ltk_destroy_window(ltk_window *window) {
                        }
                }
                kh_destroy(widget, window->widget_hash);
       +        ltk_destroy_theme(window->theme);
                ltk_cleanup_text();
                XCloseDisplay(window->dpy);
                free(window);
   DIR diff --git a/test.sh b/test.sh
       t@@ -7,7 +7,7 @@
        # supported yet.
        
        export LTKDIR="`pwd`/.ltk"
       -ltk_id=`./ltkd`
       +ltk_id=`./ltkd -t "Cool Window"`
        
        cat test.gui | ./ltkc $ltk_id | while read cmd
        do