/* SPDX-FileCopyrightText: 2015 Martin Gräßlin SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL */ #pragma once #include #include class QSize; namespace KWaylandServer { class Display; class PlasmaWindowInterface; class SurfaceInterface; class PlasmaVirtualDesktopManagementInterface; class PlasmaWindowManagementInterfacePrivate; class PlasmaWindowInterfacePrivate; /** * @todo Add documentation */ class KWAYLANDSERVER_EXPORT PlasmaWindowManagementInterface : public QObject { Q_OBJECT public: explicit PlasmaWindowManagementInterface(Display *display, QObject *parent = nullptr); ~PlasmaWindowManagementInterface() override; enum class ShowingDesktopState { Disabled, Enabled }; void setShowingDesktopState(ShowingDesktopState state); PlasmaWindowInterface *createWindow(QObject *parent, const QUuid &uuid); QList windows() const; /** * Associate a PlasmaVirtualDesktopManagementInterface to this window management. * It's necessary to associate one in orderto use the plasma virtual desktop features * of PlasmaWindowInterface, as a window must know what are the deasktops available */ void setPlasmaVirtualDesktopManagementInterface(PlasmaVirtualDesktopManagementInterface *manager); /** * @returns the PlasmaVirtualDesktopManagementInterface associated to this PlasmaWindowManagementInterface */ PlasmaVirtualDesktopManagementInterface *plasmaVirtualDesktopManagementInterface() const; /** * Associate stacking order to this window management */ void setStackingOrder(const QVector &stackingOrder); void setStackingOrderUuids(const QVector &stackingOrderUuids); Q_SIGNALS: void requestChangeShowingDesktop(ShowingDesktopState requestedState); private: QScopedPointer d; }; /** * @todo Add documentation */ class KWAYLANDSERVER_EXPORT PlasmaWindowInterface : public QObject { Q_OBJECT public: ~PlasmaWindowInterface() override; void setTitle(const QString &title); void setAppId(const QString &appId); void setPid(quint32 pid); #if KWAYLANDSERVER_ENABLE_DEPRECATED_SINCE(5, 52) /** * @deprecated Since 5.52, use addPlasmaVirtualDesktop and removePlasmaVirtualDesktop */ KWAYLANDSERVER_DEPRECATED_VERSION(5, 52, "Use PlasmaWindowManagementInterface::addPlasmaVirtualDesktop(const QString&) and PlasmaWindowManagementInterface::removePlasmaVirtualDesktop(const QString&)") void setVirtualDesktop(quint32 desktop); #endif void setActive(bool set); void setMinimized(bool set); void setMaximized(bool set); void setFullscreen(bool set); void setKeepAbove(bool set); void setKeepBelow(bool set); void setOnAllDesktops(bool set); void setDemandsAttention(bool set); void setCloseable(bool set); void setMinimizeable(bool set); void setMaximizeable(bool set); void setFullscreenable(bool set); void setSkipTaskbar(bool skip); void setSkipSwitcher(bool skip); #if KWAYLANDSERVER_ENABLE_DEPRECATED_SINCE(5, 28) /** * @deprecated since 5.28 use setIcon **/ KWAYLANDSERVER_DEPRECATED_VERSION(5, 28, "Use PlasmaWindowManagementInterface::setIcon(const QIcon&)") void setThemedIconName(const QString &iconName); #endif void setShadeable(bool set); void setShaded(bool set); void setMovable(bool set); void setResizable(bool set); /** * FIXME: still relevant with new desktops? */ void setVirtualDesktopChangeable(bool set); /** * This method removes the Window and the Client is supposed to release the resource * bound for this Window. * * No more events should be sent afterwards. **/ void unmap(); /** * @returns Geometries of the taskbar entries, indicized by the * surface of the panels */ QHash minimizedGeometries() const; /** * Sets this PlasmaWindowInterface as a transient window to @p parentWindow. * If @p parentWindow is @c nullptr, the PlasmaWindowInterface is a toplevel * window and does not have a parent window. **/ void setParentWindow(PlasmaWindowInterface *parentWindow); /** * Sets the window @p geometry of this PlasmaWindow. * * @param geometry The geometry in absolute coordinates **/ void setGeometry(const QRect &geometry); /** * Set the icon of the PlasmaWindowInterface. * * In case the icon has a themed name, only the name is sent to the client. * Otherwise the client is only informed that there is an icon and the client * can request the icon in an asynchronous way by passing a file descriptor * into which the icon will be serialized. * * @param icon The new icon **/ void setIcon(const QIcon &icon); /** * Adds a new desktop to this window: a window can be on * an arbitrary subset of virtual desktops. * If it's on none it will be considered on all desktops. */ void addPlasmaVirtualDesktop(const QString &id); /** * Removes a visrtual desktop from a window */ void removePlasmaVirtualDesktop(const QString &id); /** * The ids of all the desktops currently associated with this window. * When a desktop is deleted it will be automatically removed from this list */ QStringList plasmaVirtualDesktops() const; /** * Set the application menu D-BUS service name and object path for the window. */ void setApplicationMenuPaths(const QString &serviceName, const QString &objectPath); /** * Return the window internal id */ quint32 internalId() const; /** * @return a unique string that identifies this window */ QString uuid() const; Q_SIGNALS: void closeRequested(); void moveRequested(); void resizeRequested(); #if KWAYLANDSERVER_ENABLE_DEPRECATED_SINCE(5, 52) /** * @deprecated Since 5.52, use enterPlasmaVirtualDesktopRequested and leavePlasmaVirtualDesktopRequested instead */ KWAYLANDSERVER_DEPRECATED_VERSION(5, 52, "Use PlasmaWindowManagementInterface::enterPlasmaVirtualDesktopRequested(const QString&) and PlasmaWindowManagementInterface::leavePlasmaVirtualDesktopRequested(const QString&)") void virtualDesktopRequested(quint32 desktop); #endif void activeRequested(bool set); void minimizedRequested(bool set); void maximizedRequested(bool set); void fullscreenRequested(bool set); void keepAboveRequested(bool set); void keepBelowRequested(bool set); void demandsAttentionRequested(bool set); void closeableRequested(bool set); void minimizeableRequested(bool set); void maximizeableRequested(bool set); void fullscreenableRequested(bool set); void skipTaskbarRequested(bool set); void skipSwitcherRequested(bool set); QRect minimizedGeometriesChanged(); void shadeableRequested(bool set); void shadedRequested(bool set); void movableRequested(bool set); void resizableRequested(bool set); /** * FIXME: still relevant with new virtual desktops? */ void virtualDesktopChangeableRequested(bool set); /** * Emitted when the client wishes this window to enter in a new virtual desktop. * The server will decide whether to consent this request */ void enterPlasmaVirtualDesktopRequested(const QString &desktop); /** * Emitted when the client wishes this window to enter in * a new virtual desktop to be created for it. * The server will decide whether to consent this request */ void enterNewPlasmaVirtualDesktopRequested(); /** * Emitted when the client wishes to remove this window from a virtual desktop. * The server will decide whether to consent this request */ void leavePlasmaVirtualDesktopRequested(const QString &desktop); private: friend class PlasmaWindowManagementInterface; friend class PlasmaWindowInterfacePrivate; friend class PlasmaWindowManagementInterfacePrivate; explicit PlasmaWindowInterface(PlasmaWindowManagementInterface *wm, QObject *parent); QScopedPointer d; }; } Q_DECLARE_METATYPE(KWaylandServer::PlasmaWindowManagementInterface::ShowingDesktopState)