ret = new BindingTree(id);
if (!p) ret->chain = false; // only the first built node
ret->first_child = p;
- if (!translate(*it, ret->binding, true)) {
+ if (!translate(*it, ret->binding)) {
destroytree(ret);
ret = 0;
break;
OBBindings::OBBindings()
- : _curpos(&_keytree), _resetkey(0,0)
+ : _curpos(&_tree),
+ _resetkey(0,0),
+ _timer(Openbox::instance->timerManager(),
+ (otk::OBTimeoutHandler)reset, this)
{
+ _timer.setTimeout(5000); // chains reset after 5 seconds
+
setResetKey("C-g"); // set the default reset key
}
{
BindingTree *a, *b, *tmp, *last;
- if (!_keytree.first_child) {
+ if (!_tree.first_child) {
// there are no nodes at this level yet
- _keytree.first_child = node;
+ _tree.first_child = node;
} else {
- a = _keytree.first_child;
+ a = _tree.first_child;
last = a;
b = node;
while (a) {
}
-int OBBindings::find_key(BindingTree *search) const {
+int OBBindings::find(BindingTree *search) const {
BindingTree *a, *b;
- a = _keytree.first_child;
+ a = _tree.first_child;
b = search;
while (a && b) {
if (a->binding != b->binding) {
}
-bool OBBindings::add_key(const StringVect &keylist, int id)
+bool OBBindings::add(const StringVect &keylist, int id)
{
BindingTree *tree;
if (!(tree = buildtree(keylist, id)))
return false; // invalid binding requested
- if (find_key(tree) != -1) {
+ if (find(tree) != -1) {
// conflicts with another binding
destroytree(tree);
return false;
}
-int OBBindings::find_key(const StringVect &keylist)
+int OBBindings::find(const StringVect &keylist)
{
BindingTree *tree;
bool ret;
if (!(tree = buildtree(keylist, 0)))
return false; // invalid binding requested
- ret = find_key(tree) >= 0;
+ ret = find(tree) >= 0;
destroytree(tree);
}
-int OBBindings::remove_key(const StringVect &keylist)
+int OBBindings::remove(const StringVect &keylist)
{
(void)keylist;
assert(false); // XXX: function not implemented yet
grabKeys(false);
- _curpos = &_keytree;
+ _curpos = &_tree;
// do shit here...
void OBBindings::setResetKey(const std::string &key)
{
Binding b(0, 0);
- if (translate(key, b, true)) {
+ if (translate(key, b)) {
grabKeys(false);
_resetkey.key = b.key;
_resetkey.modifiers = b.modifiers;
void OBBindings::remove_all()
{
- if (_keytree.first_child) {
- remove_branch(_keytree.first_child);
- _keytree.first_child = 0;
+ if (_tree.first_child) {
+ remove_branch(_tree.first_child);
+ _tree.first_child = 0;
}
}
BindingTree *p = _curpos->first_child;
while (p) {
- if (grab)
+ if (grab) {
otk::OBDisplay::grabKey(p->binding.key, p->binding.modifiers,
root, false, GrabModeAsync, GrabModeAsync,
false);
+ }
else
otk::OBDisplay::ungrabKey(p->binding.key, p->binding.modifiers,
root);
Time time)
{
if (key == _resetkey.key && modifiers == _resetkey.modifiers) {
- grabKeys(false);
- _curpos = &_keytree;
- grabKeys(true);
+ reset(this);
} else {
BindingTree *p = _curpos->first_child;
while (p) {
if (p->binding.key == key && p->binding.modifiers == modifiers) {
if (p->chain) {
+ _timer.start(); // start/restart the timer
grabKeys(false);
_curpos = p;
grabKeys(true);
} else {
- python_callback_binding(p->id, type, window, modifiers, key, time);
- grabKeys(false);
- _curpos = &_keytree;
- grabKeys(true);
+ python_callback_binding(p->id, window, modifiers, key, time);
+ reset(this);
}
break;
}
}
}
+void OBBindings::reset(OBBindings *self)
+{
+ self->_timer.stop();
+ self->grabKeys(false);
+ self->_curpos = &self->_tree;
+ self->grabKeys(true);
+}
+
}