diff --git a/geometry.cpp b/geometry.cpp index 04fbbf497f..c8f7664499 100644 --- a/geometry.cpp +++ b/geometry.cpp @@ -248,6 +248,7 @@ QRect Workspace::clientArea( clientAreaOption opt, const QPoint& p, int desktop return desktopwidget->geometry(); case WorkArea: return warea; + case FullXineramaArea: case FullArea: return desktopwidget->geometry(); case ScreenArea: @@ -2029,7 +2030,12 @@ void Client::setFullScreen( bool set, bool user ) workspace()->updateClientLayer( this ); // active fullscreens get different layer info->setState( isFullScreen() ? NET::FullScreen : 0, NET::FullScreen ); updateDecoration( false, false ); - if( isFullScreen()) + // XINERAMA + if( isFullScreen() && xSizeHint.width > workspace()->clientArea(FullScreenArea, this).width() ) + setGeometry( workspace()->clientArea( FullXineramaArea, this )); + else if( isFullScreen() && xSizeHint.height > workspace()->clientArea(FullScreenArea, this).height() ) + setGeometry( workspace()->clientArea( FullXineramaArea, this )); + else if( isFullScreen()) setGeometry( workspace()->clientArea( FullScreenArea, this )); else { diff --git a/utils.h b/utils.h index 3e3533e5e6..73bdc3c5f5 100644 --- a/utils.h +++ b/utils.h @@ -97,7 +97,8 @@ enum clientAreaOption // these below don't depend on xinerama settings WorkArea, // whole workarea (all screens together) FullArea, // whole area (all screens together), ignore struts - ScreenArea // one whole screen, ignore struts + ScreenArea, // one whole screen, ignore struts + FullXineramaArea }; enum ShadeMode