+ assert(newfocus != w); // this would be very wrong.
+
+ if (id == screen->getCurrentWorkspaceID()) {
+ /*
+ if the window is on the visible workspace, then try focus it, and fall
+ back to the default focus target if the window won't focus.
+ */
+ if (! (newfocus && newfocus->setInputFocus()))
+ screen->getBlackbox()->setFocusedWindow(0);
+ } else if (lastfocus == w) {
+ /*
+ If this workspace is not the current one do not assume that
+ w == lastfocus. If a sticky window is removed on a workspace other
+ than where it originated, it will fire the removeWindow on a
+ non-visible workspace.
+ */
+
+ /*
+ If the window isn't on the visible workspace, don't focus the new one,
+ just mark it to be focused when the workspace comes into view.
+ */
+ setLastFocusedWindow(newfocus);
+ }
+ }