+ current_workspace->showAll();
+
+ int x, y, rx, ry;
+ Window c, r;
+ unsigned int m;
+ BlackboxWindow *win = (BlackboxWindow *) 0;
+ bool f = False;
+
+ XSync(blackbox->getXDisplay(), False);
+
+ // If sloppy focus and we can find the client window under the pointer,
+ // try to focus it.
+ if (resource.sloppy_focus &&
+ XQueryPointer(blackbox->getXDisplay(), getRootWindow(), &r, &c,
+ &rx, &ry, &x, &y, &m) &&
+ c != None) {
+ if ( (win = blackbox->searchWindow(c)) )
+ f = win->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 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);
+