From 3e3235f52293b10806be5c4a7334246b312e4137 Mon Sep 17 00:00:00 2001 From: Sascha Kruse Date: Mon, 10 Sep 2012 20:47:01 +0200 Subject: [PATCH] Replace XKeysymToKeycode See github issue #60 XKeysymToKeycode fails on keyboard-layouts that have the same keysym on different keycodes. --- dunst.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/dunst.c b/dunst.c index 73aa062..32cf0fc 100644 --- a/dunst.c +++ b/dunst.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #ifdef XINERAMA @@ -1049,7 +1050,21 @@ void init_shortcut(keyboard_shortcut * ks) strtrim_end(str); ks->sym = XStringToKeysym(str); - ks->code = XKeysymToKeycode(dc->dpy, ks->sym); + /* find matching keycode for ks->sym */ + int min_keysym, max_keysym; + XDisplayKeycodes(dc->dpy, &min_keysym, &max_keysym); + + ks->code = NoSymbol; + + int level = ks->mask & ShiftMask ? 1 : 0; + + for (int i = min_keysym; i <= max_keysym; i++) { + if (XkbKeycodeToKeysym(dc->dpy, i, 0, level) == ks->sym) { + ks->code = i; + break; + } + } + if (ks->sym == NoSymbol || ks->code == NoSymbol) { fprintf(stderr, "Warning: Unknown keyboard shortcut: %s\n",