Inherit "Delete" and "Unmanaged" from AbstractClient

Depends on !2224, !2232 

Further changes are blocked until the above MR's are merged.
This commit is contained in:
Nils Fenner 2022-04-15 07:15:59 +00:00 committed by Vlad Zahorodnii
parent 34c1231d60
commit 1466836ba7
5 changed files with 75 additions and 44 deletions

View file

@ -9,7 +9,6 @@
#include "deleted.h" #include "deleted.h"
#include "abstract_client.h"
#include "group.h" #include "group.h"
#include "netinfo.h" #include "netinfo.h"
#include "shadow.h" #include "shadow.h"
@ -22,7 +21,7 @@ namespace KWin
{ {
Deleted::Deleted() Deleted::Deleted()
: Toplevel() : AbstractClient()
, delete_refcount(1) , delete_refcount(1)
, m_frame(XCB_WINDOW_NONE) , m_frame(XCB_WINDOW_NONE)
, m_layer(UnknownLayer) , m_layer(UnknownLayer)

View file

@ -10,14 +10,12 @@
#ifndef KWIN_DELETED_H #ifndef KWIN_DELETED_H
#define KWIN_DELETED_H #define KWIN_DELETED_H
#include "toplevel.h" #include "abstract_client.h"
namespace KWin namespace KWin
{ {
class AbstractClient; class KWIN_EXPORT Deleted : public AbstractClient
class KWIN_EXPORT Deleted : public Toplevel
{ {
Q_OBJECT Q_OBJECT
@ -51,7 +49,7 @@ public:
{ {
return m_modal; return m_modal;
} }
QList<AbstractClient *> mainClients() const QList<AbstractClient *> mainClients() const override
{ {
return m_mainClients; return m_mainClients;
} }
@ -62,7 +60,7 @@ public:
} }
QByteArray windowRole() const override; QByteArray windowRole() const override;
bool isFullScreen() const bool isFullScreen() const override
{ {
return m_fullscreen; return m_fullscreen;
} }
@ -75,11 +73,34 @@ public:
{ {
return m_keepBelow; return m_keepBelow;
} }
QString caption() const QString caption() const
{ {
return m_caption; return m_caption;
} }
QString captionNormal() const override { return m_caption; }
QString captionSuffix() const override { return {}; }
bool isCloseable() const override { return false; }
bool isShown() const override { return false; }
bool isHiddenInternal() const override { return false; }
void hideClient() override { /* nothing to do */ }
void showClient() override { /* nothing to do */ }
AbstractClient *findModal(bool /*allow_itself*/) override { return nullptr; }
bool isResizable() const override { return false; }
bool isMovable() const override { return false; }
bool isMovableAcrossScreens() const override { return false; }
bool takeFocus() override { return false; }
bool wantsInput() const override { return false; }
void killWindow() override { /* nothing to do */ }
void destroyClient() override { /* nothing to do */ }
void closeWindow() override { /* nothing to do */ }
bool acceptsFocus() const override { return false; }
bool belongsToSameApplication(const AbstractClient *other, SameApplicationChecks /*checks*/) const override { return other == this; }
void moveResizeInternal(const QRect & /*rect*/, KWin::AbstractClient::MoveResizeMode /*mode*/) override { /* nothing to do */ }
void updateCaption() override { /* nothing to do */ }
void resizeWithChecks(const QSize&) override { /* nothing to do */ }
/** /**
* Returns whether the client was a popup. * Returns whether the client was a popup.
* *

View file

@ -2073,7 +2073,7 @@ TOPLEVEL_HELPER(QUuid, internalId, internalId)
#undef TOPLEVEL_HELPER #undef TOPLEVEL_HELPER
#define CLIENT_HELPER_WITH_DELETED(rettype, prototype, propertyname, defaultValue) \ #define CLIENT_HELPER(rettype, prototype, propertyname, defaultValue) \
rettype EffectWindowImpl::prototype() const \ rettype EffectWindowImpl::prototype() const \
{ \ { \
auto client = static_cast<AbstractClient *>(toplevel->isClient() ? toplevel : nullptr); \ auto client = static_cast<AbstractClient *>(toplevel->isClient() ? toplevel : nullptr); \
@ -2087,15 +2087,26 @@ TOPLEVEL_HELPER(QUuid, internalId, internalId)
return defaultValue; \ return defaultValue; \
} }
CLIENT_HELPER_WITH_DELETED(bool, isMinimized, isMinimized, false) CLIENT_HELPER(bool, isMinimized, isMinimized, false)
CLIENT_HELPER_WITH_DELETED(bool, isModal, isModal, false) CLIENT_HELPER(bool, isModal, isModal, false)
CLIENT_HELPER_WITH_DELETED(bool, isFullScreen, isFullScreen, false) CLIENT_HELPER(bool, isFullScreen, isFullScreen, false)
CLIENT_HELPER_WITH_DELETED(bool, keepAbove, keepAbove, false) CLIENT_HELPER(bool, keepAbove, keepAbove, false)
CLIENT_HELPER_WITH_DELETED(bool, keepBelow, keepBelow, false) CLIENT_HELPER(bool, keepBelow, keepBelow, false)
CLIENT_HELPER_WITH_DELETED(QString, caption, caption, QString()); CLIENT_HELPER(QString, caption, caption, QString());
CLIENT_HELPER_WITH_DELETED(QVector<uint>, desktops, x11DesktopIds, QVector<uint>()); CLIENT_HELPER(QVector<uint>, desktops, x11DesktopIds, QVector<uint>());
CLIENT_HELPER(bool, isMovable, isMovable, false)
CLIENT_HELPER(bool, isMovableAcrossScreens, isMovableAcrossScreens, false)
CLIENT_HELPER(bool, isUserMove, isInteractiveMove, false)
CLIENT_HELPER(bool, isUserResize, isInteractiveResize, false)
CLIENT_HELPER(QRect, iconGeometry, iconGeometry, QRect())
CLIENT_HELPER(bool, isSpecialWindow, isSpecialWindow, true)
CLIENT_HELPER(bool, acceptsFocus, wantsInput, true) // We don't actually know...
CLIENT_HELPER(QIcon, icon, icon, QIcon())
CLIENT_HELPER(bool, isSkipSwitcher, skipSwitcher, false)
CLIENT_HELPER(bool, decorationHasAlpha, decorationHasAlpha, false)
CLIENT_HELPER(bool, isUnresponsive, unresponsive, false)
#undef CLIENT_HELPER_WITH_DELETED #undef CLIENT_HELPER
// legacy from tab groups, can be removed when no effects use this any more. // legacy from tab groups, can be removed when no effects use this any more.
bool EffectWindowImpl::isCurrentTab() const bool EffectWindowImpl::isCurrentTab() const
@ -2118,30 +2129,6 @@ NET::WindowType EffectWindowImpl::windowType() const
return toplevel->windowType(); return toplevel->windowType();
} }
#define CLIENT_HELPER(rettype, prototype, propertyname, defaultValue) \
rettype EffectWindowImpl::prototype() const \
{ \
auto client = static_cast<AbstractClient *>(toplevel->isClient() ? toplevel : nullptr); \
if (client) { \
return client->propertyname(); \
} \
return defaultValue; \
}
CLIENT_HELPER(bool, isMovable, isMovable, false)
CLIENT_HELPER(bool, isMovableAcrossScreens, isMovableAcrossScreens, false)
CLIENT_HELPER(bool, isUserMove, isInteractiveMove, false)
CLIENT_HELPER(bool, isUserResize, isInteractiveResize, false)
CLIENT_HELPER(QRect, iconGeometry, iconGeometry, QRect())
CLIENT_HELPER(bool, isSpecialWindow, isSpecialWindow, true)
CLIENT_HELPER(bool, acceptsFocus, wantsInput, true) // We don't actually know...
CLIENT_HELPER(QIcon, icon, icon, QIcon())
CLIENT_HELPER(bool, isSkipSwitcher, skipSwitcher, false)
CLIENT_HELPER(bool, decorationHasAlpha, decorationHasAlpha, false)
CLIENT_HELPER(bool, isUnresponsive, unresponsive, false)
#undef CLIENT_HELPER
QSize EffectWindowImpl::basicUnit() const QSize EffectWindowImpl::basicUnit() const
{ {
if (auto client = qobject_cast<X11Client *>(toplevel)) { if (auto client = qobject_cast<X11Client *>(toplevel)) {
@ -2249,9 +2236,11 @@ EffectWindowList EffectWindowImpl::mainWindows() const
if (auto client = static_cast<AbstractClient *>(toplevel->isClient() ? toplevel : nullptr)) { if (auto client = static_cast<AbstractClient *>(toplevel->isClient() ? toplevel : nullptr)) {
return getMainWindows(client); return getMainWindows(client);
} }
if (auto deleted = static_cast<Deleted *>(toplevel->isDeleted() ? toplevel : nullptr)) { if (auto deleted = static_cast<Deleted *>(toplevel->isDeleted() ? toplevel : nullptr)) {
return getMainWindows(deleted); return getMainWindows(deleted);
} }
return {}; return {};
} }

View file

@ -51,7 +51,7 @@ const NET::WindowTypes SUPPORTED_UNMANAGED_WINDOW_TYPES_MASK = NET::NormalMask
| NET::CriticalNotificationMask; | NET::CriticalNotificationMask;
Unmanaged::Unmanaged() Unmanaged::Unmanaged()
: Toplevel() : AbstractClient()
{ {
switch (kwinApp()->operationMode()) { switch (kwinApp()->operationMode()) {
case Application::OperationModeXwayland: case Application::OperationModeXwayland:

View file

@ -12,12 +12,12 @@
#include <netwm.h> #include <netwm.h>
#include "toplevel.h" #include "abstract_client.h"
namespace KWin namespace KWin
{ {
class KWIN_EXPORT Unmanaged : public Toplevel class KWIN_EXPORT Unmanaged : public AbstractClient
{ {
Q_OBJECT Q_OBJECT
public: public:
@ -37,6 +37,28 @@ public:
NET::WindowType windowType(bool direct = false, int supported_types = 0) const override; NET::WindowType windowType(bool direct = false, int supported_types = 0) const override;
bool isOutline() const override; bool isOutline() const override;
QString captionNormal() const override { return {}; }
QString captionSuffix() const override { return {}; }
bool isCloseable() const override { return false; }
bool isShown() const override { return false; }
bool isHiddenInternal() const override { return false; }
void hideClient() override { /* nothing to do */ }
void showClient() override { /* nothing to do */ }
AbstractClient *findModal(bool /*allow_itself*/) override { return nullptr; }
bool isResizable() const override { return false; }
bool isMovable() const override { return false; }
bool isMovableAcrossScreens() const override { return false; }
bool takeFocus() override { return false; }
bool wantsInput() const override { return false; }
void killWindow() override { /* nothing to do */ }
void destroyClient() override { /* nothing to do */ }
void closeWindow() override { /* nothing to do */ }
bool acceptsFocus() const override { return false; }
bool belongsToSameApplication(const AbstractClient *other, SameApplicationChecks /*checks*/) const override { return other == this; }
void moveResizeInternal(const QRect & /*rect*/, KWin::AbstractClient::MoveResizeMode /*mode*/) override { /* nothing to do */ }
void updateCaption() override { /* nothing to do */ }
void resizeWithChecks(const QSize&) override { /* nothing to do */ }
public Q_SLOTS: public Q_SLOTS:
void release(ReleaseReason releaseReason = ReleaseReason::Release); void release(ReleaseReason releaseReason = ReleaseReason::Release);