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",