summaryrefslogtreecommitdiffstats
path: root/src/compositor/extensions/qwaylandshellsurface.cpp
blob: 7e2fcee603a7878fddc5316268359c4d031b3009 (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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only

#include "qwaylandshellsurface_p.h"

/*!
 * \class QWaylandShellSurfaceTemplate
 * \inmodule QtWaylandCompositor
 * \since 5.8
 * \brief QWaylandShellSurfaceTemplate is a convenience class for creating custom shell surface
 * classes.
 *
 * QWaylandShellSurfaceTemplate is a template class which inherits from QWaylandShellSurface and
 * is convenience for building custom shell extensions.
 *
 * It provides the connection between Qt Wayland Compositor and the class generated by
 * \c qtwaylandscanner, based on the XML description of the extension protocol.
 *
 * It provides two specific pieces of convenience:
 * \list
 *   \li A reimplementation of \l{QWaylandCompositorExtension::extensionInterface()} which returns
 *   the \c wl_interface pointer for the qtwaylandscanner-generated base class.
 *   \li A static \l{findIn()} function which searches for an instance of the extension in a
 *   provided container, and returns this if it is found.
 * \endlist
 *
 * The same usage pattern applies as for QWaylandCompositorExtensionTemplate.
 *
 * \sa { Custom Shell}
 */

/*!
 *  \fn template <typename T> T *QWaylandShellSurfaceTemplate<T>::findIn(QWaylandObject *container)
 *
 *  If any instance of the interface has been registered with \a container, this is returned.
 *  Otherwise null is returned. The look-up is based on the generated \c interfaceName() which
 *  matches the interface name in the protocol description.
 */


/*!
 * \qmltype ShellSurface
 * \instantiates QWaylandShellSurface
 * \inqmlmodule QtWayland.Compositor
 * \since 5.8
 * \brief Provides a common interface for surface roles specified by shell extensions.
 *
 * This interface represents a Wayland surface role given by a Wayland protocol extension that
 * defines how the WaylandSurface should map onto the screen.
 *
 * \note Even though this type contains a very limited API, the properties and signals of the
 * implementations are named consistently. For example, if you're only using desktop shell
 * extensions in your compositor, it's safe to access properties such as title, maximized, etc.
 * directly on the ShellSurface. See the various implementations for additional properties and
 * signals.
 *
 * \sa WaylandSurface, ShellSurfaceItem, WlShellSurface, IviSurface
 */

/*!
 * \class QWaylandShellSurface
 * \inmodule QtWaylandCompositor
 * \since 5.8
 * \brief The QWaylandShellSurface class is a common interface for surface roles specified by shell extensions.
 *
 * This interface represents a Wayland surface role given by a Wayland protocol extension that
 * defines how the QWaylandSurface should map onto the screen.
 *
 * \sa QWaylandSurface, QWaylandWlShellSurface, QWaylandIviSurface, QWaylandShellSurfaceTemplate
 */

#if QT_CONFIG(wayland_compositor_quick)
/*!
 * \fn QWaylandQuickShellIntegration *QWaylandShellSurface::createIntegration(QWaylandQuickShellSurfaceItem *item)
 *
 * Creates a QWaylandQuickShellIntegration for this QWaylandQuickShellSurface. It's called
 * automatically when \a {item}'s \l {QWaylandQuickShellSurfaceItem::}{shellSurface} is assigned.
 *
 * \sa QWaylandQuickShellSurfaceItem
 */
#endif

/*!
 * \qmlproperty enum QtWayland.Compositor::ShellSurface::windowType
 *
 * This property holds the window type of the ShellSurface.
 */

/*!
 * \property QWaylandShellSurface::windowType
 *
 * This property holds the window type of the QWaylandShellSurface.
 */

/*!
 * \qmlproperty bool QtWayland.Compositor::ShellSurface::modal
 *
 * This property is true if the ShellSurface represents a modal dialog.
 * \since 6.8
 */

/*!
 * \property QWaylandShellSurface::modal
 *
 * This property is true if the ShellSurface represents a modal dialog.
 * \since 6.8
 */

QT_BEGIN_NAMESPACE

QWaylandShellSurface::QWaylandShellSurface(QWaylandShellSurfacePrivate &dd)
    : QWaylandCompositorExtension(dd)
{
}

QWaylandShellSurface::QWaylandShellSurface(QWaylandObject *container, QWaylandShellSurfacePrivate &dd)
    : QWaylandCompositorExtension(container, dd)
{
}

QWaylandShellSurface::QWaylandShellSurface(QWaylandObject *waylandObject)
    : QWaylandCompositorExtension(waylandObject, *new QWaylandShellSurfacePrivate)
{
}

bool QWaylandShellSurface::modal() const
{
    Q_D(const QWaylandShellSurface);
    return d->modal;
}

void QWaylandShellSurface::setModal(bool newModal)
{
    Q_D(QWaylandShellSurface);
    if (d->modal == newModal)
        return;
    d->modal = newModal;
    emit modalChanged();
}

QT_END_NAMESPACE

#include "moc_qwaylandshellsurface.cpp"