@ -490,13 +490,14 @@ bool Workspace::activateNextWindow(Window *window)
Window * focusCandidate = nullptr ;
Window * focusCandidate = nullptr ;
VirtualDesktop * desktop = VirtualDesktopManager : : self ( ) - > currentDesktop ( ) ;
VirtualDesktop * desktop = VirtualDesktopManager : : self ( ) - > currentDesktop ( ) ;
Output * output = window ? window - > output ( ) : workspace ( ) - > activeOutput ( ) ;
if ( ! focusCandidate & & showingDesktop ( ) ) {
if ( ! focusCandidate & & showingDesktop ( ) ) {
focusCandidate = findDesktop ( true , desktop ) ; // to not break the state
focusCandidate = findDesktop ( true , desktop , output ) ; // to not break the state
}
}
if ( ! focusCandidate & & options - > isNextFocusPrefersMouse ( ) ) {
if ( ! focusCandidate & & options - > isNextFocusPrefersMouse ( ) ) {
focusCandidate = windowUnderMouse ( window ? window - > output ( ) : workspace ( ) - > activeOutput ( ) ) ;
focusCandidate = windowUnderMouse ( output ) ;
if ( focusCandidate & & ( focusCandidate = = window | | focusCandidate - > isDesktop ( ) ) ) {
if ( focusCandidate & & ( focusCandidate = = window | | focusCandidate - > isDesktop ( ) ) ) {
// should rather not happen, but it cannot get the focus. rest of usability is tested above
// should rather not happen, but it cannot get the focus. rest of usability is tested above
focusCandidate = nullptr ;
focusCandidate = nullptr ;
@ -519,7 +520,7 @@ bool Workspace::activateNextWindow(Window *window)
}
}
if ( focusCandidate = = nullptr ) { // last chance: focus the desktop
if ( focusCandidate = = nullptr ) { // last chance: focus the desktop
focusCandidate = findDesktop ( true , desktop ) ;
focusCandidate = findDesktop ( true , desktop , output ) ;
}
}
if ( focusCandidate ! = nullptr ) {
if ( focusCandidate ! = nullptr ) {
@ -540,7 +541,7 @@ void Workspace::switchToOutput(Output *output)
VirtualDesktop * desktop = VirtualDesktopManager : : self ( ) - > currentDesktop ( ) ;
VirtualDesktop * desktop = VirtualDesktopManager : : self ( ) - > currentDesktop ( ) ;
Window * get_focus = m_focusChain - > getForActivation ( desktop , output ) ;
Window * get_focus = m_focusChain - > getForActivation ( desktop , output ) ;
if ( get_focus = = nullptr ) {
if ( get_focus = = nullptr ) {
get_focus = findDesktop ( true , desktop ) ;
get_focus = findDesktop ( true , desktop , output ) ;
}
}
if ( get_focus ! = nullptr & & get_focus ! = mostRecentlyActivatedWindow ( ) ) {
if ( get_focus ! = nullptr & & get_focus ! = mostRecentlyActivatedWindow ( ) ) {
requestFocus ( get_focus ) ;
requestFocus ( get_focus ) ;