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 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);
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user