add jtk.quit()
This commit is contained in:
parent
d3203c7790
commit
acb25132e4
@ -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);
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user