Commit 835648bc authored by Martin Flöser's avatar Martin Flöser
Browse files

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.
parent 607e175b
......@@ -72,11 +72,20 @@ void DBusInterface::name() \
Workspace::self()->name();\
}
WRAP(cascadeDesktop)
WRAP(killWindow)
WRAP(nextDesktop)
WRAP(previousDesktop)
WRAP(reconfigure)
#undef WRAP
#define WRAP(name) \
void DBusInterface::name() \
{\
Placement::self()->name();\
}
WRAP(cascadeDesktop)
WRAP(unclutterDesktop)
#undef WRAP
......
......@@ -763,43 +763,6 @@ void Workspace::setClientIsMoving(Client *c)
--block_focus;
}
/*!
Cascades all clients on the current desktop
*/
void Workspace::cascadeDesktop()
{
// TODO XINERAMA this probably is not right for xinerama
Q_ASSERT(block_stacking_updates == 0);
initPositioning->reinitCascading(currentDesktop());
QRect area = clientArea(PlacementArea, QPoint(0, 0), currentDesktop());
foreach (Toplevel *toplevel, stackingOrder()) {
Client *client = qobject_cast<Client*>(toplevel);
if (!client ||
(!client->isOnDesktop(currentDesktop())) ||
(client->isMinimized()) ||
(client->isOnAllDesktops()) ||
(!client->isMovable()))
continue;
initPositioning->placeCascaded(client, area);
}
}
/*!
Unclutters the current desktop by smart-placing all clients
again.
*/
void Workspace::unclutterDesktop()
{
for (int i = clients.size() - 1; i >= 0; i--) {
if ((!clients.at(i)->isOnDesktop(currentDesktop())) ||
(clients.at(i)->isMinimized()) ||
(clients.at(i)->isOnAllDesktops()) ||
(!clients.at(i)->isMovable()))
continue;
initPositioning->placeSmart(clients.at(i), QRect());
}
}
// When kwin crashes, windows will not be gravitated back to their original position
// and will remain offset by the size of the decoration. So when restarting, fix this
// (the property with the size of the frame remains on the window after the crash).
......
......@@ -543,6 +543,40 @@ void Placement::placeMaximizing(Client* c, QRect& area, Policy nextPlacement)
}
}
void Placement::cascadeDesktop()
{
// TODO XINERAMA this probably is not right for xinerama
Workspace *ws = Workspace::self();
const int desktop = ws->currentDesktop();
reinitCascading(desktop);
// TODO: make area const once placeFoo methods are fixed to take a const QRect&
QRect area = ws->clientArea(PlacementArea, QPoint(0, 0), desktop);
foreach (Toplevel *toplevel, ws->stackingOrder()) {
Client *client = qobject_cast<Client*>(toplevel);
if (!client ||
(!client->isOnCurrentDesktop()) ||
(client->isMinimized()) ||
(client->isOnAllDesktops()) ||
(!client->isMovable()))
continue;
placeCascaded(client, area);
}
}
void Placement::unclutterDesktop()
{
const ClientList &clients = Workspace::self()->clientList();
for (int i = clients.size() - 1; i >= 0; i--) {
Client *client = clients.at(i);
if ((!client->isOnCurrentDesktop()) ||
(client->isMinimized()) ||
(client->isOnAllDesktops()) ||
(!client->isMovable()))
continue;
placeSmart(client, QRect());
}
}
QRect Placement::checkArea(const Client* c, const QRect& area)
{
if (area.isNull())
......
......@@ -71,6 +71,15 @@ public:
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);
......
......@@ -448,8 +448,6 @@ public:
bool decorationSupportsBlurBehind() const;
// D-Bus interface
void cascadeDesktop();
void unclutterDesktop();
void doNotManage(const QString&);
/**
* @deprecated
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment