X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=util%2Fepist%2Fscreen.cc;h=0220a9499ef7ec34676d77784686b9a89e5730d0;hb=5e9f6a165c2304202d6e99993ce6deaac5d32ccc;hp=a67b0a37ec0ed7c62070170c6d26ad135099cd75;hpb=b81dbf9af620472ac5661a6a778f92a646184ce8;p=chaz%2Fopenbox diff --git a/util/epist/screen.cc b/util/epist/screen.cc index a67b0a37..0220a949 100644 --- a/util/epist/screen.cc +++ b/util/epist/screen.cc @@ -149,7 +149,9 @@ void screen::processEvent(const XEvent &e) { DestroyNotify, &ev) || XCheckTypedWindowEvent(_epist->getXDisplay(), e.xany.window, UnmapNotify, &ev)) { - processEvent(ev); + + XWindow *win = _epist->findWindow(e.xany.window); + if (win) win->processEvent(ev); } updateClientList(); @@ -384,16 +386,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); - _active = _clients.begin(); - 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; } @@ -469,14 +474,9 @@ void screen::updateClientList() { if (it == end) { // didn't already exist if (doAddWindow(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])); - } + // insert new clients after the active window + _clients.insert(insert_point, new XWindow(_epist, this, + rootclients[i])); } } } @@ -517,7 +517,9 @@ const XWindow *screen::lastActiveWindow() const { WindowList::const_iterator it, end = _clients.end(); for (it = _clients.begin(); it != end; ++it) if ((*it)->getScreen() == this && ! (*it)->iconic() && - ((*it)->desktop() == 0xffffffff || (*it)->desktop() == _active_desktop)) + (*it)->canFocus() && + ((*it)->desktop() == 0xffffffff || + (*it)->desktop() == _active_desktop)) return *it; // no windows on this screen @@ -551,9 +553,9 @@ void screen::updateActiveWindow() { _clients.remove(win); _clients.push_front(win); _active = _clients.begin(); - } - _last_active = _active; + _last_active = _active; + } } /* cout << "Active window is now: ";