summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2002-12-30 07:33:13 +0000
committerDana Jansens <danakj@orodu.net>2002-12-30 07:33:13 +0000
commit35c3e996b57adf77b78eb756b20a15646961a74c (patch)
tree778599e66fd61ac650cf7462c776e160b651afd8 /src
parentee14d8a3ccadfaeb16f47187f071914353258bc6 (diff)
the bindings tree might work now
Diffstat (limited to 'src')
-rw-r--r--src/bindings.cc50
-rw-r--r--src/bindings.hh1
-rw-r--r--src/openbox.cc2
3 files changed, 46 insertions, 7 deletions
diff --git a/src/bindings.cc b/src/bindings.cc
index 404c8267..f007624e 100644
--- a/src/bindings.cc
+++ b/src/bindings.cc
@@ -40,14 +40,52 @@ void OBBindings::display()
bool OBBindings::translate(const std::string &str, Binding &b)
{
+ unsigned int mods = 0;
+
+ // parse out the base key name
std::string::size_type keybegin = str.find_last_of('-');
- std::string key(str, keybegin != std::string::npos ? keybegin + 1 : 0);
+ keybegin = (keybegin == std::string::npos) ? 0 : keybegin + 1;
+ std::string key(str, keybegin);
// XXX: get some modifiers up in the hizzie
+ // parse out the requested modifier keys
+ 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;
+ }
+ printf("got modifier: got modifier: %s\n", mod.c_str());
+
+ begin = end + 1;
+ }
KeySym sym = XStringToKeysym(const_cast<char *>(key.c_str()));
if (sym == NoSymbol) return false;
- b.modifiers = Mod1Mask; // XXX: no way
+ b.modifiers = mods;
b.key = XKeysymToKeycode(otk::OBDisplay::display, sym);
return b.key != 0;
}
@@ -111,7 +149,7 @@ OBBindings::~OBBindings()
}
-static void assimilate(BindingTree *parent, BindingTree *node)
+void OBBindings::assimilate(BindingTree *node)
{
BindingTree *a, *b, *tmp, *last;
@@ -128,9 +166,9 @@ static void assimilate(BindingTree *parent, BindingTree *node)
if (a->binding != b->binding) {
a = a->next_sibling;
} else {
- tmp = b;
+ tmp = b;
b = b->first_child;
- delete tmp;
+ delete tmp;
a = a->first_child;
}
}
@@ -206,7 +244,7 @@ bool OBBindings::add(const StringVect &keylist, int id)
}
// assimilate this built tree into the main tree
- assimilate(&_tree, tree); // assimilation destroys/uses the tree
+ assimilate(tree); // assimilation destroys/uses the tree
return true;
}
diff --git a/src/bindings.hh b/src/bindings.hh
index 4545627a..ffe987b3 100644
--- a/src/bindings.hh
+++ b/src/bindings.hh
@@ -51,6 +51,7 @@ private:
int find(BindingTree *search);
bool translate(const std::string &str, Binding &b);
BindingTree *buildtree(const StringVect &keylist, int id);
+ void OBBindings::assimilate(BindingTree *node);
public:
//! Initializes an OBBinding object
diff --git a/src/openbox.cc b/src/openbox.cc
index 2d13ba1b..cf05e2a8 100644
--- a/src/openbox.cc
+++ b/src/openbox.cc
@@ -150,7 +150,7 @@ Openbox::Openbox(int argc, char **argv)
_bindings = new OBBindings();
OBBindings::StringVect v;
- v.push_back("C-x");
+ v.push_back("C-A-x");
v.push_back("C-y");
v.push_back("v");
_bindings->add(v, 1);