From acb25132e428315a1220b972fd4117e5ef84660e Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Thu, 9 Jul 2020 12:05:13 -0400 Subject: [PATCH] add jtk.quit() --- src/jtk/event.d | 7 +++++-- src/jtk/init.d | 6 ++++++ src/jtk/jtk.c | 17 +++++++++++++---- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/jtk/event.d b/src/jtk/event.d index c430463..e92e04b 100644 --- a/src/jtk/event.d +++ b/src/jtk/event.d @@ -51,7 +51,7 @@ struct Event }; } -private extern(C) void jtk_wait_event(Event * event, ulong time_to_wait); +private extern(C) bool jtk_wait_event(Event * event, ulong time_to_wait); private __gshared DList!(Event *) * event_list; private __gshared Mutex event_list_mutex; @@ -98,7 +98,10 @@ private void event_thread() { Event * event = new Event; ulong time_until_next_timer_expiry = Timer.time_to_next_timer_expiration(); - jtk_wait_event(event, time_until_next_timer_expiry); + if (!jtk_wait_event(event, time_until_next_timer_expiry)) + { + break; + } synchronized(event_list_mutex) { event_list.insertBack(event); diff --git a/src/jtk/init.d b/src/jtk/init.d index 1fc6485..d8eda56 100644 --- a/src/jtk/init.d +++ b/src/jtk/init.d @@ -4,6 +4,7 @@ static import jtk.event; static import jtk.timer; private extern(C) bool jtk_init(); +private extern(C) void jtk_quit(); bool init() { @@ -17,3 +18,8 @@ bool init() return true; } + +void quit() +{ + jtk_quit(); +} diff --git a/src/jtk/jtk.c b/src/jtk/jtk.c index d44c34c..a5a4d1b 100644 --- a/src/jtk/jtk.c +++ b/src/jtk/jtk.c @@ -10,6 +10,7 @@ static Display * g_display; static XVisualInfo * g_vi; static XSetWindowAttributes g_swa; static GLXContext g_context; +static bool g_quitting; /************************************************************************** * Init @@ -197,8 +198,8 @@ void jtk_window_set_icon(uint64_t window_handle, const uint8_t * data, * Event *************************************************************************/ -/** Do not wait longer than 100ms */ -#define MAX_WAIT_TIME 100000u +/** Do not wait longer than 50ms */ +#define MAX_WAIT_TIME 50000u #define JTK_KEY_MODS_MASK 0xFF000000u #define JTK_KEY_KEYCODE_MASK 0x00FFFFFFu @@ -680,12 +681,15 @@ bool jtk_check_event(jtk_event_t * event) return event_found; } -void jtk_wait_event(jtk_event_t * event, uint64_t time_to_wait) +bool jtk_wait_event(jtk_event_t * event, uint64_t time_to_wait) { for (;;) { + if (g_quitting) + return false; + if (jtk_check_event(event)) - return; + return true; /* Wait for something to happen. */ if ((time_to_wait > MAX_WAIT_TIME) || (time_to_wait == 0u)) @@ -715,3 +719,8 @@ void jtk_wake(void) XPutBackEvent(g_display, &event); XUnlockDisplay(g_display); } + +void jtk_quit(void) +{ + g_quitting = true; +}