commit 5aff106f8dd7610fe450e26880243949481ba5af
parent 63762ef33368a564ca5f630cde74981c63d32cd7
Author: lumidify <nobody@lumidify.org>
Date: Sun, 7 Jun 2020 17:28:01 +0200
Add quit command
Diffstat:
3 files changed, 14 insertions(+), 9 deletions(-)
diff --git a/ltk.c b/ltk.c
@@ -44,6 +44,7 @@
static void ltk_load_theme(ltk_window *window, const char *path);
static void ltk_destroy_theme(ltk_theme *theme);
+static ltk_rect ltk_rect_union(ltk_rect r1, ltk_rect r2);
static int running = 1;
static char *cmd_input = NULL;
@@ -91,7 +92,6 @@ ltk_window_invalidate_rect(ltk_window *window, ltk_rect rect) {
void
ltk_clean_up(ltk_window *window) {
- XCloseDisplay(window->dpy);
ltk_destroy_theme(window->theme);
ltk_destroy_window(window);
if (tokens) free(tokens);
@@ -230,6 +230,8 @@ proc_cmds(ltk_window *window) {
ltk_set_root_widget_cmd(window, tokens, tokens_len);
} else if (strcmp(tokens[0], "draw") == 0) {
ltk_draw_cmd(window, tokens, tokens_len);
+ } else if (strcmp(tokens[0], "quit") == 0) {
+ ltk_quit(window);
} else {
(void)fprintf(stderr, "Invalid command.\n");
}
@@ -270,7 +272,7 @@ ltk_mainloop(ltk_window *window) {
window->dirty_rect.w = 0;
window->dirty_rect.h = 0;
}
- if (window->last_event) {
+ if (window->last_event && running) {
struct ltk_event_queue *cur = window->last_event;
struct ltk_event_queue *last;
do {
@@ -359,8 +361,7 @@ ltk_create_window(const char *theme_path, const char *title, int x, int y, unsig
void
ltk_destroy_window(ltk_window *window) {
khint_t k;
- ltk_widget *ptr = window->root_widget;
- if (ptr) ptr->destroy(ptr, 0);
+ ltk_widget *ptr;
XDestroyWindow(window->dpy, window->xwindow);
for (k = kh_begin(window->widget_hash); k != kh_end(window->widget_hash); k++) {
if (kh_exist(window->widget_hash, k)) {
@@ -370,6 +371,7 @@ ltk_destroy_window(ltk_window *window) {
}
kh_destroy(widget, window->widget_hash);
ltk_cleanup_text();
+ XCloseDisplay(window->dpy);
free(window);
}
diff --git a/text_common.h b/text_common.h
@@ -24,8 +24,11 @@
#ifndef _TEXT_COMMON_H_
#define _TEXT_COMMON_H_
+/*
+Requires: <stdint.h>
+*/
+
typedef struct ltk_font ltk_font;
-typedef struct ltk_text ltk_text;
/* Contains general info on glyphs that doesn't change regardless of the context */
typedef struct {
diff --git a/text_line.h b/text_line.h
@@ -21,12 +21,12 @@
* SOFTWARE.
*/
-#ifndef _TEXT_BUFFER_H_
-#define _TEXT_BUFFER_H_
+#ifndef _TEXT_LINE_H_
+#define _TEXT_LINE_H_
/*
Requires the following includes:
-<X11/Xlib.h>, <X11/Xutil.h>, "text_common.h",
+<X11/Xlib.h>, <X11/Xutil.h>, <stdint.h>, "text_common.h",
*/
struct ltk_text_line {
@@ -45,4 +45,4 @@ XImage *ltk_text_line_render(struct ltk_text_line *tl, Display *dpy,
struct ltk_text_line *ltk_text_line_create(uint16_t font_size, char *text);
void ltk_text_line_destroy(struct ltk_text_line *tl);
-#endif /* _TEXT_BUFFER_H_ */
+#endif /* _TEXT_LINE_H_ */