diff options
author | Přemysl Janouch <p.janouch@gmail.com> | 2016-02-10 23:07:54 +0100 |
---|---|---|
committer | Přemysl Janouch <p.janouch@gmail.com> | 2016-02-10 23:07:54 +0100 |
commit | 92247a9fee6ad97b2697ce0e23763746e2021443 (patch) | |
tree | dd406b9b6a502358c4d8ac726c0bf8028bbce257 | |
parent | 2825c899617cefc872198296f83572ec3504db93 (diff) | |
download | desktop-tools-92247a9fee6ad97b2697ce0e23763746e2021443.tar.gz desktop-tools-92247a9fee6ad97b2697ce0e23763746e2021443.tar.xz desktop-tools-92247a9fee6ad97b2697ce0e23763746e2021443.zip |
dwmstatus: use Xkb to fix a deprecation warning
-rw-r--r-- | dwmstatus.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/dwmstatus.c b/dwmstatus.c index 241c435..3f5140b 100644 --- a/dwmstatus.c +++ b/dwmstatus.c @@ -34,6 +34,7 @@ #include <X11/Xlib.h> #include <X11/keysym.h> #include <X11/XF86keysym.h> +#include <X11/XKBlib.h> #include <pulse/mainloop.h> #include <pulse/context.h> @@ -1681,6 +1682,7 @@ struct app_context struct str_map config; ///< Program configuration Display *dpy; ///< X display handle + int xkb_base_event_code; ///< Xkb base event code const char *prefix; ///< User-defined prefix struct poller poller; ///< Poller @@ -1737,7 +1739,8 @@ app_context_init (struct app_context *self) self->config.free = free; simple_config_load_defaults (&self->config, g_config_table); - if (!(self->dpy = XOpenDisplay (NULL))) + if (!(self->dpy = XkbOpenDisplay + (NULL, &self->xkb_base_event_code, NULL, NULL, NULL, NULL))) exit_fatal ("cannot open display"); poller_init (&self->poller); @@ -2701,6 +2704,7 @@ g_keys[] = static unsigned get_numlock_mask (struct app_context *ctx) { + // XXX: can XKB virtual mods help this? Chapter 8. Virtual Modifiers unsigned result = 0; XModifierKeymap *modmap = XGetModifierMapping (ctx->dpy); for (unsigned i = 0; i < 8; i++) @@ -2720,7 +2724,8 @@ on_x_keypress (struct app_context *ctx, XEvent *e) unsigned numlock_mask = get_numlock_mask (ctx); XKeyEvent *ev = &e->xkey; - KeySym keysym = XKeycodeToKeysym (ctx->dpy, (KeyCode) ev->keycode, 0); + KeySym keysym = XkbKeycodeToKeysym (ctx->dpy, (KeyCode) ev->keycode, + 0, !!(ev->state & ShiftMask)); for (size_t i = 0; i < N_ELEMENTS (g_keys); i++) if (keysym == g_keys[i].keysym && CLEANMASK (g_keys[i].mod) == CLEANMASK (ev->state) |