diff --git a/clutter/x11/clutter-backend-x11.c b/clutter/x11/clutter-backend-x11.c index 07e8b45e9..ab3760f0d 100644 --- a/clutter/x11/clutter-backend-x11.c +++ b/clutter/x11/clutter-backend-x11.c @@ -39,8 +39,13 @@ #include "clutter-backend-x11.h" #include "clutter-stage-x11.h" #include "clutter-x11.h" + #include +#ifdef HAVE_XINPUT +#include +#endif + #include "../clutter-event.h" #include "../clutter-main.h" #include "../clutter-debug.h" @@ -53,15 +58,18 @@ G_DEFINE_TYPE (ClutterBackendX11, clutter_backend_x11, CLUTTER_TYPE_BACKEND); struct _ClutterX11XInputDevice { ClutterInputDevice device; -#ifdef USE_XINPUT + +#ifdef HAVE_XINPUT XDevice *xdevice; XEventClass xevent_list[5]; /* MAX 5 event types */ int num_events; #endif - ClutterX11InputDeviceType type; /* FIXME: generic to ClutterInputDevice? */ + + /* FIXME: generic to ClutterInputDevice? */ + ClutterX11InputDeviceType type; }; -#ifdef USE_XINPUT +#ifdef HAVE_XINPUT void _clutter_x11_register_xinput (); #endif @@ -185,7 +193,7 @@ clutter_backend_x11_post_parse (ClutterBackend *backend, clutter_backend_set_resolution (backend, dpi); -#ifdef USE_XINPUT +#ifdef HAVE_XINPUT _clutter_x11_register_xinput (); #endif @@ -630,7 +638,7 @@ clutter_x11_remove_filter (ClutterX11FilterFunc func, } } -#ifdef USE_XINPUT +#ifdef HAVE_XINPUT void _clutter_x11_register_xinput () @@ -669,7 +677,15 @@ _clutter_x11_register_xinput () backend_singleton->have_xinput = TRUE; - ext = XGetExtensionVersion(backend_singleton->xdpy, INAME); +#ifdef HAVE_XGET_EXTENSION_VERSION + ext = XGetExtensionVersion (backend_singleton->xdpy, INAME); +#elif HAVE_XQUERY_INPUT_VERSION + ext = XQueryInputVersion (backend_singleton->xdpy, XI_2_Major, XI_2_Minor); +#else + g_critical ("XInput does not have XGetExtensionVersion nor " + "XQueryInputVersion"); + return; +#endif if (!ext || (ext == (XExtensionVersion*) NoSuchExtension)) { @@ -879,7 +895,7 @@ clutter_x11_get_input_devices (void) { ClutterMainContext *context; -#ifdef USE_XINPUT +#ifdef HAVE_XINPUT if (!backend_singleton) { g_critical ("X11 backend has not been initialised"); @@ -889,9 +905,9 @@ clutter_x11_get_input_devices (void) context = clutter_context_get_default (); return context->input_devices; -#else +#else /* !HAVE_XINPUT */ return NULL; -#endif +#endif /* HAVE_XINPUT */ } /** @@ -923,7 +939,7 @@ clutter_x11_get_input_device_type (ClutterX11XInputDevice *device) gboolean clutter_x11_has_xinput (void) { -#ifdef USE_XINPUT +#ifdef HAVE_XINPUT if (!backend_singleton) { g_critical ("X11 backend has not been initialised"); diff --git a/clutter/x11/clutter-backend-x11.h b/clutter/x11/clutter-backend-x11.h index 4f75359c8..04b36cfc5 100644 --- a/clutter/x11/clutter-backend-x11.h +++ b/clutter/x11/clutter-backend-x11.h @@ -28,10 +28,6 @@ #include #include -#ifdef USE_XINPUT -#include -#endif - #include "clutter-x11.h" G_BEGIN_DECLS @@ -79,10 +75,8 @@ struct _ClutterBackendX11 Atom atom_NET_WM_NAME; Atom atom_UTF8_STRING; -#ifdef USE_XINPUT - int event_types[CLUTTER_X11_XINPUT_LAST_EVENT]; - gboolean have_xinput; -#endif + int event_types[CLUTTER_X11_XINPUT_LAST_EVENT]; + gboolean have_xinput; Time last_event_time; }; @@ -127,7 +121,6 @@ XVisualInfo * clutter_backend_x11_get_visual_info (ClutterBackendX11 *backend_x11, gboolean for_offscreen); -#ifdef USE_XINPUT void _clutter_x11_register_xinput (void); @@ -136,7 +129,6 @@ _clutter_x11_unregister_xinput (void); ClutterX11XInputDevice * _clutter_x11_get_device_for_xid (XID id); -#endif void _clutter_x11_select_events (Window xwin); diff --git a/clutter/x11/clutter-event-x11.c b/clutter/x11/clutter-event-x11.c index 84cba9ff8..5c81738d0 100644 --- a/clutter/x11/clutter-event-x11.c +++ b/clutter/x11/clutter-event-x11.c @@ -43,7 +43,7 @@ #include -#ifdef USE_XINPUT +#ifdef HAVE_XINPUT #include #endif @@ -263,7 +263,7 @@ set_user_time (ClutterBackendX11 *backend_x11, } } -#if 0 /* See XInput keyboard comment below USE_XINPUT */ +#if 0 /* See XInput keyboard comment below HAVE_XINPUT */ static void convert_xdevicekey_to_xkey (XDeviceKeyEvent *xkev, XEvent *xevent) { @@ -282,7 +282,7 @@ convert_xdevicekey_to_xkey (XDeviceKeyEvent *xkev, XEvent *xevent) xevent->xkey.keycode = xkev->keycode; xevent->xkey.same_screen = xkev->same_screen; } -#endif /* USE_XINPUT */ +#endif /* HAVE_XINPUT */ static void translate_key_event (ClutterBackend *backend, @@ -738,7 +738,7 @@ event_translate (ClutterBackend *backend, } else { /* XInput fun.. Needs clean up. */ -#ifdef USE_XINPUT +#ifdef HAVE_XINPUT int *ev_types = backend_x11->event_types; CLUTTER_NOTE (EVENT, "XInput event type: %d", xevent->type); diff --git a/clutter/x11/clutter-stage-x11.h b/clutter/x11/clutter-stage-x11.h index c1a913950..eac4192a6 100644 --- a/clutter/x11/clutter-stage-x11.h +++ b/clutter/x11/clutter-stage-x11.h @@ -62,10 +62,8 @@ struct _ClutterStageX11 ClutterBackendX11 *backend; ClutterStageState state; -#ifdef USE_XINPUT - int event_types[CLUTTER_X11_XINPUT_LAST_EVENT]; - GList *devices; -#endif + int event_types[CLUTTER_X11_XINPUT_LAST_EVENT]; + GList *devices; ClutterStage *wrapper; }; diff --git a/configure.ac b/configure.ac index 49911ee9f..f321f97d4 100644 --- a/configure.ac +++ b/configure.ac @@ -491,7 +491,38 @@ AS_IF([test "x$clutterbackend" = "xglx" || test "x$clutterbackend" = "xeglx"], [yes], [ - AC_DEFINE(USE_XINPUT, 1, Use the XINPUT X extension) + AC_DEFINE(HAVE_XINPUT, 1, Use the XINPUT X extension) + + # ugh, this is insane + AC_TRY_COMPILE([#include ], + [ + XExtensionVersion *res; + res = XGetExtensionVersion (NULL, INAME); + ], + [have_xget_extension_version=yes], + [have_xget_extension_version=no]) + + AC_TRY_COMPILE([#include ], + [ + XExtensionVersion *res; + res = XQueryInputVersion (NULL, XI_2_Major, XI_2_Minor); + ], + [have_xquery_input_version=yes], + [have_xquery_input_version=no]) + + AS_IF([test "x$have_xget_extension_version" = "xyes"], + [ + AC_DEFINE([HAVE_XGET_EXTENSION_VERSION], + [1], + [Define to 1 if we have XGetExtensionVersion]) + ]) + + AS_IF([test "x$have_xquery_input_version" = "xyes"], + [ + AC_DEFINE([HAVE_XQUERY_INPUT_VERSION], + [1], + [Define to 1 if we have XQueryInputVersion]) + ]) X11_LIBS="$X11_LIBS -lXi" X11_PC_FILES="$X11_PC_FILES xi"