X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=util%2Fepist%2Fscreen.cc;h=a67b0a37ec0ed7c62070170c6d26ad135099cd75;hb=b81dbf9af620472ac5661a6a778f92a646184ce8;hp=7845e55f9489f8b11c2fa36cefe478584f74252b;hpb=eca8fd764eeb631733cae2b171ca0787fca788d7;p=chaz%2Fopenbox diff --git a/util/epist/screen.cc b/util/epist/screen.cc index 7845e55f..a67b0a37 100644 --- a/util/epist/screen.cc +++ b/util/epist/screen.cc @@ -392,6 +392,7 @@ void screen::handleKeyrelease(const XEvent &) { _clients.remove(w); _clients.push_front(w); + _active = _clients.begin(); w->raise(); _cycling = false; @@ -461,16 +462,21 @@ void screen::updateClientList() { const WindowList::iterator end = _clients.end(); unsigned long i; - // insert new clients after the active window for (i = 0; i < num; ++i) { for (it = _clients.begin(); it != end; ++it) if (**it == rootclients[i]) break; if (it == end) { // didn't already exist if (doAddWindow(rootclients[i])) { - // cout << "Added window: 0x" << hex << rootclients[i] << dec << endl; - _clients.insert(insert_point, new XWindow(_epist, this, - rootclients[i])); +// cout << "Added window: 0x" << hex << rootclients[i] << dec << endl; + if (_stacked_cycling) { + // insert new clients after the active window + _clients.insert(insert_point, new XWindow(_epist, this, + rootclients[i])); + } else { + // insert new clients at the front of the list + _clients.push_front(new XWindow(_epist, this, rootclients[i])); + } } } } @@ -536,16 +542,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";