summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--libxklavier/xklavier_xkb.c18
2 files changed, 18 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 8f97bdd..724645d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2011-01-29 svu
+
+ * libxklavier/xklavier_xkb.c: checking that XInput is >=2, otherwise
+ DevicePresence may be missing.
+ https://bugzilla.gnome.org/show_bug.cgi?id=583709
+
2011-01-28 svu
* libxklavier/xkl_config_registry.h, libxklavier/xklavier_config.c,
diff --git a/libxklavier/xklavier_xkb.c b/libxklavier/xklavier_xkb.c
index 7cb8e59..9ee41dc 100644
--- a/libxklavier/xklavier_xkb.c
+++ b/libxklavier/xklavier_xkb.c
@@ -621,13 +621,19 @@ xkl_xkb_init(XklEngine * engine)
(display, "XInputExtension", &xi_opc,
&xkl_engine_backend(engine, XklXkb, xi_event_type),
&xkl_engine_backend(engine, XklXkb, xi_error_code))) {
- xkl_debug(150, "XInputExtension found (%d, %d, %d)\n",
- xi_opc,
+ XExtensionVersion *ev =
+ XGetExtensionVersion(display, "XInputExtension");
+ xkl_debug(150,
+ "XInputExtension found (%d, %d, %d) version %d.%d\n",
+ xi_opc, xkl_engine_backend(engine, XklXkb,
+ xi_event_type),
xkl_engine_backend(engine, XklXkb,
- xi_event_type),
- xkl_engine_backend(engine, XklXkb,
- xi_error_code));
- xkl_engine_priv(engine, features) |= XKLF_DEVICE_DISCOVERY;
+ xi_error_code),
+ ev->major_version, ev->minor_version);
+ if (ev->major_version >= 2)
+ xkl_engine_priv(engine, features) |=
+ XKLF_DEVICE_DISCOVERY;
+ XFree(ev);
} else {
xkl_debug(0, "XInputExtension not found\n");
xkl_engine_backend(engine, XklXkb, xi_event_type) = -1;