blob: a23b3b5e56a9cd092202bde9bf6783f2654e3357 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
// Copyright (C) 2021 The Qt Company Ltd.
// Copyright (C) 2019 Luxoft Sweden AB
// Copyright (C) 2018 Pelagicore AG
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#pragma once
#include <QtQuick/QQuickItem>
#include <QtAppManCommon/global.h>
QT_BEGIN_NAMESPACE_AM
class Window;
class InProcessWindow;
#if defined(AM_MULTI_PROCESS)
class WaylandWindow;
class WaylandQuickIgnoreKeyItem;
#endif // AM_MULTI_PROCESS
class WindowItem : public QQuickItem
{
Q_OBJECT
Q_CLASSINFO("AM-QmlType", "QtApplicationManager.SystemUI/WindowItem 2.0")
Q_PROPERTY(Window* window READ window WRITE setWindow NOTIFY windowChanged)
Q_PROPERTY(bool primary READ primary NOTIFY primaryChanged)
Q_PROPERTY(bool objectFollowsItemSize READ objectFollowsItemSize
WRITE setObjectFollowsItemSize
NOTIFY objectFollowsItemSizeChanged)
Q_PROPERTY(QQmlListProperty<QObject> contentItemData READ contentItemData NOTIFY contentItemDataChanged)
Q_CLASSINFO("DefaultProperty", "contentItemData")
public:
WindowItem(QQuickItem *parent = nullptr);
~WindowItem();
Window *window() const;
void setWindow(Window *window);
bool primary() const;
Q_INVOKABLE void makePrimary();
bool objectFollowsItemSize() { return m_objectFollowsItemSize; }
void setObjectFollowsItemSize(bool value);
QQmlListProperty<QObject> contentItemData();
static void contentItemData_append(QQmlListProperty<QObject> *property, QObject *value);
static qsizetype contentItemData_count(QQmlListProperty<QObject> *property);
static QObject *contentItemData_at(QQmlListProperty<QObject> *property, qsizetype index);
static void contentItemData_clear(QQmlListProperty<QObject> *property);
protected:
void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override;
signals:
void windowChanged();
void primaryChanged();
void objectFollowsItemSizeChanged();
void contentItemDataChanged();
private slots:
void updateImplicitSize();
private:
void createImpl(bool inProcess);
struct Impl {
Impl(WindowItem *windowItem) : q(windowItem) {}
virtual ~Impl() {}
virtual void setup(Window *window) = 0;
virtual void tearDown() = 0;
virtual void updateSize(const QSizeF &newSize) = 0;
virtual bool isInProcess() const = 0;
virtual Window *window() const = 0;
virtual void setupPrimaryView() = 0;
virtual void setupSecondaryView() = 0;
virtual void forwardActiveFocus() = 0;
WindowItem *q;
};
struct InProcessImpl : public Impl {
InProcessImpl(WindowItem *windowItem) : Impl(windowItem) {}
void setup(Window *window) override;
void tearDown() override;
void updateSize(const QSizeF &newSize) override;
bool isInProcess() const override { return true; }
Window *window() const override;
void setupPrimaryView() override;
void setupSecondaryView() override;
void forwardActiveFocus() override;
InProcessWindow *m_inProcessWindow{nullptr};
QQuickItem *m_shaderEffectSource{nullptr};
};
#if defined(AM_MULTI_PROCESS)
struct WaylandImpl : public Impl {
WaylandImpl(WindowItem *windowItem) : Impl(windowItem) {}
~WaylandImpl();
void setup(Window *window) override;
void tearDown() override;
void updateSize(const QSizeF &newSize) override;
bool isInProcess() const override { return false; }
Window *window() const override;
void setupPrimaryView() override;
void setupSecondaryView() override;
void createWaylandItem();
void forwardActiveFocus() override;
WaylandWindow *m_waylandWindow{nullptr};
WaylandQuickIgnoreKeyItem *m_waylandItem{nullptr};
};
#endif // AM_MULTI_PROCESS
Impl *m_impl{nullptr};
bool m_objectFollowsItemSize{true};
// The only purpose of this item is to ensure all WindowItem children added by System UI code ends up
// in front of WindowItem's internal QWaylandQuickItem (or the application's root item in case of
// inprocess)
QQuickItem *m_contentItem;
};
QT_END_NAMESPACE_AM
|