diff --git a/src/wmapp.cc b/src/wmapp.cc index 89def814c..7f1543091 100644 --- a/src/wmapp.cc +++ b/src/wmapp.cc @@ -506,16 +506,6 @@ void YWMApp::reparseKeyPrefs() { } } -void YWMApp::fixupPreferences() { - extern cfoption icewm_preferences[]; - for (cfoption* op = icewm_preferences; op->type; ++op) { - if (op->type == cfoption::CF_KEY) { - WMKey* key = op->v.k.key_value; - xapp->unshift(&key->key, &key->mod); - } - } -} - void LogoutMenu::updatePopup() { if (itemCount()) return; @@ -1327,8 +1317,6 @@ YWMApp::YWMApp(int *argc, char ***argv, const char *displayName, if (show_extensions) showExtensions(); - fixupPreferences(); - DEPRECATE(xrrDisable == true); DEPRECATE(warpPointer == true); DEPRECATE(focusRootWindow == true); diff --git a/src/wmapp.h b/src/wmapp.h index ca19b94b4..f4680e158 100644 --- a/src/wmapp.h +++ b/src/wmapp.h @@ -154,7 +154,6 @@ class YWMApp: void initIcons(); void initIconSize(); void reparseKeyPrefs(); - void fixupPreferences(); }; extern YWMApp * wmapp; diff --git a/src/wmkey.cc b/src/wmkey.cc index fea8aa777..be4a343d1 100644 --- a/src/wmkey.cc +++ b/src/wmkey.cc @@ -16,7 +16,7 @@ bool WMKey::set(const char* arg) { else { unsigned ks = 0; unsigned short mo = 0; - if (xapp->parseKey(arg, &ks, &mo)) { + if (YConfig::parseKey(arg, &ks, &mo)) { if (initial == false) delete[] const_cast(name); name = newstr(arg); @@ -33,7 +33,7 @@ bool WMKey::set(const char* arg) { bool WMKey::parse() { if (nonempty(name)) { key = mod = xmod = kc = 0; - return xapp->parseKey(name, &key, &mod); + return YConfig::parseKey(name, &key, &mod); } else { return false; } @@ -83,7 +83,8 @@ void WMKey::grab(int handle) { return; } } - if (kc == 0) { + if (kc == 0 && key) { + xapp->unshift(&key, &xmod); kc = XKeysymToKeycode(xapp->display(), KeySym(key)); } if (kc) { diff --git a/src/wmkey.h b/src/wmkey.h index 7c37fd641..f58855262 100644 --- a/src/wmkey.h +++ b/src/wmkey.h @@ -11,10 +11,10 @@ struct WMKey { WMKey() : key(0), mod(0), xmod(0), name(""), kc(0), initial(true) { } WMKey(char* s) : key(0), mod(0), xmod(0), name(s), kc(0), initial(false) { parse(); } - WMKey(KeySym k, unsigned short m, const char* s) : + WMKey(unsigned k, unsigned short m, const char* s) : key(k), mod(m), xmod(0), name(s), kc(0), initial(true) { } - bool eq(KeySym k, unsigned short m) const { return key == k && mod == m; } + bool eq(unsigned k, unsigned short m) const { return key == k && mod == m; } bool operator==(const WMKey& o) const { return eq(o.key, o.mod); } bool operator!=(const WMKey& o) const { return !eq(o.key, o.mod); } bool parse(); diff --git a/src/wmmenu.cc b/src/wmmenu.cc index 1153a35e5..8acfb26b2 100644 --- a/src/wmmenu.cc +++ b/src/wmmenu.cc @@ -85,7 +85,7 @@ static mstring guessIconNameFromExe(const char* exe) return "-"; } -char* MenuLoader::parseKey(char *word, char *p) +char* MenuLoader::parseAKey(char *word, char *p) { bool runonce = !strcmp(word, "runonce"); bool switchkey = !strcmp(word, "switchkey"); @@ -417,7 +417,7 @@ char* MenuLoader::parseWord(char *word, char *p, ObjectContainer *container) || !strcmp(word, "runonce") || !strcmp(word, "switchkey")) { - p = parseKey(word, p); + p = parseAKey(word, p); } else { msg(_("Unknown keyword for a non-container: '%s'.\n" diff --git a/src/wmmgr.cc b/src/wmmgr.cc index 24b1ffc71..9e1748f81 100644 --- a/src/wmmgr.cc +++ b/src/wmmgr.cc @@ -247,8 +247,9 @@ void YWindowManager::grabKeys() { grab(gKeySysKeyboardNext); { - for (KProgram* k : keyProgs) { - grabVKey(k->key(), k->modifiers()); + int win = handle(); + for (KProgram* kp : keyProgs) { + kp->grab(win); } } if (xapp->WinMask && win95keys) { diff --git a/src/wmprog.h b/src/wmprog.h index 64bd4f044..7c0bf76d4 100644 --- a/src/wmprog.h +++ b/src/wmprog.h @@ -32,7 +32,7 @@ class MenuLoader { char* parseMenuFile(char *data, ObjectContainer *container); char* parseMenuProg(char *data, ObjectContainer *container); char* parseMenuProgReload(char *data, ObjectContainer *container); - char* parseKey(char *word, char *p); + char* parseAKey(char *word, char *p); char* parseProgram(char *word, char *p, ObjectContainer *container); char* parseWord(char *word, char *p, ObjectContainer *container); @@ -177,8 +177,7 @@ class KProgram { return wm.eq(key, mod); } void open(unsigned mods); - KeySym key() const { return wm.key; } - unsigned modifiers() const { return wm.mod; } + void grab(int handle) { wm.grab(handle); } private: WMKey wm; diff --git a/src/ywindow.cc b/src/ywindow.cc index 5d5c575b6..d070354a5 100644 --- a/src/ywindow.cc +++ b/src/ywindow.cc @@ -1702,74 +1702,7 @@ YDesktop::~YDesktop() { } void YWindow::grab(struct WMKey& wmkey) { - grabVKey(wmkey.key, wmkey.mod); -} - -void YWindow::grabVKey(unsigned key, unsigned vm) { - if (key) { - if (vm == 0) { - grabKey(key, 0); - } else { - unsigned m = 0; - bool ok = true; - - if (vm & kfShift) - m |= ShiftMask; - if (vm & kfCtrl) - m |= ControlMask; - if (vm & kfAlt) { - if (xapp->AltMask) - m |= xapp->AltMask; - else - ok = false; - } - if (vm & kfMeta) { - if (xapp->MetaMask) - m |= xapp->MetaMask; - else - ok = false; - } - if (vm & kfSuper) { - if (xapp->SuperMask) - m |= xapp->SuperMask; - else - ok = false; - } - if (vm & kfHyper) { - if (xapp->HyperMask) - m |= xapp->HyperMask; - else - ok = false; - } - if (vm & kfAltGr) { - if (xapp->ModeSwitchMask) - m |= xapp->ModeSwitchMask; - else - ok = false; - } - - MSG(("grabVKey k=0x%04x v=0x%02x m=0x%02x o=%d", key, vm, m, ok)); - if (m && ok) { - grabKey(key, m); - - // !!! recheck this - if (modSuperIsCtrlAlt && xapp->WinMask && - hasbits(vm, kfAlt | kfCtrl)) - { - m = xapp->WinMask; - if (vm & kfShift) - m |= ShiftMask; - if (vm & kfSuper) - m |= xapp->SuperMask; - if (vm & kfHyper) - m |= xapp->HyperMask; - if (vm & kfAltGr) - m |= xapp->ModeSwitchMask; - grabKey(key, m); - } - } - } - } + wmkey.grab(handle()); } void YWindow::grabVButton(int button, unsigned int vm) { diff --git a/src/ywindow.h b/src/ywindow.h index 8d68ba3c3..c07c1a672 100644 --- a/src/ywindow.h +++ b/src/ywindow.h @@ -162,7 +162,6 @@ class YWindow : protected YWindowList, private YWindowNode { void setPointer(Cursor pointer); void grabKeyM(unsigned key, unsigned modifiers); void grabKey(unsigned key, unsigned modifiers); - void grabVKey(unsigned key, unsigned modifiers); void grab(struct WMKey& wmkey); unsigned VMod(unsigned modifiers); void grabButtonM(int button, unsigned modifiers); diff --git a/src/yxapp.cc b/src/yxapp.cc index 5c46aba23..e349cd2b8 100644 --- a/src/yxapp.cc +++ b/src/yxapp.cc @@ -1395,13 +1395,6 @@ void YXApplication::queryMouse(int* x, int* y) { *x = *y = 0; } -bool YXApplication::parseKey(const char* arg, unsigned* key, unsigned short* mod) { - bool yes = YConfig::parseKey(arg, key, mod); - if (yes) - unshift(key, mod); - return yes; -} - void YXApplication::unshift(unsigned* ksym, unsigned short* mod) { const unsigned key = unsigned(*ksym); if ((' ' < key && key < 'a') || ('z' < key && key <= 0xFF) || diff --git a/src/yxapp.h b/src/yxapp.h index 04a845dd2..7d781e251 100644 --- a/src/yxapp.h +++ b/src/yxapp.h @@ -199,7 +199,6 @@ class YXApplication: public YApplication { return mask == buttonModMask(state); } unsigned keyCodeToKeySym(unsigned keycode, unsigned index = 0); - bool parseKey(const char* arg, unsigned* key, unsigned short* mod); void unshift(unsigned* key, unsigned short* mod); YKeycodeMap getKeycodeMap();