/***************************************************************** KWin - the KDE window manager This file is part of the KDE project. Copyright (C) 1999, 2000 Matthias Ettrich Copyright (C) 1997 to 2002 Cristian Tibirna Copyright (C) 2003 Lubos Lunak You can Freely distribute this program under the GNU General Public License. See the file "COPYING" for the exact licensing terms. ******************************************************************/ #ifndef KWIN_PLACEMENT_H #define KWIN_PLACEMENT_H #include #include #include namespace KWinInternal { class Workspace; class Client; class Placement { public: Placement(Workspace* w); void place(Client* c, QRect& area ); void placeAtRandom (Client* c, const QRect& area ); void placeCascaded (Client* c, const QRect& area, bool re_init = false); void placeSmart (Client* c, const QRect& area ); void placeMaximizing (Client* c, const QRect& area ); void placeCentered (Client* c, const QRect& area ); void placeZeroCornered(Client* c, const QRect& area ); void placeDialog (Client* c, QRect& area ); void placeUtility (Client* c, QRect& area ); /** * Placement policies. How workspace decides the way windows get positioned * on the screen. The better the policy, the heavier the resource use. * Normally you don't have to worry. What the WM adds to the startup time * is nil compared to the creation of the window itself in the memory */ enum Policy { NoPlacement, // not really a placement Default, // special, means to use the global default Random, Smart, Cascade, Centered, ZeroCornered, UnderMouse, // special OnMainWindow, // special Maximizing }; static Policy policyFromString( const QString& policy, bool no_special ); static const char* policyToString( Policy policy ); private: void place(Client* c, Policy policy, QRect& area); void placeUnderMouse(Client* c, QRect& area ); void placeOnMainWindow(Client* c, QRect& area ); QRect checkArea( const Client*c, const QRect& area ); Placement(); //CT needed for cascading+ struct DesktopCascadingInfo { QPoint pos; int col; int row; }; QList cci; Workspace* m_WorkspacePtr; }; } // namespace #endif