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 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);

View File

@ -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();
}

View File

@ -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;
}