aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/fluxbox.cc24
1 files changed, 21 insertions, 3 deletions
diff --git a/src/fluxbox.cc b/src/fluxbox.cc
index 7b33e49..5de7d8d 100644
--- a/src/fluxbox.cc
+++ b/src/fluxbox.cc
@@ -22,7 +22,7 @@
22// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23// DEALINGS IN THE SOFTWARE. 23// DEALINGS IN THE SOFTWARE.
24 24
25// $Id: fluxbox.cc,v 1.121 2003/04/27 04:28:04 rathnor Exp $ 25// $Id: fluxbox.cc,v 1.122 2003/04/27 04:56:18 rathnor Exp $
26 26
27#include "fluxbox.hh" 27#include "fluxbox.hh"
28 28
@@ -1097,21 +1097,35 @@ void Fluxbox::handleKeyEvent(XKeyEvent &ke) {
1097 } 1097 }
1098 break; 1098 break;
1099 case Keys::NEXTWINDOW: //activate next window 1099 case Keys::NEXTWINDOW: //activate next window
1100 {
1101 unsigned int mods = Keys::cleanMods(ke.state);
1102 if (mods == 0) { // can't stacked cycle unless there is a mod to grab
1103 screen->nextFocus(m_key->getParam() | BScreen::CYCLELINEAR);
1104 break;
1105 }
1100 if (!m_watching_screen && !(m_key->getParam() & BScreen::CYCLELINEAR)) { 1106 if (!m_watching_screen && !(m_key->getParam() & BScreen::CYCLELINEAR)) {
1101 // if stacked cycling, then set a watch for 1107 // if stacked cycling, then set a watch for
1102 // the release of exactly these modifiers 1108 // the release of exactly these modifiers
1103 watchKeyRelease(screen, Keys::cleanMods(ke.state)); 1109 watchKeyRelease(screen, mods);
1104 } 1110 }
1105 screen->nextFocus(m_key->getParam()); 1111 screen->nextFocus(m_key->getParam());
1106 break; 1112 break;
1113 }
1107 case Keys::PREVWINDOW: //activate prev window 1114 case Keys::PREVWINDOW: //activate prev window
1115 {
1116 unsigned int mods = Keys::cleanMods(ke.state);
1117 if (mods == 0) { // can't stacked cycle unless there is a mod to grab
1118 screen->prevFocus(m_key->getParam() | BScreen::CYCLELINEAR);
1119 break;
1120 }
1108 if (!m_watching_screen && !(m_key->getParam() & BScreen::CYCLELINEAR)) { 1121 if (!m_watching_screen && !(m_key->getParam() & BScreen::CYCLELINEAR)) {
1109 // if stacked cycling, then set a watch for 1122 // if stacked cycling, then set a watch for
1110 // the release of exactly these modifiers 1123 // the release of exactly these modifiers
1111 watchKeyRelease(screen, Keys::cleanMods(ke.state)); 1124 watchKeyRelease(screen, mods);
1112 } 1125 }
1113 screen->prevFocus(m_key->getParam()); 1126 screen->prevFocus(m_key->getParam());
1114 break; 1127 break;
1128 }
1115 case Keys::FOCUSUP: 1129 case Keys::FOCUSUP:
1116 if (m_focused_window) 1130 if (m_focused_window)
1117 screen->dirFocus(*m_focused_window, BScreen::FOCUSUP); 1131 screen->dirFocus(*m_focused_window, BScreen::FOCUSUP);
@@ -2255,6 +2269,10 @@ void Fluxbox::setFocusedWindow(FluxboxWindow *win) {
2255} 2269}
2256 2270
2257void Fluxbox::watchKeyRelease(BScreen *screen, unsigned int mods) { 2271void Fluxbox::watchKeyRelease(BScreen *screen, unsigned int mods) {
2272 if (mods == 0) {
2273 cerr<<"WARNING: attempt to grab without modifiers!"<<endl;
2274 return;
2275 }
2258 m_watching_screen = screen; 2276 m_watching_screen = screen;
2259 m_watch_keyrelease = mods; 2277 m_watch_keyrelease = mods;
2260 XGrabKeyboard(FbTk::App::instance()->display(), 2278 XGrabKeyboard(FbTk::App::instance()->display(),