--- kwin/useractions.cpp.sav 2006-06-28 14:49:35.000000000 +0200 +++ kwin/useractions.cpp 2006-08-30 19:54:11.000000000 +0200 @@ -522,27 +522,33 @@ bool Client::performMouseCommand( Option 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 --- kwin/workspace.h.sav 2006-08-30 19:08:43.000000000 +0200 +++ kwin/workspace.h 2006-08-30 19:54:28.000000000 +0200 @@ -167,6 +167,7 @@ class Workspace : public QObject, public 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; --- kwin/workspace.cpp.sav 2006-08-30 19:46:15.000000000 +0200 +++ kwin/workspace.cpp 2006-08-30 19:55:35.000000000 +0200 @@ -1538,6 +1538,15 @@ void Workspace::checkActiveScreen( const 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 )