From 49c34907f5cd5928680eb0f7af251ada800f7d1f Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sat, 14 Oct 2017 11:36:07 -0400 Subject: [PATCH] add Jtk_CheckEvent() --- src/gui/jtk/Jtk_event.cc | 78 ++++++++++++++++++++++------------------ src/gui/jtk/Jtk_event.h | 1 + 2 files changed, 44 insertions(+), 35 deletions(-) diff --git a/src/gui/jtk/Jtk_event.cc b/src/gui/jtk/Jtk_event.cc index 7f0f85b..966069f 100644 --- a/src/gui/jtk/Jtk_event.cc +++ b/src/gui/jtk/Jtk_event.cc @@ -335,47 +335,55 @@ static bool ProcessXEvent(XEvent * x_event, Jtk_Event * event) return false; } +bool Jtk_CheckEvent(Jtk_Event * event) +{ + /* First check for an X event. */ + while (XPending(g_display) > 0) + { + XEvent x_event; + XNextEvent(g_display, &x_event); + if (ProcessXEvent(&x_event, event)) + return true; + } + + /* Next check if any timer has expired. */ + size_t timer_id = Jtk_GetExpiredTimer(); + if (timer_id != (size_t)-1) + { +#if 0 + auto it = g_key_repeat_timers.find(timer_id); + if (it != g_key_repeat_timers.end()) + { + event->type = JTK_EVENT_KEY_PRESS; + event->key.repeat = true; + event->key.key = XKeyToJtkKey(it->second); + event->key.x_keycode = it->second; + } + else + { +#endif + event->type = JTK_EVENT_TIMER; + event->timer.timer_id = timer_id; + event->timer.user1 = Jtk_GetTimerUserData(timer_id, 0u); + event->timer.user2 = Jtk_GetTimerUserData(timer_id, 1u); +#if 0 + } +#endif + Jtk_ServiceTimer(timer_id); + return true; + } + + return false; +} + void Jtk_WaitEvent(Jtk_Event * event) { for (;;) { - /* First check for an X event. */ - while (XPending(g_display) > 0) - { - XEvent x_event; - XNextEvent(g_display, &x_event); - if (ProcessXEvent(&x_event, event)) - return; - } - - /* Next check if any timer has expired. */ - size_t timer_id = Jtk_GetExpiredTimer(); - if (timer_id != (size_t)-1) - { -#if 0 - auto it = g_key_repeat_timers.find(timer_id); - if (it != g_key_repeat_timers.end()) - { - event->type = JTK_EVENT_KEY_PRESS; - event->key.repeat = true; - event->key.key = XKeyToJtkKey(it->second); - event->key.x_keycode = it->second; - } - else - { -#endif - event->type = JTK_EVENT_TIMER; - event->timer.timer_id = timer_id; - event->timer.user1 = Jtk_GetTimerUserData(timer_id, 0u); - event->timer.user2 = Jtk_GetTimerUserData(timer_id, 1u); -#if 0 - } -#endif - Jtk_ServiceTimer(timer_id); + if (Jtk_CheckEvent(event)) return; - } - /* Finally, wait for something to happen. */ + /* Wait for something to happen. */ uint64_t time_to_wait = Jtk_TimeToNextTimerExpiration(); if (time_to_wait > MAX_WAIT_TIME) { diff --git a/src/gui/jtk/Jtk_event.h b/src/gui/jtk/Jtk_event.h index 9091306..edd5f9c 100644 --- a/src/gui/jtk/Jtk_event.h +++ b/src/gui/jtk/Jtk_event.h @@ -52,6 +52,7 @@ typedef struct }; } Jtk_Event; +bool Jtk_CheckEvent(Jtk_Event * event); void Jtk_WaitEvent(Jtk_Event * event); #if 0 void Jtk_BeginKeyRepeat(Jtk_KeyEvent * key_event, uint32_t delay, uint32_t interval);