kwin/placement.h
Martin Gräßlin 835648bc20 Move cascadeDesktop and unclutterDesktop to Placement
It is more Placement related and does not really fit into geometry given
that it only calls methods on Placement. It probably only was inside
Workspace due to being part of the DBus interface. The DBus methods are
used by external components so it needs to stay.

The DBus Wrapper is now calling the methods on the singleton Placement
directly, so no need in Workspace anymore.
2012-12-20 07:19:53 +01:00

125 lines
3.7 KiB
C++

/********************************************************************
KWin - the KDE window manager
This file is part of the KDE project.
Copyright (C) 1999, 2000 Matthias Ettrich <ettrich@kde.org>
Copyright (C) 1997 to 2002 Cristian Tibirna <tibirna@kde.org>
Copyright (C) 2003 Lubos Lunak <l.lunak@kde.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************/
#ifndef KWIN_PLACEMENT_H
#define KWIN_PLACEMENT_H
#include <QPoint>
#include <QRect>
#include <QList>
namespace KWin
{
class Workspace;
class Client;
class Placement
{
public:
virtual ~Placement();
/**
* 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
Unknown, // special, means the function should use its default
Random,
Smart,
Cascade,
Centered,
ZeroCornered,
UnderMouse, // special
OnMainWindow, // special
Maximizing
};
void place(Client* c, QRect& area);
void placeAtRandom(Client* c, const QRect& area, Policy next = Unknown);
void placeCascaded(Client* c, QRect& area, Policy next = Unknown);
void placeSmart(Client* c, const QRect& area, Policy next = Unknown);
void placeMaximizing(Client* c, QRect& area, Policy next = Unknown);
void placeCentered(Client* c, const QRect& area, Policy next = Unknown);
void placeZeroCornered(Client* c, const QRect& area, Policy next = Unknown);
void placeDialog(Client* c, QRect& area, Policy next = Unknown);
void placeUtility(Client* c, QRect& area, Policy next = Unknown);
void reinitCascading(int desktop);
/**
* Cascades all clients on the current desktop
**/
void cascadeDesktop();
/**
* Unclutters the current desktop by smart-placing all clients again.
**/
void unclutterDesktop();
static Policy policyFromString(const QString& policy, bool no_special);
static const char* policyToString(Policy policy);
/**
* Singleton getter for this Placement object once the Placement has been created.
* @see create
**/
static Placement *self();
/**
* Creates the Placement singleton.
**/
static Placement *create(Workspace *ws);
private:
explicit Placement(Workspace* w);
void place(Client* c, QRect& area, Policy policy, Policy nextPlacement = Unknown);
void placeUnderMouse(Client* c, QRect& area, Policy next = Unknown);
void placeOnMainWindow(Client* c, QRect& area, Policy next = Unknown);
QRect checkArea(const Client*c, const QRect& area);
//CT needed for cascading+
struct DesktopCascadingInfo {
QPoint pos;
int col;
int row;
};
QList<DesktopCascadingInfo> cci;
Workspace* m_WorkspacePtr;
static Placement *s_self;
};
inline
Placement *Placement::self()
{
return s_self;
}
} // namespace
#endif