X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=util%2Fepist%2Fscreen.cc;h=c3ea4fb5f0e51ff6ef71105669f9286d30c19d0c;hb=48a450083db59085921c79c2bb68dedd0b95821a;hp=982c2173b54c01f6c5405196e912d077e9fa6a58;hpb=afbc5546849cf1c0fb44fe0ac6c42986cdfeca4b;p=chaz%2Fopenbox diff --git a/util/epist/screen.cc b/util/epist/screen.cc index 982c2173..c3ea4fb5 100644 --- a/util/epist/screen.cc +++ b/util/epist/screen.cc @@ -384,15 +384,19 @@ void screen::handleKeyrelease(const XEvent &) { // the only keyrelease event we care about (for now) is when we do stacked // cycling and the modifier is released if (_stacked_cycling && _cycling && nothingIsPressed()) { - XWindow *w = *_active; - // all modifiers have been released. ungrab the keyboard, move the // focused window to the top of the Z-order and raise it ungrabModifiers(); - _clients.remove(w); - _clients.push_front(w); - w->raise(); + if (_active != _clients.end()) { + XWindow *w = *_active; + bool e = _last_active == _active; + _clients.remove(w); + _clients.push_front(w); + _active = _clients.begin(); + if (e) _last_active = _active; + w->raise(); + } _cycling = false; } @@ -541,16 +545,19 @@ void screen::updateActiveWindow() { _active = it; - /* if we're not cycling and a window gets focus, add it to the top of the - * cycle stack. - */ - if (_stacked_cycling && !_cycling) { - _clients.remove(*_active); - _clients.push_front(*_active); - } + if (_active != end) { + /* if we're not cycling and a window gets focus, add it to the top of the + * cycle stack. + */ + if (_stacked_cycling && !_cycling) { + XWindow *win = *_active; + _clients.remove(win); + _clients.push_front(win); + _active = _clients.begin(); + } - if (it != end) - _last_active = it; + _last_active = _active; + } /* cout << "Active window is now: "; if (_active == _clients.end()) cout << "None\n";