ltk

Socket-based GUI for X11 (WIP)
git clone git://lumidify.org/ltk.git (fast, but not encrypted)
git clone https://lumidify.org/git/ltk.git (encrypted, but very slow)
Log | Files | Refs | README | LICENSE

commit f983e20c6046e83fb13b2628d523bd8a4828411d
parent 941ab3d0f212701eab992f0390279d75425589d4
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:
Mltkd.c | 27+++++++++++++++++++++++----
Mtest.sh | 2+-
2 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/ltkd.c b/ltkd.c @@ -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 */ @@ -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 @@ -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); } @@ -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); }; @@ -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); diff --git a/test.sh b/test.sh @@ -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