From 8ea3db574ad4fc3e8022d89045b66d4fe2597356 Mon Sep 17 00:00:00 2001 From: Marius Nita Date: Mon, 14 Oct 2002 05:03:15 +0000 Subject: [PATCH] more fixes, better sanity detection and error messages. it shouldn't hog the keyboard in any case now. it won't grab when modifiers or keys are borked. --- util/epist/keytree.cc | 13 ++++--------- util/epist/parser.cc | 23 ++++++++++++++++------- util/epist/parser.hh | 4 +--- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/util/epist/keytree.cc b/util/epist/keytree.cc index 5a3515ea..94b542b0 100644 --- a/util/epist/keytree.cc +++ b/util/epist/keytree.cc @@ -195,13 +195,8 @@ void keytree::addAction(Action::ActionType action, unsigned int mask, } KeySym sym = XStringToKeysym(key.c_str()); - - if (sym == 0) { - std::cerr << "Key " << key << " is invalid! (Action ignored)\n"; - return; - } - keynode *tmp = new keynode; + tmp->action = new Action(action, XKeysymToKeycode(_display, sym), mask, arg); @@ -229,10 +224,10 @@ void keytree::setCurrentNodeProps(Action::ActionType action, unsigned int mask, { if (_current->action) delete _current->action; - + + KeySym sym = XStringToKeysym(key.c_str()); _current->action = new Action(action, - XKeysymToKeycode(_display, - XStringToKeysym(key.c_str())), + XKeysymToKeycode(_display, sym), mask, arg); } diff --git a/util/epist/parser.cc b/util/epist/parser.cc index 00be5d7e..5c953aae 100644 --- a/util/epist/parser.cc +++ b/util/epist/parser.cc @@ -61,6 +61,18 @@ void parser::parse(string rc_file) _kt->initialize(); } +void parser::setKey(string key) +{ + KeySym sym = XStringToKeysym(key.c_str()); + + if (sym == 0) { + std::cerr << "ERROR: Invalid key (" << key << ")! This may cause odd behavior.\n"; + _add = false; + } else { + _key = key; + } +} + void parser::setAction(string act) { struct { @@ -189,14 +201,11 @@ void parser::endChain() void parser::setChainBinding() { - if (_mask != 0 && _key != "") { - if (!_add) { - cout << "Error: Bad modifier detected on chain's root key.\n"; - _add = true; - } + if (_add) _kt->setCurrentNodeProps(Action::noaction, _mask, _key, ""); - reset(); - } + + _add = true; + reset(); } void parser::reset() diff --git a/util/epist/parser.hh b/util/epist/parser.hh index b1c02a31..d106f16d 100644 --- a/util/epist/parser.hh +++ b/util/epist/parser.hh @@ -36,9 +36,6 @@ public: void parse(std::string); - void setKey(std::string key) - { _key = key; } - void setArgumentNum(std::string arg) { _arg = arg; } @@ -57,6 +54,7 @@ public: void setOption(std::string opt) { _config->addOption(opt, _arg); } + void setKey(std::string); void setAction(std::string); void addModifier(std::string); void endAction(); -- 2.39.2