summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarius Nita <marius@cs.pdx.edu>2002-10-14 05:03:15 +0000
committerMarius Nita <marius@cs.pdx.edu>2002-10-14 05:03:15 +0000
commit8ea3db574ad4fc3e8022d89045b66d4fe2597356 (patch)
tree6a250bc3c761c2a656bdd0e011d37bf5a7be12ef
parent2037631f753753a5c1ee9b2475b55658c3bb6eea (diff)
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.
-rw-r--r--util/epist/keytree.cc13
-rw-r--r--util/epist/parser.cc23
-rw-r--r--util/epist/parser.hh4
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();