[clutter/multi-backend: 13/15] egl: First attempt at cleaning up the EGL native backend



commit f8e13b44fed368ab8ff8c86cf461763a78d10714
Author: Emmanuele Bassi <ebassi linux intel com>
Date:   Mon Oct 3 12:25:53 2011 +0100

    egl: First attempt at cleaning up the EGL native backend
    
    At least, let's make it compile when built along with the other
    backends. In reality, it still needs to be verified as working.

 clutter/Makefile.am                          |   16 ++-
 clutter/clutter-main.c                       |    4 +-
 clutter/cogl/clutter-backend-cogl.c          |   49 +-------
 clutter/cogl/clutter-stage-cogl.h            |    4 -
 clutter/egl/clutter-backend-eglnative.c      |  159 ++++++++++++++++++++------
 clutter/egl/clutter-backend-eglnative.h      |    5 -
 clutter/egl/clutter-egl.h                    |    3 +
 clutter/evdev/clutter-device-manager-evdev.c |   11 +-
 clutter/tslib/clutter-event-tslib.c          |   26 +----
 clutter/tslib/clutter-event-tslib.h          |   35 ++++++
 configure.ac                                 |   48 ++++----
 11 files changed, 220 insertions(+), 140 deletions(-)
---
diff --git a/clutter/Makefile.am b/clutter/Makefile.am
index e2a03cd..f70704d 100644
--- a/clutter/Makefile.am
+++ b/clutter/Makefile.am
@@ -525,6 +525,11 @@ egl_source_h = \
 	$(srcdir)/egl/clutter-egl.h		\
 	$(NULL)
 
+egl_source_h_priv = $(srcdir)/egl/clutter-backend-eglnative.h
+egl_source_c = $(srcdir)/egl/clutter-backend-eglnative.c
+egl_source_c_priv =
+
+egl_tslib_h = $(srcdir)/tslib/clutter-event-tslib.h
 egl_tslib_c = $(srcdir)/tslib/clutter-event-tslib.c
 
 evdev_c_priv = \
@@ -543,16 +548,17 @@ BUILT_SOURCES += $(cex_h)
 EXTRA_DIST += $(srcdir)/$(cex_h).in
 
 if USE_TSLIB
-backend_source_c_priv += $(egl_tslib_c)
+egl_source_c_priv += $(egl_tslib_c)
+egl_source_h_priv += $(egl_tslib_h)
 endif # SUPPORT_TSLIB
 
 if USE_EVDEV
-backend_source_c_priv += $(evdev_c_priv)
-backend_source_h_priv += $(evdev_h_priv)
+egl_source_c_priv += $(evdev_c_priv)
+egl_source_h_priv += $(evdev_h_priv)
 endif # SUPPORT_EVDEV
 
 if SUPPORT_CEX100
-backend_source_h += $(cex_h)
+egl_source_h += $(cex_h)
 
 clutter-cex100-$(CLUTTER_API_VERSION).pc: clutter-$(CLUTTER_API_VERSION).pc
 	$(QUIET_GEN)cp -f $< $(@F)
@@ -564,6 +570,8 @@ endif # SUPPORT_CEX100
 
 if SUPPORT_EGL
 backend_source_h += $(egl_source_h)
+backend_source_c += $(egl_source_c)
+backend_source_h_priv += $(egl_source_h_priv)
 
 clutteregl_includedir = $(clutter_includedir)/egl
 clutteregl_include_HEADERS = $(egl_source_h)
diff --git a/clutter/clutter-main.c b/clutter/clutter-main.c
index bd66039..3ff3e8f 100644
--- a/clutter/clutter-main.c
+++ b/clutter/clutter-main.c
@@ -1330,7 +1330,7 @@ clutter_context_get_default_unlocked (void)
 #endif
 #ifdef CLUTTER_WINDOWING_EGL
       if (backend == NULL || strcmp (backend, CLUTTER_EGL_NATIVE_BACKEND) == 0)
-        ctx->backend = g_object_new (CLUTTER_TYPE_BACKEND_EGLNATIVE, NULL);
+        ctx->backend = g_object_new (CLUTTER_TYPE_BACKEND_EGL_NATIVE, NULL);
       else
 #endif
 #ifdef CLUTTER_WINDOWING_X11
@@ -3602,7 +3602,7 @@ clutter_check_backend (const char *backend_type)
   else
 #endif
 #ifdef CLUTTER_WINDOWING_EGL
-  if (strcmp (backend_type, CLUTTER_EGL_BACKEND) == 0 &&
+  if (strcmp (backend_type, CLUTTER_EGL_NATIVE_BACKEND) == 0 &&
       CLUTTER_IS_BACKEND_EGL_NATIVE (context->backend))
     return TRUE;
   else
diff --git a/clutter/cogl/clutter-backend-cogl.c b/clutter/cogl/clutter-backend-cogl.c
index aa8432c..af0ad14 100644
--- a/clutter/cogl/clutter-backend-cogl.c
+++ b/clutter/cogl/clutter-backend-cogl.c
@@ -50,13 +50,6 @@ static gchar *clutter_vblank = NULL;
 
 G_DEFINE_TYPE (ClutterBackendCogl, _clutter_backend_cogl, CLUTTER_TYPE_BACKEND);
 
-static void
-clutter_backend_at_exit (void)
-{
-  if (backend_singleton)
-    g_object_run_dispose (G_OBJECT (backend_singleton));
-}
-
 const gchar*
 _clutter_backend_cogl_get_vblank (void)
 {
@@ -86,8 +79,6 @@ static gboolean
 clutter_backend_cogl_post_parse (ClutterBackend  *backend,
                                  GError         **error)
 {
-  g_atexit (clutter_backend_at_exit);
-
   return TRUE;
 }
 
@@ -201,44 +192,16 @@ _clutter_backend_cogl_class_init (ClutterBackendCoglClass *klass)
   ClutterBackendClass *backend_class = CLUTTER_BACKEND_CLASS (klass);
 
   gobject_class->constructor = clutter_backend_cogl_constructor;
-  gobject_class->dispose     = clutter_backend_cogl_dispose;
-  gobject_class->finalize    = clutter_backend_cogl_finalize;
+  gobject_class->dispose = clutter_backend_cogl_dispose;
+  gobject_class->finalize = clutter_backend_cogl_finalize;
 
-  backend_class->pre_parse          = clutter_backend_cogl_pre_parse;
-  backend_class->post_parse         = clutter_backend_cogl_post_parse;
-  backend_class->get_features       = clutter_backend_cogl_get_features;
-  backend_class->ensure_context     = clutter_backend_cogl_ensure_context;
+  backend_class->pre_parse = clutter_backend_cogl_pre_parse;
+  backend_class->post_parse = clutter_backend_cogl_post_parse;
+  backend_class->get_features = clutter_backend_cogl_get_features;
+  backend_class->ensure_context = clutter_backend_cogl_ensure_context;
 }
 
 static void
 _clutter_backend_cogl_init (ClutterBackendCogl *backend_cogl)
 {
-
-}
-
-#ifdef COGL_HAS_EGL_SUPPORT
-EGLDisplay
-clutter_eglx_display (void)
-{
-  return clutter_egl_get_egl_display ();
-}
-
-EGLDisplay
-clutter_egl_display (void)
-{
-  return clutter_egl_get_egl_display ();
 }
-
-EGLDisplay
-clutter_egl_get_egl_display (void)
-{
-  if (backend_singleton == NULL)
-    {
-      g_critical ("%s has been called before clutter_init()", G_STRFUNC);
-      return 0;
-    }
-
-  return cogl_egl_context_get_egl_display (backend_singleton->cogl_context);
-}
-#endif
-
diff --git a/clutter/cogl/clutter-stage-cogl.h b/clutter/cogl/clutter-stage-cogl.h
index b514c9b..d3a9b98 100644
--- a/clutter/cogl/clutter-stage-cogl.h
+++ b/clutter/cogl/clutter-stage-cogl.h
@@ -1,10 +1,6 @@
 #ifndef __CLUTTER_STAGE_COGL_H__
 #define __CLUTTER_STAGE_COGL_H__
 
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
 #include <glib-object.h>
 #include <cairo.h>
 #include <clutter/clutter-stage.h>
diff --git a/clutter/egl/clutter-backend-eglnative.c b/clutter/egl/clutter-backend-eglnative.c
index 70b5c26..fe7ad74 100644
--- a/clutter/egl/clutter-backend-eglnative.c
+++ b/clutter/egl/clutter-backend-eglnative.c
@@ -26,9 +26,7 @@
  *  Neil Roberts
  */
 
-#ifdef HAVE_CONFIG_H
 #include "config.h"
-#endif
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -46,6 +44,10 @@
 #include "clutter-device-manager-evdev.h"
 #endif
 
+#ifdef HAVE_TSLIB
+#include "clutter-event-tslib.h"
+#endif
+
 #include "clutter-debug.h"
 #include "clutter-private.h"
 #include "clutter-main.h"
@@ -54,6 +56,7 @@
 #ifdef COGL_HAS_EGL_SUPPORT
 #include "clutter-egl.h"
 #endif
+
 #ifdef CLUTTER_EGL_BACKEND_CEX100 
 #include "clutter-cex100.h"
 #endif
@@ -63,10 +66,9 @@ static gdl_plane_id_t gdl_plane = GDL_PLANE_ID_UPP_C;
 static guint gdl_n_buffers = CLUTTER_CEX100_TRIPLE_BUFFERING;
 #endif
 
-static gboolean gdl_plane_set = FALSE;
-static gboolean gdl_n_buffers_set = FALSE;
+#define clutter_backend_egl_native_get_type     _clutter_backend_egl_native_get_type
 
-G_DEFINE_TYPE (ClutterBackendEglNative, _clutter_backend_egl_native, CLUTTER_TYPE_BACKEND_COGL);
+G_DEFINE_TYPE (ClutterBackendEglNative, clutter_backend_egl_native, CLUTTER_TYPE_BACKEND_COGL);
 
 static ClutterDeviceManager *
 clutter_backend_egl_native_get_device_manager (ClutterBackend *backend)
@@ -89,31 +91,54 @@ clutter_backend_egl_native_get_device_manager (ClutterBackend *backend)
 static void
 clutter_backend_egl_native_init_events (ClutterBackend *backend)
 {
-#ifdef HAVE_TSLIB
-  _clutter_events_tslib_init (CLUTTER_BACKEND_EGL (backend));
-#endif
+  const char *input_backend = NULL;
+
+  input_backend = g_getenv ("CLUTTER_INPUT_BACKEND");
 
 #ifdef HAVE_EVDEV
-  _clutter_events_evdev_init (CLUTTER_BACKEND (backend));
+  if (input_backend != NULL &&
+      strcmp (input_backend, CLUTTER_EVDEV_INPUT_BACKEND) == 0)
+    _clutter_events_evdev_init (CLUTTER_BACKEND (backend));
+  else
 #endif
+#ifdef HAVE_TSLIB
+  if (input_backend != NULL &&
+      strcmp (input_backend, CLUTTER_TSLIB_INPUT_BACKEND) == 0)
+    _clutter_events_tslib_init (CLUTTER_BACKEND (backend));
+  else
+#endif
+  if (input_backend != NULL)
+    g_error ("Unrecognized input backend '%s'", input_backend);
+  else
+    g_error ("Unknown input backend");
 }
 
 static void
-clutter_backend_cogl_dispose (GObject *gobject)
+clutter_backend_egl_native_dispose (GObject *gobject)
 {
-#ifdef HAVE_TSLIB
   ClutterBackendEglNative *backend_egl_native = CLUTTER_BACKEND_EGL_NATIVE (gobject);
 
-  _clutter_events_tslib_uninit (backend_egl_native);
-
   if (backend_egl_native->event_timer != NULL)
     {
       g_timer_destroy (backend_egl_native->event_timer);
       backend_egl_native->event_timer = NULL;
     }
+
+#ifdef HAVE_TSLIB
+  _clutter_events_tslib_uninit (CLUTTER_BACKEND (gobject));
+#endif
+
+#ifdef HAVE_EVDEV
+  _clutter_events_evdev_uninit (CLUTTER_BACKEND (gobject));
+
+  if (backend_egl_native->device_manager != NULL)
+    {
+      g_object_unref (backend_egl_native->device_manager);
+      backend_egl_native->device_manager = NULL;
+    }
 #endif
 
-  G_OBJECT_CLASS (_clutter_backend_cogl_parent_class)->dispose (gobject);
+  G_OBJECT_CLASS (clutter_backend_egl_native_parent_class)->dispose (gobject);
 }
 
 static ClutterStageWindow *
@@ -123,7 +148,6 @@ clutter_backend_egl_native_create_stage (ClutterBackend  *backend,
 {
   ClutterBackendEglNative *backend_egl_native = CLUTTER_BACKEND_EGL_NATIVE (backend);
   ClutterStageWindow *stage;
-  ClutterStageCogl *stage_cogl;
 
   if (G_UNLIKELY (backend_egl_native->stage != NULL))
     {
@@ -159,8 +183,9 @@ clutter_backend_egl_native_create_context (ClutterBackend  *backend,
 
   swap_chain = cogl_swap_chain_new ();
 
-  if (gdl_n_buffers_set)
-    cogl_swap_chain_set_length (swap_chain, gdl_n_buffers);
+#if defined(CLUTTER_EGL_BACKEND_CEX100) && defined(COGL_HAS_GDL_SUPPORT)
+  cogl_swap_chain_set_length (swap_chain, gdl_n_buffers);
+#endif
 
   onscreen_template = cogl_onscreen_template_new (swap_chain);
   cogl_object_unref (swap_chain);
@@ -177,9 +202,8 @@ clutter_backend_egl_native_create_context (ClutterBackend  *backend,
   backend->cogl_display = cogl_display_new (backend->cogl_renderer,
                                             onscreen_template);
 
-#ifdef CLUTTER_EGL_BACKEND_CEX100 
-  if (gdl_plane_set)
-    cogl_gdl_display_set_plane (backend->cogl_display, gdl_plane);
+#if defined(CLUTTER_EGL_BACKEND_CEX100) && defined(COGL_HAS_GDL_SUPPORT)
+  cogl_gdl_display_set_plane (backend->cogl_display, gdl_plane);
 #endif /* CLUTTER_EGL_BACKEND_CEX100 */
 
   cogl_object_unref (backend->cogl_renderer);
@@ -203,6 +227,7 @@ error:
 
   if (onscreen_template != NULL)
     cogl_object_unref (onscreen_template);
+
   if (swap_chain != NULL)
     cogl_object_unref (swap_chain);
 
@@ -211,32 +236,31 @@ error:
       cogl_object_unref (backend->cogl_renderer);
       backend->cogl_renderer = NULL;
     }
+
   return FALSE;
 }
 
 static void
-_clutter_backend_egl_native_class_init (ClutterBackendEglNativeClass *klass)
+clutter_backend_egl_native_class_init (ClutterBackendEglNativeClass *klass)
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
   ClutterBackendClass *backend_class = CLUTTER_BACKEND_CLASS (klass);
 
-  gobject_class->dispose     = clutter_backend_egl_native_dispose;
-  gobject_class->finalize    = clutter_backend_egl_native_finalize;
+  gobject_class->dispose = clutter_backend_egl_native_dispose;
 
   backend_class->get_device_manager = clutter_backend_egl_native_get_device_manager;
-  backend_class->init_events        = clutter_backend_egl_native_init_events;
-  backend_class->create_stage       = clutter_backend_egl_native_create_stage;
-  backend_class->create_context     = clutter_backend_egl_native_create_context;
+  backend_class->init_events = clutter_backend_egl_native_init_events;
+  backend_class->create_stage = clutter_backend_egl_native_create_stage;
+  backend_class->create_context = clutter_backend_egl_native_create_context;
 }
 
 static void
-_clutter_backend_egl_native_init (ClutterBackendEglNative *backend_egl_native)
+clutter_backend_egl_native_init (ClutterBackendEglNative *backend_egl_native)
 {
-#ifdef HAVE_TSLIB
   backend_egl_native->event_timer = g_timer_new ();
-#endif
 }
 
+#ifdef CLUTTER_EGL_BACKEND_CEX100
 /**
  * clutter_cex100_set_plane:
  * @plane: FIXME
@@ -248,14 +272,13 @@ _clutter_backend_egl_native_init (ClutterBackendEglNative *backend_egl_native)
 void
 clutter_cex100_set_plane (gdl_plane_id_t plane)
 {
-#ifdef CLUTTER_EGL_BACKEND_CEX100
   g_return_if_fail (plane >= GDL_PLANE_ID_UPP_A && plane <= GDL_PLANE_ID_UPP_E);
 
   gdl_plane = plane;
-  gdl_plane_set = TRUE;
-#endif
 }
+#endif
 
+#ifdef CLUTTER_EGL_BACKEND_CEX100 
 /**
  * clutter_cex100_set_plane:
  * @mode: FIXME
@@ -267,11 +290,79 @@ clutter_cex100_set_plane (gdl_plane_id_t plane)
 void
 clutter_cex100_set_buffering_mode (ClutterCex100BufferingMode mode)
 {
-#ifdef CLUTTER_EGL_BACKEND_CEX100 
   g_return_if_fail (mode == CLUTTER_CEX100_DOUBLE_BUFFERING ||
                     mode == CLUTTER_CEX100_TRIPLE_BUFFERING);
 
   gdl_n_buffers = mode;
-  gdl_n_buffers_set = TRUE;
+}
+#endif
+
+/**
+ * clutter_eglx_display:
+ *
+ * Retrieves the EGL display used by Clutter.
+ *
+ * Return value: the EGL display, or 0
+ *
+ * Since: 0.6
+ *
+ * Deprecated: 1.6: Use clutter_egl_get_egl_display() instead.
+ */
+EGLDisplay
+clutter_eglx_display (void)
+{
+  return clutter_egl_get_egl_display ();
+}
+
+/**
+ * clutter_egl_display:
+ *
+ * Retrieves the EGL display used by Clutter.
+ *
+ * Return value: the EGL display used by Clutter, or 0
+ *
+ * Since: 0.6
+ *
+ * Deprecated: 1.6: Use clutter_egl_get_egl_display() instead.
+ */
+EGLDisplay
+clutter_egl_display (void)
+{
+  return clutter_egl_get_egl_display ();
+}
+
+/**
+ * clutter_egl_get_egl_display:
+ *
+ * Retrieves the EGL display used by Clutter, if it supports the
+ * EGL windowing system and if it is running using an EGL backend.
+ *
+ * Return value: the EGL display used by Clutter, or 0
+ *
+ * Since: 1.6
+ */
+EGLDisplay
+clutter_egl_get_egl_display (void)
+{
+  ClutterBackend *backend;
+
+  if (!_clutter_context_is_initialized ())
+    {
+      g_critical ("The Clutter backend has not been initialized yet");
+      return 0;
+    }
+
+  backend = clutter_get_default_backend ();
+
+  if (!CLUTTER_IS_BACKEND_EGL_NATIVE (backend))
+    {
+      g_critical ("The Clutter backend is not an EGL backend");
+      return 0;
+    }
+
+#if COGL_HAS_EGL_SUPPORT
+  return cogl_egl_context_get_egl_display (backend->cogl_context);
+#else
+  return 0;
 #endif
 }
diff --git a/clutter/egl/clutter-backend-eglnative.h b/clutter/egl/clutter-backend-eglnative.h
index 959e61c..5156339 100644
--- a/clutter/egl/clutter-backend-eglnative.h
+++ b/clutter/egl/clutter-backend-eglnative.h
@@ -70,11 +70,6 @@ struct _ClutterBackendEglNativeClass
 
 GType _clutter_backend_egl_native_get_type (void) G_GNUC_CONST;
 
-#ifdef HAVE_TSLIB
-void _clutter_events_tslib_init   (ClutterBackendEglNative *backend);
-void _clutter_events_tslib_uninit (ClutterBackendEglNative *backend);
-#endif
-
 G_END_DECLS
 
 #endif /* __CLUTTER_BACKEND_EGL_NATIVE_H__ */
diff --git a/clutter/egl/clutter-egl.h b/clutter/egl/clutter-egl.h
index 9371039..193290a 100644
--- a/clutter/egl/clutter-egl.h
+++ b/clutter/egl/clutter-egl.h
@@ -49,6 +49,9 @@
 
 G_BEGIN_DECLS
 
+#define CLUTTER_TSLIB_INPUT_BACKEND     "tslib"
+#define CLUTTER_EVDEV_INPUT_BACKEND     "evdev"
+
 #ifndef CLUTTER_DISABLE_DEPRECATED
 /**
  * clutter_eglx_display:
diff --git a/clutter/evdev/clutter-device-manager-evdev.c b/clutter/evdev/clutter-device-manager-evdev.c
index 03d08be..edc01bf 100644
--- a/clutter/evdev/clutter-device-manager-evdev.c
+++ b/clutter/evdev/clutter-device-manager-evdev.c
@@ -855,17 +855,16 @@ clutter_device_manager_evdev_init (ClutterDeviceManagerEvdev *self)
 void
 _clutter_events_evdev_init (ClutterBackend *backend)
 {
+  ClutterDeviceManager *dummy G_GNUC_UNUSED;
+
   CLUTTER_NOTE (EVENT, "Initializing evdev backend");
 
-  /* We just have to create the singleon here */
-  clutter_device_manager_get_default ();
+  /* we need to create the device manager here */
+  dummy = clutter_device_manager_get_default ();
 }
 
 void
 _clutter_events_evdev_uninit (ClutterBackend *backend)
 {
-  ClutterDeviceManager *manager;
-
-  manager = clutter_device_manager_get_default ();
-  g_object_unref (manager);
+  CLUTTER_NOTE (EVENT, "Uninitializing evdev backend");
 }
diff --git a/clutter/tslib/clutter-event-tslib.c b/clutter/tslib/clutter-event-tslib.c
index ca64f48..28495ac 100644
--- a/clutter/tslib/clutter-event-tslib.c
+++ b/clutter/tslib/clutter-event-tslib.c
@@ -19,9 +19,7 @@
  *
  */
 
-#ifdef HAVE_CONFIG_H
 #include "config.h"
-#endif
 
 #include "clutter-stage-egl.h"
 #include "clutter-backend-egl.h"
@@ -37,9 +35,7 @@
 
 #include <glib.h>
 
-#ifdef HAVE_TSLIB
 #include <tslib.h>
-#endif
 
 typedef struct _ClutterEventSource  ClutterEventSource;
 
@@ -50,13 +46,9 @@ struct _ClutterEventSource
   ClutterBackendEGL *backend;
   GPollFD event_poll_fd;
 
-#ifdef HAVE_TSLIB
-  struct tsdev   *ts_device;
-#endif
+  struct tsdev *ts_device;
 };
 
-#ifdef HAVE_TSLIB
-
 static gboolean clutter_event_prepare  (GSource     *source,
                                         gint        *timeout);
 static gboolean clutter_event_check    (GSource     *source);
@@ -93,16 +85,17 @@ get_backend_time (void)
 
   return g_timer_elapsed (backend_egl->event_timer, NULL) * 1000;
 }
-#endif
 
 void
-_clutter_events_tslib_init (ClutterBackendEglNative *backend_egl)
+_clutter_events_tslib_init (ClutterBackend *backend)
 {
-#ifdef HAVE_TSLIB
+  ClutterBackendEglNative *backend_egl;
   ClutterEventSource *event_source;
   const char *device_name;
   GSource *source;
 
+  backend_egl = CLUTTER_BACKEND_EGL (backend);
+
   CLUTTER_NOTE (EVENT, "Starting timer");
   g_assert (backend_egl->event_timer != NULL);
   g_timer_start (backend_egl->event_timer);
@@ -148,13 +141,11 @@ _clutter_events_tslib_init (ClutterBackendEglNative *backend_egl)
       g_warning ("Unable to open '%s'", device_name);
       g_source_unref (source);
     }
-#endif /* HAVE_TSLIB */
 }
 
 void
 _clutter_events_egl_uninit (ClutterBackendEglNative *backend_egl)
 {
-#ifdef HAVE_TSLIB
   if (backend_egl->event_timer != NULL)
     {
       CLUTTER_NOTE (EVENT, "Stopping the timer");
@@ -175,11 +166,8 @@ _clutter_events_egl_uninit (ClutterBackendEglNative *backend_egl)
       g_source_unref (backend_egl->event_source);
       backend_egl->event_source = NULL;
     }
-#endif /* HAVE_TSLIB */
 }
 
-#ifdef HAVE_TSLIB
-
 static gboolean
 clutter_event_prepare (GSource *source,
                        gint    *timeout)
@@ -227,7 +215,7 @@ clutter_event_dispatch (GSource     *source,
   if ((!clutter_events_pending()) &&
       (ts_read(event_source->ts_device, &tsevent, 1) == 1))
     {
-      static gint     last_x = 0, last_y = 0;
+      static gint last_x = 0, last_y = 0;
       static gboolean clicked = FALSE;
 
       /* Avoid sending too many events which are just pressure changes.
@@ -290,5 +278,3 @@ out:
 
   return TRUE;
 }
-
-#endif
diff --git a/clutter/tslib/clutter-event-tslib.h b/clutter/tslib/clutter-event-tslib.h
new file mode 100644
index 0000000..423633a
--- /dev/null
+++ b/clutter/tslib/clutter-event-tslib.h
@@ -0,0 +1,35 @@
+/* Clutter.
+ * An OpenGL based 'interactive canvas' library.
+ *
+ * Copyright (C) 2006, 2007 OpenedHand
+ * Copyright (C) 2008, 2009, 2010, 2011  Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ *
+ */
+
+#ifndef __CLUTTER_EVENT_TSLIB_H__
+#define __CLUTTER_EVENT_TSLIB_H__
+
+#include <clutter/clutter-backend.h>
+
+G_BEGIN_DECLS
+
+void _clutter_events_tslib_init   (ClutterBackend *backend);
+void _clutter_events_tslib_uninit (ClutterBackend *backend);
+
+G_END_DECLS
+
+#endif /* __CLUTTER_EVENT_TSLIB_H__ */
diff --git a/configure.ac b/configure.ac
index ac6c84d..ae32b6f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -223,15 +223,15 @@ AC_ARG_ENABLE([osx],
 AC_ARG_ENABLE([gdk],
               [AS_HELP_STRING([--enable-gdk=@<:@yes/no@:>@], [Enable the GDK backend (default=no)])],
               [],
-              [enable_gdk=no])
+              [enable_gdk=maybe])
 AC_ARG_ENABLE([wayland],
               [AS_HELP_STRING([--enable-wayland=@<:@yes/no@:>@], [Enable the Wayland client backend (default=no)])],
               [],
-              [enable_wayland=no])
+              [enable_wayland=maybe])
 AC_ARG_ENABLE([egl],
-              [AS_HELP_STRING([--enable-egl=@<:@yes/no@:>@], [Enable the EGL framebuffer backend (default=no)])]
+              [AS_HELP_STRING([--enable-egl=@<:@yes/no@:>@], [Enable the EGL framebuffer backend (default=no)])],
               [],
-              [enable_egl=no])
+              [enable_egl=maybe])
 
 dnl Define default values
 AS_IF([test "x$platform_glx" = "xyes"], [enable_x11=yes])
@@ -253,14 +253,6 @@ AS_IF([test "x$enable_x11" = "xyes"],
                          [BACKEND_PC_FILES="$BACKEND_PC_FILES gl"],
                          [FLAVOUR_LIBS="$FLAVOUR_LIBS -lGL"])
 
-        # if Mesa has support for egl, we can use it as well
-        PKG_CHECK_EXISTS([egl],
-                         [
-                           BACKEND_PC_FILES="$BACKEND_PC_FILES egl"
-                           SUPPORT_EGL=1
-                         ],
-                         [])
-
         # We might fall back to DRM for sync-to-vblank on GLX
         PKG_CHECK_EXISTS([libdrm],
                          [
@@ -299,6 +291,7 @@ AS_IF([test "x$enable_wayland" = "xyes"],
         experimental_backend="yes"
 
         SUPPORT_WAYLAND=1
+        SUPPORT_EVDEV=1
 
         PKG_CHECK_EXISTS([gl], [BACKEND_PC_FILES="$BACKEND_PC_FILES gl"], [])
         PKG_CHECK_EXISTS([egl], [BACKEND_PC_FILES="$BACKEND_PC_FILES egl"], [])
@@ -316,6 +309,13 @@ AS_IF([test "x$enable_egl" = "xyes"],
         SUPPORT_EGL=1
         SUPPORT_COGL=1
 
+        # if Mesa has support for egl, we can use it as well
+        PKG_CHECK_EXISTS([egl],
+                         [
+                           BACKEND_PC_FILES="$BACKEND_PC_FILES egl"
+                         ],
+                         [])
+
         AC_ARG_WITH([tslib],
                     [AS_HELP_STRING([--with-tslib=@<:@yes/no@:>@], [Use TSLib for events])],
                     [],
@@ -337,8 +337,10 @@ AS_IF([test "x$enable_egl" = "xyes"],
                 AS_IF([test "x$have_tslib" = "xyes"],
                       [
                         AC_DEFINE([HAVE_TSLIB], [1], [Have tslib for touchscreen handling])
+                        SUPPORT_TSLIB=1
                       ])
-              ])
+              ],
+              [have_tslib=no])
 
         AS_IF([test "x$with_evdev" = "xyes"],
               [
@@ -346,8 +348,10 @@ AS_IF([test "x$enable_egl" = "xyes"],
                 AS_IF([test "x$have_evdev" = "xyes"],
                       [
                         AC_DEFINE([HAVE_EVDEV], [1], [Have evdev support for input handling])
+                        SUPPORT_EVDEV=1
                       ])
-              ])
+              ],
+              [have_evdev=no])
 
         AS_IF([test "x$with_gdl" = "xyes"],
               [
@@ -374,14 +378,8 @@ AS_IF([test "x$enable_egl" = "xyes"],
                 SUPPORT_EGL_PLATFORM_GDL=1
 
                 AC_DEFINE([CLUTTER_EGL_BACKEND_CEX100], [1], [Use CEX100 EGL backend])
-              ])
-
-        # Make sure we don't enable tslib and evdev at the same time, we
-        # don't support multiple event backends yet.
-        AS_IF([test "x$have_tslib" = "xyes" -a "x$have_evdev" = "xyes"],
-              [
-                AC_MSG_ERROR([Cannot enable both tslib and evdev events])
-              ])
+              ],
+              [have_gdl=no])
 
         FLAVOUR_LIBS="$FLAVOUR_LIBS $TSLIB_LIBS $EVDEV_LIBS"
         FLAVOUR_CFLAGS="$FLAVOUR_CFLAGS $TSLIB_CFLAGS $EVDEV_CFLAGS"
@@ -479,6 +477,12 @@ AS_IF([test "x$SUPPORT_WIN32" = "x1"],
 AS_IF([test "x$SUPPORT_EGL_PLATFORM_GDL" = "x1"],
       [CLUTTER_CONFIG_DEFINES="$CLUTTER_CONFIG_DEFINES
 #define CLUTTER_WINDOWING_CEX100 1"])
+AS_IF([test "x$SUPPORT_EVDEV" = "x1"],
+      [CLUTTER_CONFIG_DEFINES="$CLUTTER_CONFIG_DEFINES
+#define CLUTTER_WINDOWING_EVDEV 1"])
+AS_IF([test "x$SUPPORT_TSLIB" = "x1"],
+      [CLUTTER_CONFIG_DEFINES="$CLUTTER_CONFIG_DEFINES
+#define CLUTTER_WINDOWING_TSLIB 1"])
 
 AC_SUBST([CLUTTER_CONFIG_DEFINES])
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]