diff options
| author | Dana Jansens <danakj@orodu.net> | 2002-12-30 08:59:46 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2002-12-30 08:59:46 +0000 |
| commit | 4e047f8b1ca2f46a354aca7615cf89d79e0182e2 (patch) | |
| tree | a3be6f501c5ca87e2e87d54de620d9f0a4d5f929 | |
| parent | d011a51039c4c4f4cf81db5f086a0fff192157b3 (diff) | |
nicer translate()
| -rw-r--r-- | src/bindings.cc | 62 |
1 files changed, 35 insertions, 27 deletions
diff --git a/src/bindings.cc b/src/bindings.cc index ba21410c..999b4ad8 100644 --- a/src/bindings.cc +++ b/src/bindings.cc @@ -38,6 +38,35 @@ void OBBindings::display() } +static bool modvalue(const std::string &mod, unsigned int *val) +{ + if (mod == "C") { // control + *val |= ControlMask; + } else if (mod == "S") { // shift + *val |= ShiftMask; + } else if (mod == "A" || // alt/mod1 + mod == "M" || + mod == "M1" || + mod == "Mod1") { + *val |= Mod1Mask; + } else if (mod == "M2" || // mod2 + mod == "Mod2") { + *val |= Mod2Mask; + } else if (mod == "M3" || // mod3 + mod == "Mod3") { + *val |= Mod3Mask; + } else if (mod == "W" || // windows/mod4 + mod == "M4" || + mod == "Mod4") { + *val |= Mod4Mask; + } else if (mod == "M5" || // mod5 + mod == "Mod5") { + *val |= Mod5Mask; + } else { // invalid + return false; + } + return true; +} bool OBBindings::translate(const std::string &str, Binding &b) { @@ -47,45 +76,24 @@ bool OBBindings::translate(const std::string &str, Binding &b) std::string key(str, keybegin); // parse out the requested modifier keys - unsigned int mods = 0; + unsigned int modval = 0; std::string::size_type begin = 0, end; while (begin != keybegin) { end = str.find_first_of('-', begin); std::string mod(str, begin, end-begin); - - if (mod == "C") { // control - mods |= ControlMask; - } else if (mod == "S") { // shift - mods |= ShiftMask; - } else if (mod == "A" || // alt/mod1 - mod == "M" || - mod == "M1" || - mod == "Mod1") { - mods |= Mod1Mask; - } else if (mod == "M2" || // mod2 - mod == "Mod2") { - mods |= Mod2Mask; - } else if (mod == "M3" || // mod3 - mod == "Mod3") { - mods |= Mod3Mask; - } else if (mod == "W" || // windows/mod4 - mod == "M4" || - mod == "Mod4") { - mods |= Mod4Mask; - } else if (mod == "M5" || // mod5 - mod == "Mod5") { - mods |= Mod5Mask; - } else { // invalid + if (!modvalue(mod, &modval)) { printf(_("Invalid modifier element in key binding: %s\n"), mod.c_str()); return false; } + begin = end + 1; } - + + // set the binding KeySym sym = XStringToKeysym(const_cast<char *>(key.c_str())); if (sym == NoSymbol) return false; - b.modifiers = mods; + b.modifiers = modval; b.key = XKeysymToKeycode(otk::OBDisplay::display, sym); return b.key != 0; } |
