KWin
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
windowitem.h
Go to the documentation of this file.
1/*
2 SPDX-FileCopyrightText: 2021 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5*/
6
7#pragma once
8
9#include "scene/item.h"
10
11namespace KDecoration2
12{
13class Decoration;
14}
15
16namespace KWin
17{
18class Window;
19class DecorationItem;
20class EffectWindow;
21class InternalWindow;
22class Shadow;
23class ShadowItem;
24class SurfaceItem;
25class X11Window;
26
33class KWIN_EXPORT WindowItem : public Item
34{
35 Q_OBJECT
36
37public:
38 enum {
39 PAINT_DISABLED_BY_HIDDEN = 1 << 0,
40 PAINT_DISABLED_BY_DESKTOP = 1 << 1,
41 PAINT_DISABLED_BY_MINIMIZE = 1 << 2,
42 PAINT_DISABLED_BY_ACTIVITY = 1 << 3,
43 };
44
45 ~WindowItem() override;
46
47 SurfaceItem *surfaceItem() const;
48 DecorationItem *decorationItem() const;
49 ShadowItem *shadowItem() const;
50 Window *window() const;
51 EffectWindow *effectWindow() const;
52
53 void refVisible(int reason);
54 void unrefVisible(int reason);
55
56 void elevate();
57 void deelevate();
58
59protected:
60 explicit WindowItem(Window *window, Scene *scene, Item *parent = nullptr);
61 void updateSurfaceItem(std::unique_ptr<SurfaceItem> &&surfaceItem);
62
63private Q_SLOTS:
64 void updateDecorationItem();
65 void updateShadowItem();
66 void updateSurfacePosition();
67 void updateSurfaceVisibility();
68 void updatePosition();
69 void updateOpacity();
70 void updateStackingOrder();
71 void addSurfaceItemDamageConnects(Item *item);
72
73private:
74 bool computeVisibility() const;
75 void updateVisibility();
76 void markDamaged();
77 void freeze();
78
79 Window *m_window;
80 std::unique_ptr<SurfaceItem> m_surfaceItem;
81 std::unique_ptr<DecorationItem> m_decorationItem;
82 std::unique_ptr<ShadowItem> m_shadowItem;
83 std::unique_ptr<EffectWindow> m_effectWindow;
84 std::optional<int> m_elevation;
85 int m_forceVisibleByHiddenCount = 0;
86 int m_forceVisibleByDesktopCount = 0;
87 int m_forceVisibleByMinimizeCount = 0;
88 int m_forceVisibleByActivityCount = 0;
89};
90
97class KWIN_EXPORT WindowItemX11 : public WindowItem
98{
99 Q_OBJECT
100
101public:
102 explicit WindowItemX11(X11Window *window, Scene *scene, Item *parent = nullptr);
103
104private Q_SLOTS:
105 void initialize();
106};
107
111class KWIN_EXPORT WindowItemWayland : public WindowItem
112{
113 Q_OBJECT
114
115public:
116 explicit WindowItemWayland(Window *window, Scene *scene, Item *parent = nullptr);
117};
118
123class KWIN_EXPORT WindowItemInternal : public WindowItem
124{
125 Q_OBJECT
126
127public:
128 explicit WindowItemInternal(InternalWindow *window, Scene *scene, Item *parent = nullptr);
129};
130
131} // namespace KWin
Representation of a window used by/for Effect classes.