X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fopenbox.cc;h=ee2fffb52be6bcaabcb3834d5b3a9d53bf92a041;hb=3762f3c88f4d84697df37c0a3bdc733e7bee6e45;hp=c5a93eeb25003d278f6299958b15d9d597a297e6;hpb=d363f720a6b0d1c361bc2022d0e5fcd5a75fd04d;p=chaz%2Fopenbox diff --git a/src/openbox.cc b/src/openbox.cc index c5a93eeb..ee2fffb5 100644 --- a/src/openbox.cc +++ b/src/openbox.cc @@ -54,13 +54,13 @@ void Openbox::signalHandler(int signal) case SIGINT: case SIGTERM: case SIGPIPE: - printf("Caught signal %d. Exiting.", signal); + printf("Caught signal %d. Exiting.\n", signal); instance->shutdown(); break; case SIGFPE: case SIGSEGV: - printf("Caught signal %d. Aborting and dumping core.", signal); + printf("Caught signal %d. Aborting and dumping core.\n", signal); abort(); } } @@ -105,6 +105,10 @@ Openbox::Openbox(int argc, char **argv) Openbox::~Openbox() { _state = State_Exiting; // time to kill everything + + // unmanage all windows + while (!_clients.empty()) + _xeventhandler.unmanageWindow(_clients.begin()->second); // close the X display otk::OBDisplay::destroy(); @@ -218,13 +222,24 @@ void Openbox::addClient(Window window, OBClient *client) void Openbox::removeClient(Window window) { - _clients[window] = (OBClient *) 0; + ClientMap::iterator it = _clients.find(window); + if (it != _clients.end()) + _clients.erase(it); } OBClient *Openbox::findClient(Window window) { - return _clients[window]; + /* + NOTE: we dont use _clients[] to find the value because that will insert + a new null into the hash, which really sucks when we want to clean up the + hash at shutdown! + */ + ClientMap::iterator it = _clients.find(window); + if (it != _clients.end()) + return it->second; + else + return (OBClient*) 0; } }