File indexing completed on 2024-12-01 13:37:23

0001 /*
0002     KWin - the KDE window manager
0003     This file is part of the KDE project.
0004 
0005     SPDX-FileCopyrightText: 2006 Lubos Lunak <l.lunak@kde.org>
0006 
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 
0010 #pragma once
0011 
0012 #include "window.h"
0013 
0014 namespace KWin
0015 {
0016 
0017 class KWIN_EXPORT Deleted : public Window
0018 {
0019     Q_OBJECT
0020 
0021 public:
0022     static Deleted *create(Window *c);
0023     // used by effects to keep the window around for e.g. fadeout effects when it's destroyed
0024     void refWindow();
0025     void unrefWindow();
0026     void discard();
0027     QMargins frameMargins() const override;
0028     int desktop() const override;
0029     QStringList activities() const override;
0030     QVector<VirtualDesktop *> desktops() const override;
0031     QPointF clientPos() const override;
0032     bool isDeleted() const override;
0033     xcb_window_t frameId() const override;
0034     void layoutDecorationRects(QRectF &left, QRectF &top, QRectF &right, QRectF &bottom) const override;
0035     Layer layer() const override
0036     {
0037         return m_layer;
0038     }
0039     bool isShade() const override
0040     {
0041         return m_shade;
0042     }
0043     bool isMinimized() const
0044     {
0045         return m_minimized;
0046     }
0047     bool isModal() const
0048     {
0049         return m_modal;
0050     }
0051     QList<Window *> mainWindows() const override
0052     {
0053         return m_mainWindows;
0054     }
0055     NET::WindowType windowType(bool direct = false, int supported_types = 0) const override;
0056     bool wasClient() const
0057     {
0058         return m_wasClient;
0059     }
0060     QString windowRole() const override;
0061 
0062     bool isFullScreen() const override
0063     {
0064         return m_fullscreen;
0065     }
0066 
0067     bool keepAbove() const
0068     {
0069         return m_keepAbove;
0070     }
0071     bool keepBelow() const
0072     {
0073         return m_keepBelow;
0074     }
0075 
0076     QString caption() const
0077     {
0078         return m_caption;
0079     }
0080 
0081     QString captionNormal() const override { return m_caption; }
0082     QString captionSuffix() const override { return {}; }
0083     bool isCloseable() const override { return false; }
0084     bool isShown() const override { return false; }
0085     bool isHiddenInternal() const override { return false; }
0086     void hideClient() override { /* nothing to do */ }
0087     void showClient() override { /* nothing to do */ }
0088     Window *findModal(bool /*allow_itself*/) override { return nullptr; }
0089     bool isResizable() const override { return false; }
0090     bool isMovable() const override { return false; }
0091     bool isMovableAcrossScreens() const override { return false; }
0092     bool takeFocus() override { return false; }
0093     bool wantsInput() const override { return false; }
0094     void killWindow() override { /* nothing to do */ }
0095     void destroyWindow() override { /* nothing to do */ }
0096     void closeWindow() override { /* nothing to do */ }
0097     bool acceptsFocus() const override { return false; }
0098     bool belongsToSameApplication(const Window *other, SameApplicationChecks /*checks*/) const override { return other == this; }
0099     void moveResizeInternal(const QRectF & /*rect*/, KWin::Window::MoveResizeMode /*mode*/) override
0100     { /* nothing to do */
0101     }
0102     void updateCaption() override { /* nothing to do */ }
0103     QRectF resizeWithChecks(const QRectF &geometry, const QSizeF &) override
0104     { /* nothing to do */
0105         return geometry;
0106     }
0107     std::unique_ptr<WindowItem> createItem(Scene *scene) override;
0108 
0109     /**
0110      * Returns whether the client was a popup.
0111      *
0112      * @returns @c true if the client was a popup, @c false otherwise.
0113      */
0114     bool isPopupWindow() const override
0115     {
0116         return m_wasPopupWindow;
0117     }
0118 
0119     QVector<uint> x11DesktopIds() const;
0120 
0121     /**
0122      * Whether this Deleted represents the outline.
0123      */
0124     bool isOutline() const override
0125     {
0126         return m_wasOutline;
0127     }
0128     bool isLockScreen() const override
0129     {
0130         return m_wasLockScreen;
0131     }
0132 
0133 private Q_SLOTS:
0134     void mainWindowClosed(KWin::Window *window);
0135 
0136 private:
0137     Deleted(); // use create()
0138     void copyToDeleted(Window *c);
0139     ~Deleted() override; // deleted only using unrefWindow()
0140 
0141     QMargins m_frameMargins;
0142 
0143     int delete_refcount;
0144     int desk;
0145     QStringList activityList;
0146     QRectF contentsRect; // for clientPos()/clientSize()
0147     xcb_window_t m_frame;
0148     QVector<VirtualDesktop *> m_desktops;
0149 
0150     QRectF decoration_left;
0151     QRectF decoration_right;
0152     QRectF decoration_top;
0153     QRectF decoration_bottom;
0154     Layer m_layer;
0155     bool m_shade;
0156     bool m_minimized;
0157     bool m_modal;
0158     QList<Window *> m_mainWindows;
0159     bool m_wasClient;
0160     NET::WindowType m_type = NET::Unknown;
0161     QString m_windowRole;
0162     bool m_fullscreen;
0163     bool m_keepAbove;
0164     bool m_keepBelow;
0165     QString m_caption;
0166     bool m_wasPopupWindow;
0167     bool m_wasOutline;
0168     bool m_wasLockScreen;
0169 };
0170 
0171 inline void Deleted::refWindow()
0172 {
0173     ++delete_refcount;
0174 }
0175 
0176 } // namespace
0177 
0178 Q_DECLARE_METATYPE(KWin::Deleted *)