- BlackboxWindowList::iterator it = windowList.begin();
- const BlackboxWindowList::iterator end = windowList.end();
- unsigned int i = 0;
- for (; it != end; ++it, ++i)
- (*it)->setWindowNumber(i);
+ if (! newfocus ||
+ newfocus->isIconic() || // do not focus icons
+ newfocus->getWorkspaceNumber() != id || // or other workspaces
+ ! newfocus->setInputFocus())
+ newfocus = 0;
+ }
+
+ if (! newfocus) {
+ BlackboxWindowList::iterator it = stackingList.begin(),
+ end = stackingList.end();
+ for (; it != end; ++it) {
+ BlackboxWindow *tmp = *it;
+ if (tmp && tmp->isNormal() && tmp->setInputFocus()) {
+ // we found our new focus target
+ newfocus = tmp;
+ break;
+ }
+ }
+ }
+
+ screen->getBlackbox()->setFocusedWindow(newfocus);
+ } else {
+ // The window is not on the visible workspace.
+
+ if (old_window && lastfocus == old_window) {
+ // The window was the last-focus target, so we need to replace it.
+ BlackboxWindow *win = (BlackboxWindow*) 0;
+ if (! stackingList.empty())
+ win = stackingList.front();
+ setLastFocusedWindow(win);
+ }
+ }
+}