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_evt_xkb.c | |
parent | 2c4baea56ff5ba98b195f91b8729a5f33bdfd342 (diff) | |
download | libxklavier-53da1f88aa97623939d88267831148ae7f24bcb0.tar.gz |
added device discovery
Diffstat (limited to 'libxklavier/xklavier_evt_xkb.c')
-rw-r--r-- | libxklavier/xklavier_evt_xkb.c | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/libxklavier/xklavier_evt_xkb.c b/libxklavier/xklavier_evt_xkb.c index cff5ce4..64cea89 100644 --- a/libxklavier/xklavier_evt_xkb.c +++ b/libxklavier/xklavier_evt_xkb.c @@ -26,6 +26,23 @@ #include "xklavier_private.h" #include "xklavier_private_xkb.h" +#ifdef HAVE_XINPUT +#include "config.h" +#include "X11/extensions/XInput.h" + +static gint +xkl_xinput_process_x_event(XklEngine * engine, XEvent * xev) +{ + XDevicePresenceNotifyEvent* dpne = (XDevicePresenceNotifyEvent*)xev; + xkl_debug(200, "XInput event detected: %d\n", dpne->devchange); + if (dpne->devchange == DeviceEnabled) { + xkl_debug(150, "Device enabled: %d\n", dpne->deviceid); + g_signal_emit_by_name(engine, "X-new-device"); + } + return 1; +} +#endif + /* * XKB event handler */ @@ -38,13 +55,19 @@ xkl_xkb_process_x_event(XklEngine * engine, XEvent * xev) guint inds; XkbEvent *kev = (XkbEvent *) xev; - if (xev->type != xkl_engine_backend(engine, XklXkb, event_type)) - return 0; - if (!(xkl_engine_priv(engine, listener_type) & (XKLL_MANAGE_WINDOW_STATES | XKLL_TRACK_KEYBOARD_STATE))) return 0; +#ifdef HAVE_XINPUT + /* Special case XInput event */ + if (xev->type == xkl_engine_backend(engine, XklXkb, xi_event_type)) + return xkl_xinput_process_x_event(engine, xev); +#endif + + if (xev->type != xkl_engine_backend(engine, XklXkb, event_type)) + return 0; + xkl_debug(150, "Xkb event detected\n"); switch (kev->any.xkb_type) { |