aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathias Gumz <akira@fluxbox.org>2015-01-21 09:06:01 (GMT)
committerMathias Gumz <akira@fluxbox.org>2015-01-21 09:06:01 (GMT)
commit980ab5e3f5a843e1d89a178a5d8e8c260eac5efc (patch)
tree9adee37dc7f56c40ea60e2f85526b26376e8c6e7
parent8e92ad53e07922dfc9aabe6d7d53e6c6d22975ca (diff)
downloadfluxbox-980ab5e3f5a843e1d89a178a5d8e8c260eac5efc.zip
fluxbox-980ab5e3f5a843e1d89a178a5d8e8c260eac5efc.tar.bz2
Fix behavior for autorepeat keys
This reverts 58e09b719077605efadac9b712acb8f5e752f732 after having regressions and bug reports in regards to autorepeated key events are not working anymore. So, the problem with the lost keypress after the workspace change is still open but at least the behavior for other folks is as it was. Since 58e09b7190 seems to be corelated to "auto repeat" keys it might indicate the problem which 58e09b7190 "fixed". We will see. Fixes #1115.
-rw-r--r--src/Keys.cc6
-rw-r--r--src/Screen.cc9
2 files changed, 13 insertions, 2 deletions
diff --git a/src/Keys.cc b/src/Keys.cc
index 172d913..31f1722 100644
--- a/src/Keys.cc
+++ b/src/Keys.cc
@@ -575,6 +575,12 @@ bool Keys::doAction(int type, unsigned int mods, unsigned int key,
575 return false; 575 return false;
576 } 576 }
577 577
578 // if focus changes, windows will get NotifyWhileGrabbed,
579 // which they tend to ignore
580 if (type == KeyPress) {
581 XUngrabKeyboard(Fluxbox::instance()->display(), CurrentTime);
582 }
583
578 WinClient *old = WindowCmd<void>::client(); 584 WinClient *old = WindowCmd<void>::client();
579 WindowCmd<void>::setClient(current); 585 WindowCmd<void>::setClient(current);
580 temp_key->m_command->execute(); 586 temp_key->m_command->execute();
diff --git a/src/Screen.cc b/src/Screen.cc
index 9c0182b..1d81191 100644
--- a/src/Screen.cc
+++ b/src/Screen.cc
@@ -680,8 +680,13 @@ void BScreen::propertyNotify(Atom atom) {
680} 680}
681 681
682void BScreen::keyPressEvent(XKeyEvent &ke) { 682void BScreen::keyPressEvent(XKeyEvent &ke) {
683 Fluxbox::instance()->keys()->doAction(ke.type, ke.state, ke.keycode, 683 if (Fluxbox::instance()->keys()->doAction(ke.type, ke.state, ke.keycode,
684 Keys::GLOBAL|Keys::ON_DESKTOP); 684 Keys::GLOBAL|Keys::ON_DESKTOP)) {
685
686 // re-grab keyboard, so we don't pass KeyRelease to clients
687 // also for catching invalid keys in the middle of keychains
688 FbTk::EventManager::instance()->grabKeyboard(rootWindow().window());
689 }
685} 690}
686 691
687void BScreen::keyReleaseEvent(XKeyEvent &ke) { 692void BScreen::keyReleaseEvent(XKeyEvent &ke) {