X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2FScreen.cc;h=31811fe63d740996b8745d9846e53006d57509cb;hb=a9bfdcaa06b42e9c0de06042f79d1920361aaa25;hp=d49e418afbfa6c5bc57f3a7d22eea4c046baae8a;hpb=bc3268b6f9f86e6aebe0d06ce174b2d603d09c1e;p=chaz%2Fopenbox diff --git a/src/Screen.cc b/src/Screen.cc index d49e418a..31811fe6 100644 --- a/src/Screen.cc +++ b/src/Screen.cc @@ -1186,20 +1186,38 @@ unsigned int BScreen::removeLastWorkspace(void) { void BScreen::changeWorkspaceID(unsigned int id) { if (! current_workspace || id == current_workspace->getID()) return; - current_workspace->hide(); + BlackboxWindow *focused = blackbox->getFocusedWindow(); + if (focused && focused->getScreen() == this) { + assert(focused->isStuck() || + focused->getWorkspaceNumber() == current_workspace->getID()); + + current_workspace->setLastFocusedWindow(focused); + } else { + // if no window had focus, no need to store a last focus + current_workspace->setLastFocusedWindow((BlackboxWindow *) 0); + } + + // when we switch workspaces, unfocus whatever was focused + blackbox->setFocusedWindow((BlackboxWindow *) 0); + current_workspace->hideAll(); workspacemenu->setItemSelected(current_workspace->getID() + 2, False); current_workspace = getWorkspace(id); - current_workspace->show(); - xatom->setValue(getRootWindow(), XAtom::net_current_desktop, XAtom::cardinal, id); workspacemenu->setItemSelected(current_workspace->getID() + 2, True); toolbar->redrawWorkspaceLabel(True); + current_workspace->showAll(); + + if (resource.focus_last && current_workspace->getLastFocusedWindow()) { + XSync(blackbox->getXDisplay(), False); + current_workspace->getLastFocusedWindow()->setInputFocus(); + } + updateNetizenCurrentWorkspace(); }