diff --git a/deleted.cpp b/deleted.cpp index 561fa8814..0d5229325 100644 --- a/deleted.cpp +++ b/deleted.cpp @@ -195,11 +195,6 @@ QPoint Deleted::clientPos() const return contentsRect.topLeft(); } -void Deleted::debug(QDebug& stream) const -{ - stream << "\'ID:" << window() << "\' (deleted)"; -} - void Deleted::layoutDecorationRects(QRect& left, QRect& top, QRect& right, QRect& bottom) const { left = decoration_left; diff --git a/deleted.h b/deleted.h index 0c4a68eeb..93232a868 100644 --- a/deleted.h +++ b/deleted.h @@ -171,9 +171,6 @@ public: return m_wasOutline; } -protected: - void debug(QDebug& stream) const override; - private Q_SLOTS: void mainClientClosed(KWin::Toplevel *client); void transientForClosed(Toplevel *toplevel, Deleted *deleted); diff --git a/inputpanelv1client.cpp b/inputpanelv1client.cpp index 3a607bed2..f7342371b 100644 --- a/inputpanelv1client.cpp +++ b/inputpanelv1client.cpp @@ -114,11 +114,6 @@ void InputPanelV1Client::destroyClient() delete this; } -void InputPanelV1Client::debug(QDebug &stream) const -{ - stream << "InputPanelClient(" << static_cast(this) << "," << resourceClass() << m_frameGeometry << ')'; -} - NET::WindowType InputPanelV1Client::windowType(bool, int) const { return NET::Utility; diff --git a/inputpanelv1client.h b/inputpanelv1client.h index 5ae92441f..709208e89 100644 --- a/inputpanelv1client.h +++ b/inputpanelv1client.h @@ -44,7 +44,6 @@ public: bool isInputMethod() const override { return true; } bool isInitialPositionSet() const override { return true; } NET::WindowType windowType(bool /*direct*/, int /*supported_types*/) const override; - void debug(QDebug & stream) const override; QRect inputGeometry() const override; private: diff --git a/internal_client.cpp b/internal_client.cpp index 2354f5efc..2e5d15a82 100644 --- a/internal_client.cpp +++ b/internal_client.cpp @@ -137,11 +137,6 @@ QSize InternalClient::maxSize() const return m_internalWindow->maximumSize(); } -void InternalClient::debug(QDebug &stream) const -{ - stream.nospace() << "\'InternalClient:" << m_internalWindow << "\'"; -} - QRect InternalClient::transparentRect() const { return QRect(); diff --git a/internal_client.h b/internal_client.h index a45674901..758074c07 100644 --- a/internal_client.h +++ b/internal_client.h @@ -33,7 +33,6 @@ public: QPoint clientContentPos() const override; QSize minSize() const override; QSize maxSize() const override; - void debug(QDebug &stream) const override; QRect transparentRect() const override; NET::WindowType windowType(bool direct = false, int supported_types = 0) const override; double opacity() const override; diff --git a/scripting/scripting.cpp b/scripting/scripting.cpp index 4be6bc3a0..6d9500af6 100644 --- a/scripting/scripting.cpp +++ b/scripting/scripting.cpp @@ -54,8 +54,8 @@ QScriptValue kwinScriptPrint(QScriptContext *context, QScriptEngine *engine) stream << " "; } QScriptValue argument = context->argument(i); - if (KWin::X11Client *client = qscriptvalue_cast(argument)) { - client->print(stream); + if (KWin::AbstractClient *client = qscriptvalue_cast(argument)) { + stream << client; } else { stream << argument.toString(); } diff --git a/toplevel.cpp b/toplevel.cpp index 1c2da1b6d..26ee4fe93 100644 --- a/toplevel.cpp +++ b/toplevel.cpp @@ -8,6 +8,7 @@ */ #include "toplevel.h" +#include "abstract_client.h" #ifdef KWIN_BUILD_ACTIVITIES #include "activities.h" #endif @@ -60,12 +61,35 @@ Toplevel::~Toplevel() delete info; } -QDebug& operator<<(QDebug& stream, const Toplevel* cl) +QDebug operator<<(QDebug debug, const Toplevel *toplevel) { - if (cl == nullptr) - return stream << "\'NULL\'"; - cl->debug(stream); - return stream; + QDebugStateSaver saver(debug); + debug.nospace(); + if (toplevel) { + debug << toplevel->metaObject()->className() << '(' << static_cast(toplevel); + debug << ", windowId=0x" << Qt::hex << toplevel->windowId() << Qt::dec; + if (const KWaylandServer::SurfaceInterface *surface = toplevel->surface()) { + debug << ", surface=" << surface; + } + const AbstractClient *client = qobject_cast(toplevel); + if (client) { + if (!client->isPopupWindow()) { + debug << ", caption=" << client->caption(); + } + if (client->transientFor()) { + debug << ", transientFor=" << client->transientFor(); + } + } + if (debug.verbosity() > 2) { + debug << ", frameGeometry=" << toplevel->frameGeometry(); + debug << ", resourceName=" << toplevel->resourceName(); + debug << ", resourceClass=" << toplevel->resourceClass(); + } + debug << ')'; + } else { + debug << "Toplevel(0x0)"; + } + return debug; } void Toplevel::detectShape(xcb_window_t id) diff --git a/toplevel.h b/toplevel.h index e23224bb8..b53e52de6 100644 --- a/toplevel.h +++ b/toplevel.h @@ -700,10 +700,8 @@ protected: Xcb::Property fetchSkipCloseAnimation() const; void readSkipCloseAnimation(Xcb::Property &prop); void getSkipCloseAnimation(); - virtual void debug(QDebug& stream) const = 0; void copyToDeleted(Toplevel* c); void disownDataPassedToDeleted(); - friend QDebug& operator<<(QDebug& stream, const Toplevel*); void deleteEffectWindow(); void setDepth(int depth); QRect m_frameGeometry; @@ -1054,7 +1052,7 @@ inline bool Toplevel::isPopupWindow() const } } -QDebug& operator<<(QDebug& stream, const Toplevel*); +QDebug operator<<(QDebug debug, const Toplevel *toplevel); } // namespace Q_DECLARE_METATYPE(KWin::Toplevel*) diff --git a/unmanaged.cpp b/unmanaged.cpp index ec38a6589..f226cecc8 100644 --- a/unmanaged.cpp +++ b/unmanaged.cpp @@ -147,11 +147,6 @@ QRect Unmanaged::transparentRect() const return QRect(clientPos(), clientSize()); } -void Unmanaged::debug(QDebug& stream) const -{ - stream << "\'ID:" << window() << "\'"; -} - NET::WindowType Unmanaged::windowType(bool direct, int supportedTypes) const { // for unmanaged windows the direct does not make any difference diff --git a/unmanaged.h b/unmanaged.h index 4e5aa2d5e..72ffb116b 100644 --- a/unmanaged.h +++ b/unmanaged.h @@ -43,7 +43,6 @@ public: public Q_SLOTS: void release(ReleaseReason releaseReason = ReleaseReason::Release); protected: - void debug(QDebug& stream) const override; void addDamage(const QRegion &damage) override; private: ~Unmanaged() override; // use release() diff --git a/x11client.cpp b/x11client.cpp index eef63ee1a..1814d0230 100644 --- a/x11client.cpp +++ b/x11client.cpp @@ -2450,12 +2450,6 @@ void X11Client::updateAllowedActions(bool force) } } -void X11Client::debug(QDebug& stream) const -{ - stream.nospace(); - print(stream); -} - Xcb::StringProperty X11Client::fetchActivities() const { #ifdef KWIN_BUILD_ACTIVITIES diff --git a/x11client.h b/x11client.h index dddaf7a1c..03ce2892b 100644 --- a/x11client.h +++ b/x11client.h @@ -273,9 +273,6 @@ public: void setSessionActivityOverride(bool needed); bool isClient() const override; - template - void print(T &stream) const; - void cancelFocusOutTimer(); /** @@ -331,7 +328,6 @@ private: bool motionNotifyEvent(xcb_window_t w, int state, int x, int y, int x_root, int y_root); protected: - void debug(QDebug& stream) const override; void addDamage(const QRegion &damage) override; bool belongsToSameApplication(const AbstractClient *other, SameApplicationChecks checks) const override; void doSetActive() override; @@ -641,13 +637,6 @@ inline bool X11Client::hiddenPreview() const return mapping_state == Kept; } -template -inline void X11Client::print(T &stream) const -{ - stream << "\'Client:" << window() << ";WMCLASS:" << resourceClass() << ":" - << resourceName() << ";Caption:" << caption() << "\'"; -} - } // namespace Q_DECLARE_METATYPE(KWin::X11Client *) Q_DECLARE_METATYPE(QList) diff --git a/xdgshellclient.cpp b/xdgshellclient.cpp index bbf63dd25..b91e42ee7 100644 --- a/xdgshellclient.cpp +++ b/xdgshellclient.cpp @@ -601,11 +601,6 @@ XdgToplevelInterface *XdgToplevelClient::shellSurface() const return m_shellSurface; } -void XdgToplevelClient::debug(QDebug &stream) const -{ - stream << "XdgToplevelClient:" << resourceClass() << caption(); -} - NET::WindowType XdgToplevelClient::windowType(bool direct, int supported_types) const { Q_UNUSED(direct) @@ -1774,11 +1769,6 @@ XdgPopupClient::~XdgPopupClient() { } -void XdgPopupClient::debug(QDebug &stream) const -{ - stream << "XdgPopupClient: transientFor:" << transientFor(); -} - NET::WindowType XdgPopupClient::windowType(bool direct, int supported_types) const { Q_UNUSED(direct) diff --git a/xdgshellclient.h b/xdgshellclient.h index 3360a60b0..42c831e0e 100644 --- a/xdgshellclient.h +++ b/xdgshellclient.h @@ -127,7 +127,6 @@ public: KWaylandServer::XdgToplevelInterface *shellSurface() const; - void debug(QDebug &stream) const override; NET::WindowType windowType(bool direct = false, int supported_types = 0) const override; MaximizeMode maximizeMode() const override; MaximizeMode requestedMaximizeMode() const override; @@ -233,7 +232,6 @@ public: explicit XdgPopupClient(KWaylandServer::XdgPopupInterface *shellSurface); ~XdgPopupClient() override; - void debug(QDebug &stream) const override; NET::WindowType windowType(bool direct = false, int supported_types = 0) const override; bool hasPopupGrab() const override; void popupDone() override;