From 3ee18e2f5f1477b70538fe9250ee498f6f583122 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sun, 25 Aug 2002 08:11:43 +0000 Subject: [PATCH] explicitly set the focused window instead of waiting for the x server when changing workspaces, otherwise, if you move througha workspace before the xserver distributes your focus, you end up losing which window had the focus --- src/Screen.cc | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Screen.cc b/src/Screen.cc index 1c9c347b..5c1134ff 100644 --- a/src/Screen.cc +++ b/src/Screen.cc @@ -1264,13 +1264,18 @@ void BScreen::changeWorkspaceID(unsigned int id) { XQueryPointer(blackbox->getXDisplay(), getRootWindow(), &r, &c, &rx, &ry, &x, &y, &m) && c != None) { - if ( (win = blackbox->searchWindow(c)) ) + if ( (win = blackbox->searchWindow(c)) ) { f = win->setInputFocus(); + blackbox->setFocusedWindow(win); + } } - // 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(); + blackbox->setFocusedWindow(win); + } // If that fails, then set focus to nothing. if (! f) blackbox->setFocusedWindow((BlackboxWindow *) 0); -- 2.39.2