2010-09-21 14:31:40 +00:00
|
|
|
/********************************************************************
|
|
|
|
KWin - the KDE window manager
|
|
|
|
This file is part of the KDE project.
|
|
|
|
|
|
|
|
Copyright (C) 2010 Rohan Prabhu <rohan@rohanprabhu.com>
|
2012-01-21 16:48:07 +00:00
|
|
|
Copyright (C) 2011, 2012 Martin Gräßlin <mgraesslin@kde.org>
|
2010-09-21 14:31:40 +00:00
|
|
|
|
|
|
|
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/>.
|
|
|
|
*********************************************************************/
|
|
|
|
|
2012-01-22 11:38:03 +00:00
|
|
|
#include "workspace_wrapper.h"
|
2012-01-21 09:04:47 +00:00
|
|
|
#include "../client.h"
|
2012-04-10 18:56:13 +00:00
|
|
|
#include "../outline.h"
|
2013-04-03 10:19:27 +00:00
|
|
|
#include "../screens.h"
|
2012-11-16 07:23:47 +00:00
|
|
|
#include "../virtualdesktops.h"
|
2013-04-26 09:52:15 +00:00
|
|
|
#include "../workspace.h"
|
2013-04-04 14:14:12 +00:00
|
|
|
#ifdef KWIN_BUILD_ACTIVITIES
|
|
|
|
#include "../activities.h"
|
|
|
|
#endif
|
2010-09-21 14:31:40 +00:00
|
|
|
|
2013-02-26 08:00:51 +00:00
|
|
|
#include <QDesktopWidget>
|
2013-08-06 08:27:49 +00:00
|
|
|
#include <QApplication>
|
2012-03-27 17:43:04 +00:00
|
|
|
|
2012-01-22 11:38:03 +00:00
|
|
|
namespace KWin {
|
|
|
|
|
|
|
|
WorkspaceWrapper::WorkspaceWrapper(QObject* parent) : QObject(parent)
|
2011-01-30 14:34:42 +00:00
|
|
|
{
|
2012-01-21 16:48:07 +00:00
|
|
|
KWin::Workspace *ws = KWin::Workspace::self();
|
2012-11-16 07:23:47 +00:00
|
|
|
KWin::VirtualDesktopManager *vds = KWin::VirtualDesktopManager::self();
|
2015-03-13 10:48:08 +00:00
|
|
|
connect(ws, &Workspace::desktopPresenceChanged, this, &WorkspaceWrapper::desktopPresenceChanged);
|
2015-03-06 11:38:07 +00:00
|
|
|
connect(ws, &Workspace::currentDesktopChanged, this, &WorkspaceWrapper::currentDesktopChanged);
|
2012-01-21 16:48:07 +00:00
|
|
|
connect(ws, SIGNAL(clientAdded(KWin::Client*)), SIGNAL(clientAdded(KWin::Client*)));
|
|
|
|
connect(ws, SIGNAL(clientAdded(KWin::Client*)), SLOT(setupClientConnections(KWin::Client*)));
|
2015-04-30 08:51:58 +00:00
|
|
|
connect(ws, &Workspace::clientRemoved, this, &WorkspaceWrapper::clientRemoved);
|
2015-03-06 12:58:24 +00:00
|
|
|
connect(ws, &Workspace::clientActivated, this, &WorkspaceWrapper::clientActivated);
|
2012-11-16 07:23:47 +00:00
|
|
|
connect(vds, SIGNAL(countChanged(uint,uint)), SIGNAL(numberDesktopsChanged(uint)));
|
2013-02-14 08:36:00 +00:00
|
|
|
connect(vds, SIGNAL(layoutChanged(int,int)), SIGNAL(desktopLayoutChanged()));
|
2015-03-13 10:13:29 +00:00
|
|
|
connect(ws, &Workspace::clientDemandsAttentionChanged, this, &WorkspaceWrapper::clientDemandsAttentionChanged);
|
2013-04-04 14:14:12 +00:00
|
|
|
#ifdef KWIN_BUILD_ACTIVITIES
|
2015-07-07 09:48:42 +00:00
|
|
|
if (KWin::Activities *activities = KWin::Activities::self()) {
|
|
|
|
connect(activities, SIGNAL(currentChanged(QString)), SIGNAL(currentActivityChanged(QString)));
|
|
|
|
connect(activities, SIGNAL(added(QString)), SIGNAL(activitiesChanged(QString)));
|
|
|
|
connect(activities, SIGNAL(added(QString)), SIGNAL(activityAdded(QString)));
|
|
|
|
connect(activities, SIGNAL(removed(QString)), SIGNAL(activitiesChanged(QString)));
|
|
|
|
connect(activities, SIGNAL(removed(QString)), SIGNAL(activityRemoved(QString)));
|
|
|
|
}
|
2013-04-04 14:14:12 +00:00
|
|
|
#endif
|
2014-02-27 08:55:45 +00:00
|
|
|
connect(screens(), &Screens::sizeChanged, this, &WorkspaceWrapper::virtualScreenSizeChanged);
|
|
|
|
connect(screens(), &Screens::geometryChanged, this, &WorkspaceWrapper::virtualScreenGeometryChanged);
|
2014-11-27 08:32:43 +00:00
|
|
|
connect(screens(), &Screens::countChanged, this,
|
|
|
|
[this] (int previousCount, int currentCount) {
|
|
|
|
Q_UNUSED(previousCount)
|
|
|
|
emit numberScreensChanged(currentCount);
|
|
|
|
}
|
|
|
|
);
|
2012-04-09 21:01:04 +00:00
|
|
|
connect(QApplication::desktop(), SIGNAL(resized(int)), SIGNAL(screenResized(int)));
|
2012-01-21 16:48:07 +00:00
|
|
|
foreach (KWin::Client *client, ws->clientList()) {
|
2012-01-21 09:51:22 +00:00
|
|
|
setupClientConnections(client);
|
2010-09-21 14:31:40 +00:00
|
|
|
}
|
2011-01-30 14:34:42 +00:00
|
|
|
}
|
2010-09-21 14:31:40 +00:00
|
|
|
|
2012-11-16 07:23:47 +00:00
|
|
|
int WorkspaceWrapper::currentDesktop() const
|
|
|
|
{
|
|
|
|
return VirtualDesktopManager::self()->current();
|
|
|
|
}
|
|
|
|
|
|
|
|
int WorkspaceWrapper::numberOfDesktops() const
|
|
|
|
{
|
|
|
|
return VirtualDesktopManager::self()->count();
|
2012-01-26 07:22:54 +00:00
|
|
|
}
|
|
|
|
|
2012-11-16 07:23:47 +00:00
|
|
|
void WorkspaceWrapper::setCurrentDesktop(int desktop)
|
|
|
|
{
|
|
|
|
VirtualDesktopManager::self()->setCurrent(desktop);
|
|
|
|
}
|
2012-01-26 07:22:54 +00:00
|
|
|
|
2012-11-16 07:23:47 +00:00
|
|
|
void WorkspaceWrapper::setNumberOfDesktops(int count)
|
|
|
|
{
|
|
|
|
VirtualDesktopManager::self()->setCount(count);
|
|
|
|
}
|
2012-01-26 07:22:54 +00:00
|
|
|
|
2016-11-02 21:56:56 +00:00
|
|
|
#define GETTER( klass, rettype, getterName ) \
|
|
|
|
rettype klass::getterName( ) const { \
|
2012-01-26 07:33:21 +00:00
|
|
|
return Workspace::self()->getterName(); \
|
2011-01-30 14:34:42 +00:00
|
|
|
}
|
2016-11-02 21:56:56 +00:00
|
|
|
GETTER(WorkspaceWrapper, KWin::AbstractClient*, activeClient)
|
|
|
|
GETTER(QtScriptWorkspaceWrapper, QList< KWin::Client* >, clientList)
|
2010-09-21 14:31:40 +00:00
|
|
|
|
2012-01-26 07:33:21 +00:00
|
|
|
#undef GETTER
|
2010-09-21 14:31:40 +00:00
|
|
|
|
2013-04-04 14:14:12 +00:00
|
|
|
QString WorkspaceWrapper::currentActivity() const
|
|
|
|
{
|
|
|
|
#ifdef KWIN_BUILD_ACTIVITIES
|
2015-07-07 09:48:42 +00:00
|
|
|
if (!Activities::self()) {
|
|
|
|
return QString();
|
|
|
|
}
|
2013-04-04 14:14:12 +00:00
|
|
|
return Activities::self()->current();
|
|
|
|
#else
|
|
|
|
return QString();
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
QStringList WorkspaceWrapper::activityList() const
|
|
|
|
{
|
|
|
|
#ifdef KWIN_BUILD_ACTIVITIES
|
2015-07-07 09:48:42 +00:00
|
|
|
if (!Activities::self()) {
|
|
|
|
return QStringList();
|
|
|
|
}
|
2013-04-04 14:14:12 +00:00
|
|
|
return Activities::self()->all();
|
|
|
|
#else
|
|
|
|
return QStringList();
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
2013-05-11 12:09:15 +00:00
|
|
|
#define SLOTWRAPPER(name) \
|
2012-01-27 06:35:40 +00:00
|
|
|
void WorkspaceWrapper::name( ) { \
|
|
|
|
Workspace::self()->name(); \
|
|
|
|
}
|
|
|
|
|
|
|
|
SLOTWRAPPER(slotSwitchToNextScreen)
|
|
|
|
SLOTWRAPPER(slotWindowToNextScreen)
|
|
|
|
SLOTWRAPPER(slotToggleShowDesktop)
|
|
|
|
|
|
|
|
SLOTWRAPPER(slotWindowMaximize)
|
|
|
|
SLOTWRAPPER(slotWindowMaximizeVertical)
|
|
|
|
SLOTWRAPPER(slotWindowMaximizeHorizontal)
|
|
|
|
SLOTWRAPPER(slotWindowMinimize)
|
|
|
|
SLOTWRAPPER(slotWindowShade)
|
|
|
|
SLOTWRAPPER(slotWindowRaise)
|
|
|
|
SLOTWRAPPER(slotWindowLower)
|
|
|
|
SLOTWRAPPER(slotWindowRaiseOrLower)
|
|
|
|
SLOTWRAPPER(slotActivateAttentionWindow)
|
|
|
|
SLOTWRAPPER(slotWindowPackLeft)
|
|
|
|
SLOTWRAPPER(slotWindowPackRight)
|
|
|
|
SLOTWRAPPER(slotWindowPackUp)
|
|
|
|
SLOTWRAPPER(slotWindowPackDown)
|
|
|
|
SLOTWRAPPER(slotWindowGrowHorizontal)
|
|
|
|
SLOTWRAPPER(slotWindowGrowVertical)
|
|
|
|
SLOTWRAPPER(slotWindowShrinkHorizontal)
|
|
|
|
SLOTWRAPPER(slotWindowShrinkVertical)
|
|
|
|
SLOTWRAPPER(slotWindowQuickTileLeft)
|
|
|
|
SLOTWRAPPER(slotWindowQuickTileRight)
|
2015-03-31 09:09:57 +00:00
|
|
|
SLOTWRAPPER(slotWindowQuickTileTop)
|
|
|
|
SLOTWRAPPER(slotWindowQuickTileBottom)
|
2012-01-27 06:35:40 +00:00
|
|
|
SLOTWRAPPER(slotWindowQuickTileTopLeft)
|
|
|
|
SLOTWRAPPER(slotWindowQuickTileTopRight)
|
|
|
|
SLOTWRAPPER(slotWindowQuickTileBottomLeft)
|
|
|
|
SLOTWRAPPER(slotWindowQuickTileBottomRight)
|
|
|
|
|
|
|
|
SLOTWRAPPER(slotSwitchWindowUp)
|
|
|
|
SLOTWRAPPER(slotSwitchWindowDown)
|
|
|
|
SLOTWRAPPER(slotSwitchWindowRight)
|
|
|
|
SLOTWRAPPER(slotSwitchWindowLeft)
|
|
|
|
|
|
|
|
SLOTWRAPPER(slotIncreaseWindowOpacity)
|
|
|
|
SLOTWRAPPER(slotLowerWindowOpacity)
|
|
|
|
|
|
|
|
SLOTWRAPPER(slotWindowOperations)
|
|
|
|
SLOTWRAPPER(slotWindowClose)
|
|
|
|
SLOTWRAPPER(slotWindowMove)
|
|
|
|
SLOTWRAPPER(slotWindowResize)
|
|
|
|
SLOTWRAPPER(slotWindowAbove)
|
|
|
|
SLOTWRAPPER(slotWindowBelow)
|
|
|
|
SLOTWRAPPER(slotWindowOnAllDesktops)
|
|
|
|
SLOTWRAPPER(slotWindowFullScreen)
|
|
|
|
SLOTWRAPPER(slotWindowNoBorder)
|
|
|
|
|
|
|
|
SLOTWRAPPER(slotWindowToNextDesktop)
|
|
|
|
SLOTWRAPPER(slotWindowToPreviousDesktop)
|
|
|
|
SLOTWRAPPER(slotWindowToDesktopRight)
|
|
|
|
SLOTWRAPPER(slotWindowToDesktopLeft)
|
|
|
|
SLOTWRAPPER(slotWindowToDesktopUp)
|
|
|
|
SLOTWRAPPER(slotWindowToDesktopDown)
|
|
|
|
|
|
|
|
#undef SLOTWRAPPER
|
|
|
|
|
2013-05-11 12:09:15 +00:00
|
|
|
#define SLOTWRAPPER(name,direction) \
|
2012-11-16 07:23:47 +00:00
|
|
|
void WorkspaceWrapper::name( ) { \
|
|
|
|
VirtualDesktopManager::self()->moveTo<direction>(options->isRollOverDesktops()); \
|
|
|
|
}
|
|
|
|
|
2013-05-11 12:09:15 +00:00
|
|
|
SLOTWRAPPER(slotSwitchDesktopNext,DesktopNext)
|
|
|
|
SLOTWRAPPER(slotSwitchDesktopPrevious,DesktopPrevious)
|
|
|
|
SLOTWRAPPER(slotSwitchDesktopRight,DesktopRight)
|
|
|
|
SLOTWRAPPER(slotSwitchDesktopLeft,DesktopLeft)
|
|
|
|
SLOTWRAPPER(slotSwitchDesktopUp,DesktopAbove)
|
|
|
|
SLOTWRAPPER(slotSwitchDesktopDown,DesktopBelow)
|
2012-11-16 07:23:47 +00:00
|
|
|
|
|
|
|
#undef SLOTWRAPPER
|
|
|
|
|
2015-03-06 12:37:56 +00:00
|
|
|
void WorkspaceWrapper::setActiveClient(KWin::AbstractClient* client)
|
2011-01-30 14:34:42 +00:00
|
|
|
{
|
2015-03-12 11:24:54 +00:00
|
|
|
KWin::Workspace::self()->activateClient(client);
|
2011-01-30 14:34:42 +00:00
|
|
|
}
|
2010-09-21 14:31:40 +00:00
|
|
|
|
2012-01-22 11:38:03 +00:00
|
|
|
QSize WorkspaceWrapper::workspaceSize() const
|
2011-01-30 14:34:42 +00:00
|
|
|
{
|
2012-01-21 16:48:07 +00:00
|
|
|
return QSize(workspaceWidth(), workspaceHeight());
|
2011-01-30 14:34:42 +00:00
|
|
|
}
|
2010-09-21 14:31:40 +00:00
|
|
|
|
2012-01-26 15:53:07 +00:00
|
|
|
QSize WorkspaceWrapper::displaySize() const
|
|
|
|
{
|
|
|
|
return QSize(KWin::displayWidth(), KWin::displayHeight());
|
|
|
|
}
|
|
|
|
|
|
|
|
int WorkspaceWrapper::displayWidth() const
|
|
|
|
{
|
|
|
|
return KWin::displayWidth();
|
|
|
|
}
|
|
|
|
|
|
|
|
int WorkspaceWrapper::displayHeight() const
|
|
|
|
{
|
2012-09-04 04:26:39 +00:00
|
|
|
return KWin::displayHeight();
|
2012-01-26 15:53:07 +00:00
|
|
|
}
|
|
|
|
|
2012-01-26 21:56:24 +00:00
|
|
|
QRect WorkspaceWrapper::clientArea(ClientAreaOption option, const QPoint &p, int desktop) const
|
|
|
|
{
|
|
|
|
return Workspace::self()->clientArea(static_cast<clientAreaOption>(option), p, desktop);
|
|
|
|
}
|
|
|
|
|
|
|
|
QRect WorkspaceWrapper::clientArea(ClientAreaOption option, const KWin::Client *c) const
|
|
|
|
{
|
|
|
|
return Workspace::self()->clientArea(static_cast<clientAreaOption>(option), c);
|
|
|
|
}
|
|
|
|
|
|
|
|
QRect WorkspaceWrapper::clientArea(ClientAreaOption option, int screen, int desktop) const
|
|
|
|
{
|
|
|
|
return Workspace::self()->clientArea(static_cast<clientAreaOption>(option), screen, desktop);
|
|
|
|
}
|
|
|
|
|
2012-02-19 15:45:44 +00:00
|
|
|
QString WorkspaceWrapper::desktopName(int desktop) const
|
|
|
|
{
|
2012-11-16 07:23:47 +00:00
|
|
|
return VirtualDesktopManager::self()->name(desktop);
|
2012-02-19 15:45:44 +00:00
|
|
|
}
|
|
|
|
|
2012-03-04 14:13:22 +00:00
|
|
|
QString WorkspaceWrapper::supportInformation() const
|
|
|
|
{
|
|
|
|
return Workspace::self()->supportInformation();
|
|
|
|
}
|
|
|
|
|
2012-01-22 11:38:03 +00:00
|
|
|
void WorkspaceWrapper::setupClientConnections(KWin::Client *client)
|
2012-01-21 09:51:22 +00:00
|
|
|
{
|
2015-03-13 13:45:21 +00:00
|
|
|
connect(client, &Client::clientMinimized, this, &WorkspaceWrapper::clientMinimized);
|
|
|
|
connect(client, &Client::clientUnminimized, this, &WorkspaceWrapper::clientUnminimized);
|
2012-01-21 09:51:22 +00:00
|
|
|
connect(client, SIGNAL(clientManaging(KWin::Client*)), SIGNAL(clientManaging(KWin::Client*)));
|
|
|
|
connect(client, SIGNAL(clientFullScreenSet(KWin::Client*,bool,bool)), SIGNAL(clientFullScreenSet(KWin::Client*,bool,bool)));
|
2015-06-07 01:17:34 +00:00
|
|
|
connect(client, static_cast<void (Client::*)(KWin::AbstractClient*, bool, bool)>(&Client::clientMaximizedStateChanged),
|
|
|
|
this, &WorkspaceWrapper::clientMaximizeSet);
|
2012-01-21 09:51:22 +00:00
|
|
|
}
|
2012-01-22 11:38:03 +00:00
|
|
|
|
2012-04-10 18:56:13 +00:00
|
|
|
void WorkspaceWrapper::showOutline(const QRect &geometry)
|
|
|
|
{
|
2013-04-25 06:14:34 +00:00
|
|
|
outline()->show(geometry);
|
2012-04-10 18:56:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void WorkspaceWrapper::showOutline(int x, int y, int width, int height)
|
|
|
|
{
|
2013-04-25 06:14:34 +00:00
|
|
|
outline()->show(QRect(x, y, width, height));
|
2012-04-10 18:56:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void WorkspaceWrapper::hideOutline()
|
|
|
|
{
|
2013-04-25 06:14:34 +00:00
|
|
|
outline()->hide();
|
2012-04-10 18:56:13 +00:00
|
|
|
}
|
|
|
|
|
2012-06-22 07:51:27 +00:00
|
|
|
Client *WorkspaceWrapper::getClient(qulonglong windowId)
|
|
|
|
{
|
2014-03-20 08:19:53 +00:00
|
|
|
return Workspace::self()->findClient(Predicate::WindowMatch, windowId);
|
2012-06-22 07:51:27 +00:00
|
|
|
}
|
|
|
|
|
2012-11-16 07:23:47 +00:00
|
|
|
QSize WorkspaceWrapper::desktopGridSize() const
|
|
|
|
{
|
|
|
|
return VirtualDesktopManager::self()->grid().size();
|
|
|
|
}
|
|
|
|
|
|
|
|
int WorkspaceWrapper::desktopGridWidth() const
|
|
|
|
{
|
|
|
|
return desktopGridSize().width();
|
|
|
|
}
|
|
|
|
|
|
|
|
int WorkspaceWrapper::desktopGridHeight() const
|
|
|
|
{
|
|
|
|
return desktopGridSize().height();
|
|
|
|
}
|
|
|
|
|
|
|
|
int WorkspaceWrapper::workspaceHeight() const
|
|
|
|
{
|
|
|
|
return desktopGridHeight() * displayHeight();
|
|
|
|
}
|
|
|
|
|
|
|
|
int WorkspaceWrapper::workspaceWidth() const
|
|
|
|
{
|
|
|
|
return desktopGridWidth() * displayWidth();
|
|
|
|
}
|
|
|
|
|
2013-04-03 10:19:27 +00:00
|
|
|
int WorkspaceWrapper::numScreens() const
|
|
|
|
{
|
|
|
|
return screens()->count();
|
|
|
|
}
|
|
|
|
|
|
|
|
int WorkspaceWrapper::activeScreen() const
|
|
|
|
{
|
|
|
|
return screens()->current();
|
|
|
|
}
|
|
|
|
|
2014-02-27 08:55:45 +00:00
|
|
|
QRect WorkspaceWrapper::virtualScreenGeometry() const
|
|
|
|
{
|
|
|
|
return screens()->geometry();
|
|
|
|
}
|
|
|
|
|
|
|
|
QSize WorkspaceWrapper::virtualScreenSize() const
|
|
|
|
{
|
|
|
|
return screens()->size();
|
|
|
|
}
|
|
|
|
|
2016-11-02 21:56:56 +00:00
|
|
|
QtScriptWorkspaceWrapper::QtScriptWorkspaceWrapper(QObject* parent)
|
|
|
|
: WorkspaceWrapper(parent) {}
|
|
|
|
|
|
|
|
|
|
|
|
QQmlListProperty<KWin::Client> DeclarativeScriptWorkspaceWrapper::clients()
|
|
|
|
{
|
|
|
|
return QQmlListProperty<KWin::Client>(this, 0, &DeclarativeScriptWorkspaceWrapper::countClientList, &DeclarativeScriptWorkspaceWrapper::atClientList);
|
|
|
|
}
|
|
|
|
|
|
|
|
int DeclarativeScriptWorkspaceWrapper::countClientList(QQmlListProperty<KWin::Client> *clients)
|
|
|
|
{
|
2016-11-03 07:17:11 +00:00
|
|
|
Q_UNUSED(clients)
|
2016-11-02 21:56:56 +00:00
|
|
|
return Workspace::self()->clientList().size();
|
|
|
|
}
|
|
|
|
|
|
|
|
KWin::Client *DeclarativeScriptWorkspaceWrapper::atClientList(QQmlListProperty<KWin::Client> *clients, int index)
|
|
|
|
{
|
2016-11-03 07:17:11 +00:00
|
|
|
Q_UNUSED(clients)
|
2016-11-02 21:56:56 +00:00
|
|
|
return Workspace::self()->clientList().at(index);
|
|
|
|
}
|
|
|
|
|
|
|
|
DeclarativeScriptWorkspaceWrapper::DeclarativeScriptWorkspaceWrapper(QObject* parent)
|
|
|
|
: WorkspaceWrapper(parent) {}
|
|
|
|
|
2012-01-22 11:38:03 +00:00
|
|
|
} // KWin
|