diff options
author | Mathias Gumz <akira@fluxbox.org> | 2015-01-21 09:06:01 (GMT) |
---|---|---|
committer | Mathias Gumz <akira@fluxbox.org> | 2015-01-21 09:06:01 (GMT) |
commit | 980ab5e3f5a843e1d89a178a5d8e8c260eac5efc (patch) | |
tree | 9adee37dc7f56c40ea60e2f85526b26376e8c6e7 | |
parent | 8e92ad53e07922dfc9aabe6d7d53e6c6d22975ca (diff) | |
download | fluxbox-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.cc | 6 | ||||
-rw-r--r-- | src/Screen.cc | 9 |
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 | ||
682 | void BScreen::keyPressEvent(XKeyEvent &ke) { | 682 | void 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 | ||
687 | void BScreen::keyReleaseEvent(XKeyEvent &ke) { | 692 | void BScreen::keyReleaseEvent(XKeyEvent &ke) { |