1/****************************************************************************
2**
3** Copyright (C) 2017 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the QtWaylandCompositor module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:GPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU
19** General Public License version 3 or (at your option) any later version
20** approved by the KDE Free Qt Foundation. The licenses are as published by
21** the Free Software Foundation and appearing in the file LICENSE.GPL3
22** included in the packaging of this file. Please review the following
23** information to ensure the GNU General Public License requirements will
24** be met: https://www.gnu.org/licenses/gpl-3.0.html.
25**
26** $QT_END_LICENSE$
27**
28****************************************************************************/
29
30#ifndef QWAYLANDSHELL_H
31#define QWAYLANDSHELL_H
32
33#include <QtWaylandCompositor/QWaylandCompositorExtension>
34
35QT_BEGIN_NAMESPACE
36
37class QWaylandShellPrivate;
38
39class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandShell : public QWaylandCompositorExtension
40{
41 Q_OBJECT
42 Q_DECLARE_PRIVATE(QWaylandShell)
43 Q_PROPERTY(FocusPolicy focusPolicy READ focusPolicy WRITE setFocusPolicy NOTIFY focusPolicyChanged)
44public:
45 enum FocusPolicy {
46 AutomaticFocus,
47 ManualFocus
48 };
49 Q_ENUM(FocusPolicy)
50
51 QWaylandShell();
52 QWaylandShell(QWaylandObject *waylandObject);
53
54 FocusPolicy focusPolicy() const;
55 void setFocusPolicy(FocusPolicy focusPolicy);
56
57Q_SIGNALS:
58 void focusPolicyChanged();
59
60protected:
61 explicit QWaylandShell(QWaylandShellPrivate &dd);
62 explicit QWaylandShell(QWaylandObject *container, QWaylandShellPrivate &dd);
63
64 //Qt 6: remove
65 Q_DECL_DEPRECATED QWaylandShell(QWaylandCompositorExtensionPrivate &dd);
66 Q_DECL_DEPRECATED QWaylandShell(QWaylandObject *container, QWaylandCompositorExtensionPrivate &dd);
67};
68
69template <typename T>
70class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandShellTemplate : public QWaylandShell
71{
72public:
73 QWaylandShellTemplate()
74 : QWaylandShell()
75 { }
76
77 QWaylandShellTemplate(QWaylandObject *container)
78 : QWaylandShell(container)
79 { }
80
81 const struct wl_interface *extensionInterface() const override
82 {
83 return T::interface();
84 }
85
86 static T *findIn(QWaylandObject *container)
87 {
88 if (!container) return nullptr;
89 return qobject_cast<T *>(container->extension(T::interfaceName()));
90 }
91
92protected:
93 QWaylandShellTemplate(QWaylandShellPrivate &dd)
94 : QWaylandShell(dd)
95 { }
96
97 QWaylandShellTemplate(QWaylandObject *container, QWaylandShellPrivate &dd)
98 : QWaylandShell(container,dd)
99 { }
100};
101
102QT_END_NAMESPACE
103
104#endif // QWAYLANDSHELL_H
105

source code of qtwayland/src/compositor/extensions/qwaylandshell.h