add \n's to the signal printfs make the hash of all clients destroy properly
Dana Jansens danakj@orodu.net
2 files changed,
25 insertions(+),
8 deletions(-)
M
src/frame.cc
→
src/frame.cc
@@ -267,6 +267,8 @@
// map/unmap all the windows if (_decorations & OBClient::Decor_Titlebar) { XMapWindow(otk::OBDisplay::display, _titlebar); + XSetWindowBorder(otk::OBDisplay::display, _titlebar, + _style->getBorderWidth()); XMapWindow(otk::OBDisplay::display, _label); if (_decorations & OBClient::Decor_Iconify) XMapWindow(otk::OBDisplay::display, _button_iconify);@@ -295,8 +297,14 @@ }
if (_decorations & OBClient::Decor_Handle) { XMapWindow(otk::OBDisplay::display, _handle); + XSetWindowBorder(otk::OBDisplay::display, _handle, + _style->getBorderWidth()); XMapWindow(otk::OBDisplay::display, _grip_left); + XSetWindowBorder(otk::OBDisplay::display, _grip_left, + _style->getBorderWidth()); XMapWindow(otk::OBDisplay::display, _grip_right); + XSetWindowBorder(otk::OBDisplay::display, _grip_right, + _style->getBorderWidth()); } else { XUnmapWindow(otk::OBDisplay::display, _handle); XUnmapWindow(otk::OBDisplay::display, _grip_left);
M
src/openbox.cc
→
src/openbox.cc
@@ -54,13 +54,13 @@
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(); } }@@ -107,10 +107,8 @@ {
_state = State_Exiting; // time to kill everything // unmanage all windows - ClientMap::iterator it, end; - for (it = _clients.begin(), end = _clients.end(); it != end; ++it) { - _xeventhandler.unmanageWindow(it->second); - } + while (!_clients.empty()) + _xeventhandler.unmanageWindow(_clients.begin()->second); // close the X display otk::OBDisplay::destroy();@@ -224,13 +222,24 @@
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; } }