backend: Move event translators to the base class

In the future, we want event translators to be the way to handle events
in backends. For this reason, they should be a part of the base abstract
ClutterBackend class, and not an X11-only concept.
This commit is contained in:
Emmanuele Bassi
2011-02-09 12:20:56 +00:00
parent e9fa986ccc
commit 56d133f908
8 changed files with 96 additions and 65 deletions

View File

@ -68,6 +68,8 @@ struct _ClutterBackendPrivate
gfloat units_per_em;
gint32 units_serial;
GList *event_translators;
};
enum
@ -84,6 +86,7 @@ static guint backend_signals[LAST_SIGNAL] = { 0, };
static void
clutter_backend_dispose (GObject *gobject)
{
ClutterBackendPrivate *priv = CLUTTER_BACKEND (gobject)->priv;
ClutterMainContext *clutter_context;
clutter_context = _clutter_context_get_default ();
@ -97,6 +100,12 @@ clutter_backend_dispose (GObject *gobject)
clutter_context->events_queue = NULL;
}
if (priv->event_translators != NULL)
{
g_list_free (priv->event_translators);
priv->event_translators = NULL;
}
G_OBJECT_CLASS (clutter_backend_parent_class)->dispose (gobject);
}
@ -220,6 +229,35 @@ clutter_backend_real_redraw (ClutterBackend *backend,
_clutter_stage_window_redraw (impl);
}
static gboolean
clutter_backend_real_translate_event (ClutterBackend *backend,
gpointer native,
ClutterEvent *event)
{
ClutterBackendPrivate *priv = backend->priv;
GList *l;
for (l = priv->event_translators;
l != NULL;
l = l->next)
{
ClutterEventTranslator *translator = l->data;
ClutterTranslateReturn retval;
retval = _clutter_event_translator_translate_event (translator,
native,
event);
if (retval == CLUTTER_TRANSLATE_QUEUE)
return TRUE;
if (retval == CLUTTER_TRANSLATE_REMOVE)
return FALSE;
}
return FALSE;
}
static void
clutter_backend_class_init (ClutterBackendClass *klass)
{
@ -259,6 +297,7 @@ clutter_backend_class_init (ClutterBackendClass *klass)
klass->resolution_changed = clutter_backend_real_resolution_changed;
klass->font_changed = clutter_backend_real_font_changed;
klass->translate_event = clutter_backend_real_translate_event;
klass->redraw = clutter_backend_real_redraw;
}
@ -907,3 +946,29 @@ _clutter_backend_translate_event (ClutterBackend *backend,
native,
event);
}
void
_clutter_backend_add_event_translator (ClutterBackend *backend,
ClutterEventTranslator *translator)
{
ClutterBackendPrivate *priv = backend->priv;
if (g_list_find (priv->event_translators, translator) != NULL)
return;
priv->event_translators =
g_list_prepend (priv->event_translators, translator);
}
void
_clutter_backend_remove_event_translator (ClutterBackend *backend,
ClutterEventTranslator *translator)
{
ClutterBackendPrivate *priv = backend->priv;
if (g_list_find (priv->event_translators, translator) == NULL)
return;
priv->event_translators =
g_list_remove (priv->event_translators, translator);
}