diff options
| author | Dana Jansens <danakj@orodu.net> | 2002-07-23 04:58:21 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2002-07-23 04:58:21 +0000 |
| commit | c6699031a0a87adf727fcf8c91ccf0203568a72d (patch) | |
| tree | 6aa595d8e97da5153f7f70b34883d7d5d533ba6a /util | |
| parent | 725e87a05ef44315bb6f61e8fdd14eac3eb89a03 (diff) | |
no more segging when adding removing windows
Diffstat (limited to 'util')
| -rw-r--r-- | util/epist/screen.cc | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/util/epist/screen.cc b/util/epist/screen.cc index ee19abb1..6b7b08a0 100644 --- a/util/epist/screen.cc +++ b/util/epist/screen.cc @@ -342,16 +342,11 @@ void screen::updateClientList() { Window *rootclients = 0; unsigned long num = (unsigned) -1; if (! _xatom->getValue(_root, XAtom::net_client_list, XAtom::window, num, - &rootclients)) { - while (! _clients.empty()) { - delete _clients.front(); - _clients.erase(_clients.begin()); - } - if (rootclients) delete [] rootclients; - return; - } - - WindowList::iterator it, end = _clients.end(); + &rootclients)) + num = 0; + + WindowList::iterator it; + const WindowList::iterator end = _clients.end(); unsigned long i; // insert new clients after the active window @@ -370,12 +365,17 @@ void screen::updateClientList() { // remove clients that no longer exist for (it = _clients.begin(); it != end;) { - WindowList::iterator it2 = it++; + WindowList::iterator it2 = it; + ++it; + for (i = 0; i < num; ++i) if (**it2 == rootclients[i]) break; if (i == num) { // no longer exists //cout << "Removed window: 0x" << hex << (*it2)->window() << dec << endl; + // watch for the active window + if (it2 == _active) + _active = _clients.end(); delete *it2; _clients.erase(it2); } |
