mirror of
https://github.com/brl/mutter.git
synced 2024-11-21 15:40:41 -05:00
clutter: Switch to GAsyncQueue for ClutterMainContext event queue
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1403
This commit is contained in:
parent
6f3ce4de24
commit
6496cd7c55
@ -1504,14 +1504,17 @@ ClutterEvent *
|
|||||||
clutter_event_get (void)
|
clutter_event_get (void)
|
||||||
{
|
{
|
||||||
ClutterMainContext *context = _clutter_context_get_default ();
|
ClutterMainContext *context = _clutter_context_get_default ();
|
||||||
|
ClutterEvent *event;
|
||||||
|
|
||||||
if (context->events_queue == NULL)
|
event = g_async_queue_try_pop (context->events_queue);
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (g_queue_is_empty (context->events_queue))
|
return event;
|
||||||
return NULL;
|
}
|
||||||
|
|
||||||
return g_queue_pop_tail (context->events_queue);
|
static gboolean
|
||||||
|
spin_context (gpointer data)
|
||||||
|
{
|
||||||
|
return G_SOURCE_REMOVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1522,9 +1525,6 @@ _clutter_event_push (const ClutterEvent *event,
|
|||||||
|
|
||||||
g_assert (context != NULL);
|
g_assert (context != NULL);
|
||||||
|
|
||||||
if (context->events_queue == NULL)
|
|
||||||
context->events_queue = g_queue_new ();
|
|
||||||
|
|
||||||
if (do_copy)
|
if (do_copy)
|
||||||
{
|
{
|
||||||
ClutterEvent *copy;
|
ClutterEvent *copy;
|
||||||
@ -1533,7 +1533,8 @@ _clutter_event_push (const ClutterEvent *event,
|
|||||||
event = copy;
|
event = copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_queue_push_head (context->events_queue, (gpointer) event);
|
g_async_queue_push (context->events_queue, (gpointer) event);
|
||||||
|
g_idle_add (spin_context, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1570,10 +1571,7 @@ clutter_events_pending (void)
|
|||||||
|
|
||||||
g_return_val_if_fail (context != NULL, FALSE);
|
g_return_val_if_fail (context != NULL, FALSE);
|
||||||
|
|
||||||
if (context->events_queue == NULL)
|
return g_async_queue_length (context->events_queue) > 0;
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
return g_queue_is_empty (context->events_queue) == FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -697,6 +697,8 @@ _clutter_context_get_default (void)
|
|||||||
ctx->settings = clutter_settings_get_default ();
|
ctx->settings = clutter_settings_get_default ();
|
||||||
_clutter_settings_set_backend (ctx->settings, ctx->backend);
|
_clutter_settings_set_backend (ctx->settings, ctx->backend);
|
||||||
|
|
||||||
|
ctx->events_queue = g_async_queue_new ();
|
||||||
|
|
||||||
ctx->last_repaint_id = 1;
|
ctx->last_repaint_id = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2286,15 +2288,16 @@ void
|
|||||||
_clutter_clear_events_queue (void)
|
_clutter_clear_events_queue (void)
|
||||||
{
|
{
|
||||||
ClutterMainContext *context = _clutter_context_get_default ();
|
ClutterMainContext *context = _clutter_context_get_default ();
|
||||||
|
ClutterEvent *event;
|
||||||
|
|
||||||
if (context->events_queue != NULL)
|
/* Lock the queue for as long as it lives */
|
||||||
{
|
g_async_queue_lock (context->events_queue);
|
||||||
g_queue_foreach (context->events_queue,
|
|
||||||
(GFunc) clutter_event_free,
|
while ((event = g_async_queue_try_pop_unlocked (context->events_queue)))
|
||||||
NULL);
|
clutter_event_free (event);
|
||||||
g_queue_free (context->events_queue);
|
|
||||||
context->events_queue = NULL;
|
g_async_queue_unref (context->events_queue);
|
||||||
}
|
context->events_queue = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ClutterPickMode
|
ClutterPickMode
|
||||||
|
@ -122,7 +122,7 @@ struct _ClutterMainContext
|
|||||||
ClutterStageManager *stage_manager;
|
ClutterStageManager *stage_manager;
|
||||||
|
|
||||||
/* the main event queue */
|
/* the main event queue */
|
||||||
GQueue *events_queue;
|
GAsyncQueue *events_queue;
|
||||||
|
|
||||||
/* the event filters added via clutter_event_add_filter. these are
|
/* the event filters added via clutter_event_add_filter. these are
|
||||||
* ordered from least recently added to most recently added */
|
* ordered from least recently added to most recently added */
|
||||||
|
Loading…
Reference in New Issue
Block a user