[clutter/wip/backend-next] backend: Clean up the device manager creation
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [clutter/wip/backend-next] backend: Clean up the device manager creation
- Date: Fri, 4 Nov 2011 19:28:11 +0000 (UTC)
commit 91d4465a8c648b599a513de09ea3077888d43722
Author: Emmanuele Bassi <ebassi linux intel com>
Date: Fri Nov 4 19:25:54 2011 +0000
backend: Clean up the device manager creation
Create the device manager during the event initialization, where it
makes sense.
This allows us to get rid of the per-backend get_device_manager()
virtual function, and just store the DeviceManager pointer into the
ClutterBackend structure.
clutter/cex100/clutter-backend-cex100.c | 25 ------------------------
clutter/clutter-backend-private.h | 10 +++++---
clutter/clutter-backend.c | 13 ++++++++++++
clutter/clutter-device-manager.c | 7 +----
clutter/egl/clutter-backend-eglnative.c | 26 -------------------------
clutter/evdev/clutter-device-manager-evdev.c | 12 ++--------
clutter/gdk/clutter-backend-gdk.c | 25 +++++++----------------
clutter/osx/clutter-backend-osx.c | 27 +++----------------------
clutter/win32/clutter-backend-win32.c | 19 +-----------------
clutter/x11/clutter-backend-x11.c | 13 +----------
10 files changed, 39 insertions(+), 138 deletions(-)
---
diff --git a/clutter/cex100/clutter-backend-cex100.c b/clutter/cex100/clutter-backend-cex100.c
index 8b9b50c..264dc00 100644
--- a/clutter/cex100/clutter-backend-cex100.c
+++ b/clutter/cex100/clutter-backend-cex100.c
@@ -62,24 +62,6 @@ static guint gdl_n_buffers = CLUTTER_CEX100_TRIPLE_BUFFERING;
G_DEFINE_TYPE (ClutterBackendCex100, clutter_backend_cex100, CLUTTER_TYPE_BACKEND);
-static ClutterDeviceManager *
-clutter_backend_cex100_get_device_manager (ClutterBackend *backend)
-{
- ClutterBackendCex100 *backend_cex100 = CLUTTER_BACKEND_CEX100 (backend);
-
-#ifdef HAVE_EVDEV
- if (G_UNLIKELY (backend_cex100->device_manager == NULL))
- {
- backend_cex100->device_manager =
- g_object_new (CLUTTER_TYPE_DEVICE_MANAGER_EVDEV,
- "backend", backend_cex100,
- NULL);
- }
-#endif /* HAVE_EVDEV */
-
- return backend_cex100->device_manager;
-}
-
static void
clutter_backend_cex100_dispose (GObject *gobject)
{
@@ -91,12 +73,6 @@ clutter_backend_cex100_dispose (GObject *gobject)
backend_cex100->event_timer = NULL;
}
- if (backend_cex100->device_manager != NULL)
- {
- g_object_unref (backend_cex100->device_manager);
- backend_cex100->device_manager = NULL;
- }
-
G_OBJECT_CLASS (clutter_backend_cex100_parent_class)->dispose (gobject);
}
@@ -145,7 +121,6 @@ clutter_backend_cex100_class_init (ClutterBackendCex100Class *klass)
backend_class->stage_window_type = CLUTTER_TYPE_STAGE_COGL;
- backend_class->get_device_manager = clutter_backend_cex100_get_device_manager;
backend_class->get_display = clutter_backend_cex100_get_display;
}
diff --git a/clutter/clutter-backend-private.h b/clutter/clutter-backend-private.h
index c9ba24a..6816bac 100644
--- a/clutter/clutter-backend-private.h
+++ b/clutter/clutter-backend-private.h
@@ -39,11 +39,13 @@ typedef struct _ClutterBackendPrivate ClutterBackendPrivate;
struct _ClutterBackend
{
/*< private >*/
- GObject parent_instance;
+ GObject parent_instance;
- CoglRenderer *cogl_renderer;
- CoglDisplay *cogl_display;
- CoglContext *cogl_context;
+ CoglRenderer *cogl_renderer;
+ CoglDisplay *cogl_display;
+ CoglContext *cogl_context;
+
+ ClutterDeviceManager *device_manager;
ClutterBackendPrivate *priv;
};
diff --git a/clutter/clutter-backend.c b/clutter/clutter-backend.c
index 4f9e1e1..fe9cba7 100644
--- a/clutter/clutter-backend.c
+++ b/clutter/clutter-backend.c
@@ -504,6 +504,18 @@ clutter_backend_real_init_events (ClutterBackend *backend)
g_error ("Unknown input backend");
}
+static ClutterDeviceManager *
+clutter_backend_real_get_device_manager (ClutterBackend *backend)
+{
+ if (G_UNLIKELY (backend->device_manager == NULL))
+ {
+ g_critical ("No device manager available, expect broken input");
+ return NULL;
+ }
+
+ return backend->device_manager;
+}
+
static gboolean
clutter_backend_real_translate_event (ClutterBackend *backend,
gpointer native,
@@ -603,6 +615,7 @@ clutter_backend_class_init (ClutterBackendClass *klass)
klass->font_changed = clutter_backend_real_font_changed;
klass->init_events = clutter_backend_real_init_events;
+ klass->get_device_manager = clutter_backend_real_get_device_manager;
klass->translate_event = clutter_backend_real_translate_event;
klass->create_context = clutter_backend_real_create_context;
klass->ensure_context = clutter_backend_real_ensure_context;
diff --git a/clutter/clutter-device-manager.c b/clutter/clutter-device-manager.c
index cf0d4fc..fc32278 100644
--- a/clutter/clutter-device-manager.c
+++ b/clutter/clutter-device-manager.c
@@ -200,12 +200,9 @@ clutter_device_manager_init (ClutterDeviceManager *self)
ClutterDeviceManager *
clutter_device_manager_get_default (void)
{
- ClutterBackendClass *klass;
+ ClutterBackend *backend = clutter_get_default_backend ();
- klass = CLUTTER_BACKEND_GET_CLASS (clutter_get_default_backend ());
- g_assert (klass->get_device_manager != NULL);
-
- return klass->get_device_manager (clutter_get_default_backend ());
+ return backend->device_manager;
}
/**
diff --git a/clutter/egl/clutter-backend-eglnative.c b/clutter/egl/clutter-backend-eglnative.c
index 8d0f1a6..35ba3df 100644
--- a/clutter/egl/clutter-backend-eglnative.c
+++ b/clutter/egl/clutter-backend-eglnative.c
@@ -57,24 +57,6 @@
G_DEFINE_TYPE (ClutterBackendEglNative, clutter_backend_egl_native, CLUTTER_TYPE_BACKEND);
-static ClutterDeviceManager *
-clutter_backend_egl_native_get_device_manager (ClutterBackend *backend)
-{
- ClutterBackendEglNative *backend_egl_native = CLUTTER_BACKEND_EGL_NATIVE (backend);
-
-#ifdef HAVE_EVDEV
- if (G_UNLIKELY (backend_egl_native->device_manager == NULL))
- {
- backend_egl_native->device_manager =
- g_object_new (CLUTTER_TYPE_DEVICE_MANAGER_EVDEV,
- "backend", backend_egl_native,
- NULL);
- }
-#endif
-
- return backend_egl_native->device_manager;
-}
-
static void
clutter_backend_egl_native_dispose (GObject *gobject)
{
@@ -86,12 +68,6 @@ clutter_backend_egl_native_dispose (GObject *gobject)
backend_egl_native->event_timer = NULL;
}
- if (backend_egl_native->device_manager != NULL)
- {
- g_object_unref (backend_egl_native->device_manager);
- backend_egl_native->device_manager = NULL;
- }
-
G_OBJECT_CLASS (clutter_backend_egl_native_parent_class)->dispose (gobject);
}
@@ -104,8 +80,6 @@ clutter_backend_egl_native_class_init (ClutterBackendEglNativeClass *klass)
gobject_class->dispose = clutter_backend_egl_native_dispose;
backend_class->stage_window_type = CLUTTER_TYPE_STAGE_COGL;
-
- backend_class->get_device_manager = clutter_backend_egl_native_get_device_manager;
}
static void
diff --git a/clutter/evdev/clutter-device-manager-evdev.c b/clutter/evdev/clutter-device-manager-evdev.c
index edc01bf..26079f1 100644
--- a/clutter/evdev/clutter-device-manager-evdev.c
+++ b/clutter/evdev/clutter-device-manager-evdev.c
@@ -847,20 +847,14 @@ clutter_device_manager_evdev_init (ClutterDeviceManagerEvdev *self)
self->priv = CLUTTER_DEVICE_MANAGER_EVDEV_GET_PRIVATE (self);
}
-/*
- * _clutter_events_evdev_init() and _clutter_events_evdev_uninit() are the two
- * symbol to use the evdev event backend from the EGL backend
- */
-
void
_clutter_events_evdev_init (ClutterBackend *backend)
{
- ClutterDeviceManager *dummy G_GNUC_UNUSED;
-
CLUTTER_NOTE (EVENT, "Initializing evdev backend");
- /* we need to create the device manager here */
- dummy = clutter_device_manager_get_default ();
+ backend->device_manager = g_object_new (CLUTTER_TYPE_DEVICE_MANAGER_EVDEV,
+ "backend", backend,
+ NULL);
}
void
diff --git a/clutter/gdk/clutter-backend-gdk.c b/clutter/gdk/clutter-backend-gdk.c
index 14650a3..00e5599 100644
--- a/clutter/gdk/clutter-backend-gdk.c
+++ b/clutter/gdk/clutter-backend-gdk.c
@@ -191,8 +191,16 @@ gdk_event_handler (GdkEvent *event,
void
_clutter_backend_gdk_events_init (ClutterBackend *backend)
{
+ ClutterBackendGdk *backend_gdk = CLUTTER_BACKEND_GDK (backend);
+
CLUTTER_NOTE (EVENT, "initialising the event loop");
+ backend->device_manager =
+ g_object_new (CLUTTER_TYPE_DEVICE_MANAGER_GDK,
+ "backend", backend,
+ "gdk-display", backend_gdk->display,
+ NULL);
+
if (!disable_event_retrieval)
gdk_event_handler_set (gdk_event_handler, NULL, NULL);
}
@@ -249,22 +257,6 @@ clutter_backend_gdk_free_event_data (ClutterBackend *backend,
gdk_event_free (gdk_event);
}
-static ClutterDeviceManager *
-clutter_backend_gdk_get_device_manager (ClutterBackend *backend)
-{
- ClutterBackendGdk *backend_gdk = CLUTTER_BACKEND_GDK (backend);
-
- if (G_UNLIKELY (backend_gdk->device_manager == NULL))
- {
- backend_gdk->device_manager = g_object_new (CLUTTER_TYPE_DEVICE_MANAGER_GDK,
- "backend", backend_gdk,
- "gdk-display", backend_gdk->display,
- NULL);
- }
-
- return backend_gdk->device_manager;
-}
-
static CoglRenderer *
clutter_backend_gdk_get_renderer (ClutterBackend *backend,
GError **error)
@@ -381,7 +373,6 @@ clutter_backend_gdk_class_init (ClutterBackendGdkClass *klass)
backend_class->post_parse = _clutter_backend_gdk_post_parse;
backend_class->get_features = clutter_backend_gdk_get_features;
- backend_class->get_device_manager = clutter_backend_gdk_get_device_manager;
backend_class->copy_event_data = clutter_backend_gdk_copy_event_data;
backend_class->free_event_data = clutter_backend_gdk_free_event_data;
diff --git a/clutter/osx/clutter-backend-osx.c b/clutter/osx/clutter-backend-osx.c
index 9f7d80c..020a0ae 100644
--- a/clutter/osx/clutter-backend-osx.c
+++ b/clutter/osx/clutter-backend-osx.c
@@ -94,27 +94,6 @@ clutter_backend_osx_create_stage (ClutterBackend *backend,
return impl;
}
-static inline void
-clutter_backend_osx_create_device_manager (ClutterBackendOSX *backend_osx)
-{
- if (backend_osx->device_manager != NULL)
- return;
-
- backend_osx->device_manager = g_object_new (CLUTTER_TYPE_DEVICE_MANAGER_OSX,
- "backend", CLUTTER_BACKEND(backend_osx),
- NULL);
-}
-
-static ClutterDeviceManager *
-clutter_backend_osx_get_device_manager (ClutterBackend *backend)
-{
- ClutterBackendOSX *backend_osx = CLUTTER_BACKEND_OSX (backend);
-
- clutter_backend_osx_create_device_manager (backend_osx);
-
- return backend_osx->device_manager;
-}
-
void
_clutter_backend_osx_events_init (ClutterBackend *backend)
{
@@ -125,7 +104,10 @@ _clutter_backend_osx_events_init (ClutterBackend *backend)
CLUTTER_NOTE (BACKEND, "init_events");
- clutter_backend_osx_create_device_manager (backend_osx);
+ backend->device_manager = backend_osx->device_manager =
+ g_object_new (CLUTTER_TYPE_DEVICE_MANAGER_OSX,
+ "backend", CLUTTER_BACKEND(backend_osx),
+ NULL);
_clutter_osx_event_loop_init ();
}
@@ -256,5 +238,4 @@ clutter_backend_osx_class_init (ClutterBackendOSXClass *klass)
backend_class->create_stage = clutter_backend_osx_create_stage;
backend_class->create_context = clutter_backend_osx_create_context;
backend_class->ensure_context = clutter_backend_osx_ensure_context;
- backend_class->get_device_manager = clutter_backend_osx_get_device_manager;
}
diff --git a/clutter/win32/clutter-backend-win32.c b/clutter/win32/clutter-backend-win32.c
index cc4fe34..608a66e 100644
--- a/clutter/win32/clutter-backend-win32.c
+++ b/clutter/win32/clutter-backend-win32.c
@@ -59,7 +59,7 @@ clutter_backend_win32_init_events (ClutterBackend *backend)
CLUTTER_NOTE (EVENT, "initialising the event loop");
- backend_win32->device_manager =
+ backend->device_manager =
g_object_new (CLUTTER_TYPE_DEVICE_MANAGER_WIN32,
"backend", backend_win32,
NULL);
@@ -168,22 +168,6 @@ clutter_backend_win32_get_features (ClutterBackend *backend)
| CLUTTER_FEATURE_STAGE_CURSOR;
}
-static ClutterDeviceManager *
-clutter_backend_win32_get_device_manager (ClutterBackend *backend)
-{
- ClutterBackendWin32 *backend_win32 = CLUTTER_BACKEND_WIN32 (backend);
-
- if (G_UNLIKELY (backend_win32->device_manager == NULL))
- {
- backend_win32->device_manager =
- g_object_new (CLUTTER_TYPE_DEVICE_MANAGER_WIN32,
- "backend", backend_win32,
- NULL);
- }
-
- return backend_win32->device_manager;
-}
-
/**
* clutter_win32_disable_event_retrieval
*
@@ -222,7 +206,6 @@ clutter_backend_win32_class_init (ClutterBackendWin32Class *klass)
backend_class->init_events = clutter_backend_win32_init_events;
backend_class->add_options = clutter_backend_win32_add_options;
backend_class->get_features = clutter_backend_win32_get_features;
- backend_class->get_device_manager = clutter_backend_win32_get_device_manager;
}
static void
diff --git a/clutter/x11/clutter-backend-x11.c b/clutter/x11/clutter-backend-x11.c
index aea10e9..acafccb 100644
--- a/clutter/x11/clutter-backend-x11.c
+++ b/clutter/x11/clutter-backend-x11.c
@@ -277,6 +277,8 @@ clutter_backend_x11_create_device_manager (ClutterBackendX11 *backend_x11)
}
backend = CLUTTER_BACKEND (backend_x11);
+ backend->device_manager = backend_x11->device_manager;
+
translator = CLUTTER_EVENT_TRANSLATOR (backend_x11->device_manager);
_clutter_backend_add_event_translator (backend, translator);
}
@@ -589,16 +591,6 @@ clutter_backend_x11_free_event_data (ClutterBackend *backend,
_clutter_event_x11_free (event_x11);
}
-static ClutterDeviceManager *
-clutter_backend_x11_get_device_manager (ClutterBackend *backend)
-{
- ClutterBackendX11 *backend_x11 = CLUTTER_BACKEND_X11 (backend);
-
- clutter_backend_x11_create_device_manager (backend_x11);
-
- return backend_x11->device_manager;
-}
-
static void
update_last_event_time (ClutterBackendX11 *backend_x11,
XEvent *xevent)
@@ -815,7 +807,6 @@ clutter_backend_x11_class_init (ClutterBackendX11Class *klass)
backend_class->add_options = clutter_backend_x11_add_options;
backend_class->get_features = clutter_backend_x11_get_features;
- backend_class->get_device_manager = clutter_backend_x11_get_device_manager;
backend_class->copy_event_data = clutter_backend_x11_copy_event_data;
backend_class->free_event_data = clutter_backend_x11_free_event_data;
backend_class->translate_event = clutter_backend_x11_translate_event;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]