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
This commit is contained in:
parent
2c1ce30804
commit
3ee18e2f5f
1 changed files with 9 additions and 4 deletions
|
@ -1264,13 +1264,18 @@ void BScreen::changeWorkspaceID(unsigned int id) {
|
||||||
XQueryPointer(blackbox->getXDisplay(), getRootWindow(), &r, &c,
|
XQueryPointer(blackbox->getXDisplay(), getRootWindow(), &r, &c,
|
||||||
&rx, &ry, &x, &y, &m) &&
|
&rx, &ry, &x, &y, &m) &&
|
||||||
c != None) {
|
c != None) {
|
||||||
if ( (win = blackbox->searchWindow(c)) )
|
if ( (win = blackbox->searchWindow(c)) ) {
|
||||||
f = win->setInputFocus();
|
f = win->setInputFocus();
|
||||||
|
blackbox->setFocusedWindow(win);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If that fails, and we're doing focus_last, try to focus the last window.
|
// If that fails, and we're doing focus_last, try to focus the last window.
|
||||||
if (! f && resource.focus_last && current_workspace->getLastFocusedWindow())
|
if (! f && resource.focus_last &&
|
||||||
f = current_workspace->getLastFocusedWindow()->setInputFocus();
|
(win = current_workspace->getLastFocusedWindow())) {
|
||||||
|
f = win->setInputFocus();
|
||||||
|
blackbox->setFocusedWindow(win);
|
||||||
|
}
|
||||||
|
|
||||||
// If that fails, then set focus to nothing.
|
// If that fails, then set focus to nothing.
|
||||||
if (! f) blackbox->setFocusedWindow((BlackboxWindow *) 0);
|
if (! f) blackbox->setFocusedWindow((BlackboxWindow *) 0);
|
||||||
|
|
Loading…
Reference in a new issue