diff options
author | Sergey Udaltsov <svu@gnome.org> | 2008-11-16 23:59:09 +0000 |
---|---|---|
committer | Sergey Udaltsov <svu@gnome.org> | 2008-11-16 23:59:09 +0000 |
commit | 53da1f88aa97623939d88267831148ae7f24bcb0 (patch) | |
tree | d8d08ffedc33ff82994aebe1eca036ab162d7100 /libxklavier/xklavier_xkb.c | |
parent | 2c4baea56ff5ba98b195f91b8729a5f33bdfd342 (diff) | |
download | libxklavier-53da1f88aa97623939d88267831148ae7f24bcb0.tar.gz |
added device discovery
Diffstat (limited to 'libxklavier/xklavier_xkb.c')
-rw-r--r-- | libxklavier/xklavier_xkb.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/libxklavier/xklavier_xkb.c b/libxklavier/xklavier_xkb.c index 739a0b4..134fcc1 100644 --- a/libxklavier/xklavier_xkb.c +++ b/libxklavier/xklavier_xkb.c @@ -27,6 +27,11 @@ #include "xklavier_private.h" #include "xklavier_private_xkb.h" +#ifdef HAVE_XINPUT +#include <X11/extensions/XI.h> +#include <X11/extensions/XInput.h> +#endif + #ifdef LIBXKBFILE_PRESENT const gchar ** @@ -55,6 +60,10 @@ xkl_xkb_pause_listen(XklEngine * engine) gint xkl_xkb_resume_listen(XklEngine * engine) { +#ifdef HAVE_XINPUT + int xitype; + XEventClass xiclass; +#endif /* What events we want */ #define XKB_EVT_MASK \ (XkbStateNotifyMask| \ @@ -86,6 +95,13 @@ xkl_xkb_resume_listen(XklEngine * engine) device_id), XkbNamesNotify, XKB_NAMES_EVT_DTL_MASK, XKB_NAMES_EVT_DTL_MASK); +#ifdef HAVE_XINPUT + DevicePresence(display, xitype, xiclass); + XSelectExtensionEvent(display, + xkl_engine_priv(engine, root_window), + &xiclass, 1); + xkl_engine_backend(engine, XklXkb, xi_event_type) = xitype; +#endif return 0; } @@ -522,6 +538,7 @@ xkl_xkb_init(XklEngine * engine) #ifdef LIBXKBFILE_PRESENT gint opcode; gboolean xkl_xkb_ext_present; + int xi_opc, xi_event_type, xi_error_code; xkl_engine_priv(engine, backend_id) = "XKB"; xkl_engine_priv(engine, features) = XKLF_CAN_TOGGLE_INDICATORS | @@ -599,6 +616,14 @@ xkl_xkb_init(XklEngine * engine) xkl_engine_priv(engine, features) |= XKLF_MULTIPLE_LAYOUTS_SUPPORTED; + if (XQueryExtension + (display, "XInputExtension", &xi_opc, + &xi_event_type, &xi_error_code)) { + xkl_debug(150, "XInputExtension found (%d, %d, %d)\n", + xi_opc, xi_event_type, xi_error_code); + xkl_engine_priv(engine, features) |= XKLF_DEVICE_DISCOVERY; + } else + xkl_debug(0, "XInputExtension not found\n"); return 0; #else xkl_debug(160, |