diff --git a/useractions.cpp b/useractions.cpp index 0998b1ed99..197cec0400 100644 --- a/useractions.cpp +++ b/useractions.cpp @@ -565,27 +565,33 @@ bool Client::performMouseCommand( Options::MouseCommand command, QPoint globalPo case Options::MouseActivateAndRaise: replay = isActive(); // for clickraise mode workspace()->takeActivity( this, ActivityFocus | ActivityRaise, handled && replay ); + workspace()->setActiveScreenMouse( globalPos ); break; case Options::MouseActivateAndLower: workspace()->requestFocus( this ); workspace()->lowerClient( this ); + workspace()->setActiveScreenMouse( globalPos ); break; case Options::MouseActivate: replay = isActive(); // for clickraise mode workspace()->takeActivity( this, ActivityFocus, handled && replay ); + workspace()->setActiveScreenMouse( globalPos ); break; case Options::MouseActivateRaiseAndPassClick: workspace()->takeActivity( this, ActivityFocus | ActivityRaise, handled ); + workspace()->setActiveScreenMouse( globalPos ); replay = true; break; case Options::MouseActivateAndPassClick: workspace()->takeActivity( this, ActivityFocus, handled ); + workspace()->setActiveScreenMouse( globalPos ); replay = true; break; case Options::MouseActivateRaiseAndMove: case Options::MouseActivateRaiseAndUnrestrictedMove: workspace()->raiseClient( this ); workspace()->requestFocus( this ); + workspace()->setActiveScreenMouse( globalPos ); if( options->moveMode == Options::Transparent && isMovable()) move_faked_activity = workspace()->fakeRequestedActivity( this ); // fallthrough diff --git a/workspace.cpp b/workspace.cpp index fedc39c9f2..f4614e9ae9 100644 --- a/workspace.cpp +++ b/workspace.cpp @@ -1634,6 +1634,15 @@ void Workspace::checkActiveScreen( const Client* c ) active_screen = c->screen(); } +// called e.g. when a user clicks on a window, set active screen to be the screen +// where the click occured +void Workspace::setActiveScreenMouse( QPoint mousepos ) + { + if( !options->xineramaEnabled ) + return; + active_screen = qApp->desktop()->screenNumber( mousepos ); + } + QRect Workspace::screenGeometry( int screen ) const { if( !options->xineramaEnabled ) diff --git a/workspace.h b/workspace.h index fb19649a09..795dc5ce70 100644 --- a/workspace.h +++ b/workspace.h @@ -175,6 +175,7 @@ class Workspace : public QObject, public KDecorationDefines int activeScreen() const; int numScreens() const; void checkActiveScreen( const Client* c ); + void setActiveScreenMouse( QPoint mousepos ); QRect screenGeometry( int screen ) const; int screenNumber( QPoint pos ) const; QWidget* desktopWidget();