add jtk.quit()

This commit is contained in:
Josh Holtrop 2020-07-09 12:05:13 -04:00
parent d3203c7790
commit acb25132e4
3 changed files with 24 additions and 6 deletions

View File

@ -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 DList!(Event *) * event_list;
private __gshared Mutex event_list_mutex; private __gshared Mutex event_list_mutex;
@ -98,7 +98,10 @@ private void event_thread()
{ {
Event * event = new Event; Event * event = new Event;
ulong time_until_next_timer_expiry = Timer.time_to_next_timer_expiration(); 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) synchronized(event_list_mutex)
{ {
event_list.insertBack(event); event_list.insertBack(event);

View File

@ -4,6 +4,7 @@ static import jtk.event;
static import jtk.timer; static import jtk.timer;
private extern(C) bool jtk_init(); private extern(C) bool jtk_init();
private extern(C) void jtk_quit();
bool init() bool init()
{ {
@ -17,3 +18,8 @@ bool init()
return true; return true;
} }
void quit()
{
jtk_quit();
}

View File

@ -10,6 +10,7 @@ static Display * g_display;
static XVisualInfo * g_vi; static XVisualInfo * g_vi;
static XSetWindowAttributes g_swa; static XSetWindowAttributes g_swa;
static GLXContext g_context; static GLXContext g_context;
static bool g_quitting;
/************************************************************************** /**************************************************************************
* Init * Init
@ -197,8 +198,8 @@ void jtk_window_set_icon(uint64_t window_handle, const uint8_t * data,
* Event * Event
*************************************************************************/ *************************************************************************/
/** Do not wait longer than 100ms */ /** Do not wait longer than 50ms */
#define MAX_WAIT_TIME 100000u #define MAX_WAIT_TIME 50000u
#define JTK_KEY_MODS_MASK 0xFF000000u #define JTK_KEY_MODS_MASK 0xFF000000u
#define JTK_KEY_KEYCODE_MASK 0x00FFFFFFu #define JTK_KEY_KEYCODE_MASK 0x00FFFFFFu
@ -680,12 +681,15 @@ bool jtk_check_event(jtk_event_t * event)
return event_found; 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 (;;) for (;;)
{ {
if (g_quitting)
return false;
if (jtk_check_event(event)) if (jtk_check_event(event))
return; return true;
/* Wait for something to happen. */ /* Wait for something to happen. */
if ((time_to_wait > MAX_WAIT_TIME) || (time_to_wait == 0u)) if ((time_to_wait > MAX_WAIT_TIME) || (time_to_wait == 0u))
@ -715,3 +719,8 @@ void jtk_wake(void)
XPutBackEvent(g_display, &event); XPutBackEvent(g_display, &event);
XUnlockDisplay(g_display); XUnlockDisplay(g_display);
} }
void jtk_quit(void)
{
g_quitting = true;
}