[xinput] Check for the XInput entry points
Apparently, the XInput extension is using the same pkg-config file ('xi') for both the 1.x and the 2.x API, so we need to check for both the 1.x XGetExtensionVersion and the 2.x XQueryInputVersion.
This commit is contained in:
parent
876dc22633
commit
0a4a28a950
@ -39,8 +39,13 @@
|
||||
#include "clutter-backend-x11.h"
|
||||
#include "clutter-stage-x11.h"
|
||||
#include "clutter-x11.h"
|
||||
|
||||
#include <X11/extensions/Xcomposite.h>
|
||||
|
||||
#ifdef HAVE_XINPUT
|
||||
#include <X11/extensions/XInput.h>
|
||||
#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");
|
||||
|
@ -28,10 +28,6 @@
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/Xatom.h>
|
||||
|
||||
#ifdef USE_XINPUT
|
||||
#include <X11/extensions/XInput.h>
|
||||
#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);
|
||||
|
@ -43,7 +43,7 @@
|
||||
|
||||
#include <X11/Xatom.h>
|
||||
|
||||
#ifdef USE_XINPUT
|
||||
#ifdef HAVE_XINPUT
|
||||
#include <X11/extensions/XInput.h>
|
||||
#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);
|
||||
|
@ -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;
|
||||
};
|
||||
|
33
configure.ac
33
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 <X11/extensions/XInput.h>],
|
||||
[
|
||||
XExtensionVersion *res;
|
||||
res = XGetExtensionVersion (NULL, INAME);
|
||||
],
|
||||
[have_xget_extension_version=yes],
|
||||
[have_xget_extension_version=no])
|
||||
|
||||
AC_TRY_COMPILE([#include <X11/extensions/XInput.h>],
|
||||
[
|
||||
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"
|
||||
|
Loading…
Reference in New Issue
Block a user