#include "chimara-glk.h"
#include "chimara-glk-private.h"
-extern GPrivate *glk_data_key;
+extern GPrivate glk_data_key;
#define EVENT_TIMEOUT_MICROSECONDS (3000000)
if(!priv->event_queue)
return;
- GTimeVal timeout;
- g_get_current_time(&timeout);
- g_time_val_add(&timeout, EVENT_TIMEOUT_MICROSECONDS);
+ gint64 timeout = g_get_monotonic_time() + EVENT_TIMEOUT_MICROSECONDS;
g_mutex_lock(&priv->event_lock);
/* Wait for room in the event queue */
while( g_queue_get_length(priv->event_queue) >= EVENT_QUEUE_MAX_LENGTH )
- if( !g_cond_timed_wait(&priv->event_queue_not_full, &priv->event_lock, &timeout) )
+ if( !g_cond_wait_until(&priv->event_queue_not_full, &priv->event_lock, timeout) )
{
- /* Drop the event after 3 seconds */
+ /* Drop the event if the event queue is still not emptying */
g_mutex_unlock(&priv->event_lock);
return;
}
static void
get_appropriate_event(event_t *event)
{
- ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
+ ChimaraGlkPrivate *glk_data = g_private_get(&glk_data_key);
g_mutex_lock(&glk_data->event_lock);
flush_window_buffer(win);
}
- ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
+ ChimaraGlkPrivate *glk_data = g_private_get(&glk_data_key);
get_appropriate_event(event);
{
g_return_if_fail(event != NULL);
- ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
-
+ ChimaraGlkPrivate *glk_data = g_private_get(&glk_data_key);
+
event->type = evtype_None;
event->win = NULL;
event->val1 = 0;