From ab428d9ab02a8bfed489391f7483918dc003f096 Mon Sep 17 00:00:00 2001 From: Xavier Izard Date: Mon, 10 May 2004 23:22:27 +0000 Subject: [PATCH] Patch for xinerama mode to allow fullscreens both on one or several screen(s) svn path=/trunk/kdebase/kwin/; revision=310202 --- geometry.cpp | 9 +++++++-- manage.cpp | 2 +- options.cpp | 3 ++- options.h | 1 + utils.h | 3 ++- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/geometry.cpp b/geometry.cpp index 3ab14e35d0..8a7daed515 100644 --- a/geometry.cpp +++ b/geometry.cpp @@ -226,6 +226,11 @@ QRect Workspace::clientArea( clientAreaOption opt, const QPoint& p, int desktop return desktopwidget->screenGeometry( screen ); else return desktopwidget->geometry(); + case FullScreenArea: + if (options->xineramaFullscreenEnabled) + return desktopwidget->screenGeometry( screen ); + else + return desktopwidget->geometry(); case PlacementArea: if (options->xineramaPlacementEnabled) return sarea; @@ -654,7 +659,7 @@ void Client::checkWorkspacePosition() if( isFullScreen()) { - QRect area = workspace()->clientArea( MaximizeFullArea, this ); + QRect area = workspace()->clientArea( FullScreenArea, this ); if( geometry() != area ) setGeometry( area ); return; @@ -1612,7 +1617,7 @@ void Client::setFullScreen( bool set, bool user ) info->setState( isFullScreen() ? NET::FullScreen : 0, NET::FullScreen ); updateDecoration( false, false ); if( isFullScreen()) - setGeometry( workspace()->clientArea( MaximizeFullArea, this )); + setGeometry( workspace()->clientArea( FullScreenArea, this )); else { if( maximizeMode() != MaximizeRestore ) diff --git a/manage.cpp b/manage.cpp index a978932ce7..62a4f7c550 100644 --- a/manage.cpp +++ b/manage.cpp @@ -209,7 +209,7 @@ bool Client::manage( Window w, bool isMapped ) && noBorder() && !isUserNoBorder() && isFullScreenable( true )) { fullscreen_mode = FullScreenHack; - geom = workspace()->clientArea( MaximizeFullArea, geom.center(), desktop()); + geom = workspace()->clientArea( FullScreenArea, geom.center(), desktop()); placementDone = true; } diff --git a/options.cpp b/options.cpp index 129daef6a6..effbfb8b8d 100644 --- a/options.cpp +++ b/options.cpp @@ -84,10 +84,11 @@ unsigned long Options::updateSettings() xineramaPlacementEnabled = gc->readBoolEntry ("XineramaPlacementEnabled", true); xineramaMovementEnabled = gc->readBoolEntry ("XineramaMovementEnabled", true); xineramaMaximizeEnabled = gc->readBoolEntry ("XineramaMaximizeEnabled", true); + xineramaFullscreenEnabled = gc->readBoolEntry ("XineramaFullscreenEnabled", true); } else { - xineramaPlacementEnabled = xineramaMovementEnabled = xineramaMaximizeEnabled = false; + xineramaPlacementEnabled = xineramaMovementEnabled = xineramaMaximizeEnabled = xineramaFullscreenEnabled = false; } delete gc; diff --git a/options.h b/options.h index 4201128d65..5c98c910cf 100644 --- a/options.h +++ b/options.h @@ -120,6 +120,7 @@ class Options : public KDecorationOptions bool xineramaPlacementEnabled; bool xineramaMovementEnabled; bool xineramaMaximizeEnabled; + bool xineramaFullscreenEnabled; /** MoveResizeMode, either Tranparent or Opaque. diff --git a/utils.h b/utils.h index 5bdf7cdbec..121de8ba23 100644 --- a/utils.h +++ b/utils.h @@ -89,7 +89,8 @@ enum clientAreaOption PlacementArea, // geometry where a window will be initially placed after being mapped MovementArea, // ??? window movement snapping area? ignore struts MaximizeArea, // geometry to which a window will be maximized - MaximizeFullArea, // like MaximizeArea, but ignore struts - used e.g. for fullscreening + MaximizeFullArea, // like MaximizeArea, but ignore struts - used e.g. for topmenu + FullScreenArea, // area for fullscreen windows // these below don't depend on xinerama settings WorkArea, // whole workarea (all screens together) FullArea, // whole area (all screens together), ignore struts