f = win->setInputFocus();
}
- // If that fails, and we're doing focus_last, try to focus the last window.
- if (! f && resource.focus_last && current_workspace->getLastFocusedWindow())
- f = current_workspace->getLastFocusedWindow()->setInputFocus();
+ // If that fails, and we're doing focus_last, try to focus the last window.
+ if (! f && resource.focus_last &&
+ (win = current_workspace->getLastFocusedWindow()))
+ f = win->setInputFocus();
- // If that fails, then set focus to nothing.
- if (! f) blackbox->setFocusedWindow((BlackboxWindow *) 0);
+ /*
+ if we found a focus target, then we set the focused window explicitly
+ because it is possible to switch off this workspace before the x server
+ generates the FocusIn event for the window. if that happens, openbox would
+ lose track of what window was the 'LastFocused' window on the workspace.
+
+ if we did not find a focus target, then set the current focused window to
+ nothing.
+ */
+ if (f)
+ blackbox->setFocusedWindow(win);
+ else
+ blackbox->setFocusedWindow((BlackboxWindow *) 0);
updateNetizenCurrentWorkspace();
}
if (win->isDesktop()) {
desktopWindowList.push_back(win->getFrameWindow());
- } else if (win->isNormal()) {
+ } else { // if (win->isNormal()) {
// don't list desktop windows as managed windows
windowList.push_back(win);
updateClientList();
break;
}
assert(it != end); // the window wasnt a desktop window?
- } else if (w->isNormal()) {
+ } else { // if (w->isNormal()) {
// we don't list desktop windows as managed windows
windowList.remove(w);
updateClientList();
while(! windowList.empty())
unmanageWindow(windowList.front(), True);
+ while(! desktopWindowList.empty()) {
+ BlackboxWindow *win = blackbox->searchWindow(desktopWindowList.front());
+ assert(win);
+ unmanageWindow(win, True);
+ }
+
slit->shutdown();
}