12#include "compositingadaptor.h"
13#include "pluginsadaptor.h"
14#include "virtualdesktopmanageradaptor.h"
21#include "kwinadaptor.h"
28#if KWIN_BUILD_ACTIVITIES
33#include <QDBusConnection>
34#include <QOpenGLContext>
41 , m_serviceName(QStringLiteral(
"org.kde.KWin"))
43 (void)
new KWinAdaptor(
this);
45 QDBusConnection dbus = QDBusConnection::sessionBus();
46 dbus.registerObject(QStringLiteral(
"/KWin"),
this);
47 dbus.registerService(m_serviceName);
48 dbus.connect(QString(), QStringLiteral(
"/KWin"), QStringLiteral(
"org.kde.KWin"), QStringLiteral(
"reloadConfig"),
56 QDBusConnection::sessionBus().unregisterService(m_serviceName);
96#if KWIN_BUILD_ACTIVITIES
108#if KWIN_BUILD_ACTIVITIES
120 return VirtualDesktopManager::self()->current();
125 return VirtualDesktopManager::self()->setCurrent(desktop);
146 QCoreApplication::exit(133);
151QVariantMap clientToVariantMap(
const Window *c)
163 {QStringLiteral(
"x"), c->
x()},
164 {QStringLiteral(
"y"), c->
y()},
165 {QStringLiteral(
"width"), c->
width()},
166 {QStringLiteral(
"height"), c->
height()},
167 {QStringLiteral(
"desktops"), c->
desktopIds()},
169 {QStringLiteral(
"shaded"), c->
isShade()},
171 {QStringLiteral(
"keepAbove"), c->
keepAbove()},
172 {QStringLiteral(
"keepBelow"), c->
keepBelow()},
173 {QStringLiteral(
"noBorder"), c->
noBorder()},
175 {QStringLiteral(
"skipPager"), c->
skipPager()},
179 {QStringLiteral(
"uuid"), c->
internalId().toString()},
180#if KWIN_BUILD_ACTIVITIES
181 {QStringLiteral(
"activities"), c->
activities()},
183 {QStringLiteral(
"layer"), c->
layer()},
190 m_replyQueryWindowInfo = message();
191 setDelayedReply(
true);
192 kwinApp()->startInteractiveWindowSelection(
195 QDBusConnection::sessionBus().send(m_replyQueryWindowInfo.createErrorReply(
196 QStringLiteral(
"org.kde.KWin.Error.UserCancel"),
197 QStringLiteral(
"User cancelled the query")));
201 QDBusConnection::sessionBus().send(m_replyQueryWindowInfo.createReply(clientToVariantMap(t)));
203 QDBusConnection::sessionBus().send(m_replyQueryWindowInfo.createErrorReply(
204 QStringLiteral(
"org.kde.KWin.Error.InvalidWindow"),
205 QStringLiteral(
"Tried to query information about an unmanaged window")));
208 return QVariantMap{};
215 return clientToVariantMap(window);
226 if (m.service().isEmpty()) {
233 static QPointer<QDBusServiceWatcher> watcher;
240 watcher->deleteLater();
243 watcher =
new QDBusServiceWatcher(m.service(), QDBusConnection::sessionBus(), QDBusServiceWatcher::WatchForUnregistration,
this);
244 connect(watcher, &QDBusServiceWatcher::serviceUnregistered, []() {
246 watcher->deleteLater();
248 }
else if (watcher) {
251 watcher->deleteLater();
255void DBusInterface::onShowingDesktopChanged(
bool show,
bool )
262 , m_compositor(parent)
265 new CompositingAdaptor(
this);
266 QDBusConnection dbus = QDBusConnection::sessionBus();
267 dbus.registerObject(QStringLiteral(
"/Compositor"),
this);
268 dbus.connect(QString(), QStringLiteral(
"/Compositor"), QStringLiteral(
"org.kde.kwin.Compositing"),
275 return QStringLiteral(
"none");
279 if (QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGLES) {
280 return QStringLiteral(
"gles");
282 return QStringLiteral(
"gl2");
285 return QStringLiteral(
"qpainter");
288 return QStringLiteral(
"none");
324 QStringList interfaces;
325 bool supportsGlx =
false;
329 if (QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGLES) {
333 interfaces << QStringLiteral(
"glx");
335 interfaces << QStringLiteral(
"egl");
343 qDBusRegisterMetaType<KWin::DBusDesktopDataStruct>();
344 qDBusRegisterMetaType<KWin::DBusDesktopDataVector>();
346 new VirtualDesktopManagerAdaptor(
this);
347 QDBusConnection::sessionBus().registerObject(QStringLiteral(
"/VirtualDesktopManager"),
348 QStringLiteral(
"org.kde.KWin.VirtualDesktopManager"),
366 const QList<VirtualDesktop *> allDesks = m_manager->
desktops();
367 for (
auto *vd : allDesks) {
402 return m_manager->
count();
417 return m_manager->
rows();
453 const auto desks = m_manager->
desktops();
455 desktopVect.reserve(m_manager->
count());
457 std::transform(desks.constBegin(), desks.constEnd(),
458 std::back_inserter(desktopVect),
460 return DBusDesktopDataStruct{.position = vd->x11DesktopNumber() - 1, .id = vd->id(), .name = vd->name()};
466void VirtualDesktopManagerDBusInterface::createDesktop(uint position,
const QString &name)
468 m_manager->createVirtualDesktop(position, name);
471void VirtualDesktopManagerDBusInterface::setDesktopName(
const QString &
id,
const QString &name)
477 if (vd->
name() == name) {
485void VirtualDesktopManagerDBusInterface::removeDesktop(
const QString &
id)
487 m_manager->removeVirtualDesktop(
id);
490PluginManagerDBusInterface::PluginManagerDBusInterface(
PluginManager *manager)
494 new PluginsAdaptor(
this);
496 QDBusConnection::sessionBus().registerObject(QStringLiteral(
"/Plugins"),
497 QStringLiteral(
"org.kde.KWin.Plugins"),
523#include "moc_dbusinterface.cpp"
@ OperationModeX11
KWin uses only X11 for managing windows and compositing.
QString compositingNotPossibleReason
The reason why compositing is not possible. Empty String if compositing is possible.
bool isOpenGLBroken() const
QStringList supportedOpenGLPlatformInterfaces
All currently supported OpenGLPlatformInterfaces.
void compositingToggled(bool active)
void reinitialize()
Used by Compositing KCM after settings change.
bool platformRequiresCompositing
CompositorDBusInterface(Compositor *parent)
bool isCompositingPossible() const
void compositingToggled(bool active)
virtual bool openGLCompositingIsBroken() const
static bool compositing()
Static check to test whether the Compositor is available and active.
virtual void reinitialize()
virtual bool compositingPossible() const
RenderBackend * backend() const
virtual QString compositingNotPossibleReason() const
bool stopActivity(const QString &in0)
Q_NOREPLY void unclutterDesktop()
bool setCurrentDesktop(int desktop)
Q_NOREPLY void showDebugConsole()
bool startActivity(const QString &in0)
DBusInterface(QObject *parent)
QString supportInformation()
QVariantMap queryWindowInfo()
Q_NOREPLY void showDesktop(bool show)
Q_NOREPLY void cascadeDesktop()
~DBusInterface() override
QString activeOutputName()
Q_NOREPLY void reconfigure()
void showingDesktopChanged(bool showing)
Q_NOREPLY void killWindow()
QVariantMap getWindowInfo(const QString &uuid)
void UnloadPlugin(const QString &name)
QStringList availablePlugins() const
QStringList loadedPlugins() const
bool LoadPlugin(const QString &name)
QStringList loadedPlugins() const
QStringList availablePlugins() const
bool loadPlugin(const QString &pluginId)
void unloadPlugin(const QString &pluginId)
virtual CompositingType compositingType() const =0
void x11DesktopNumberChanged()
void setName(const QString &name)
void desktopRemoved(const QString &id)
VirtualDesktopManagerDBusInterface(VirtualDesktopManager *parent)
KWin::DBusDesktopDataVector desktops
void countChanged(uint count)
void setNavigationWrappingAround(bool wraps)
bool isNavigationWrappingAround() const
void desktopDataChanged(const QString &id, KWin::DBusDesktopDataStruct)
void navigationWrappingAroundChanged(bool wraps)
void setCurrent(const QString &id)
void desktopCreated(const QString &id, KWin::DBusDesktopDataStruct)
void currentChanged(const QString &id)
void desktopsChanged(KWin::DBusDesktopDataVector)
void rowsChanged(uint rows)
Manages the number of available virtual desktops, the layout of those and which virtual desktop is th...
const VirtualDesktopGrid & grid() const
VirtualDesktop * desktopForId(const QString &id) const
void desktopAdded(KWin::VirtualDesktop *desktop)
void countChanged(uint previousCount, uint newCount)
QList< VirtualDesktop * > desktops() const
VirtualDesktop * currentDesktop() const
void navigationWrappingAroundChanged()
void currentChanged(KWin::VirtualDesktop *previousDesktop, KWin::VirtualDesktop *newDesktop)
void rowsChanged(uint rows)
void setNavigationWrappingAround(bool enabled)
bool setCurrent(uint current)
void desktopRemoved(KWin::VirtualDesktop *desktop)
bool isNavigationWrappingAround() const
virtual bool isLocalhost() const
virtual bool isClient() const
QString wmClientMachine(bool use_localhost) const
virtual bool isFullScreen() const
virtual QString captionNormal() const =0
QStringList desktopIds() const
virtual MaximizeMode maximizeMode() const
Window * findWindow(const QUuid &internalId) const
Output * activeOutput() const
void showingDesktopChanged(bool showing, bool animated)
Placement * placement() const
static Workspace * self()
bool showingDesktop() const
void setShowingDesktop(bool showing, bool animated=true)
QString supportInformation() const
QList< DBusDesktopDataStruct > DBusDesktopDataVector
@ MaximizeVertical
The window is maximized vertically.