1 /****************************************************************************
2 Copyright © 2020 Roman Gilg <subdiff@gmail.com>
3 
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) version 3, or any
8 later version accepted by the membership of KDE e.V. (or its
9 successor approved by the membership of KDE e.V.), which shall
10 act as a proxy defined in Section 6 of version 3 of the license.
11 
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 Lesser General Public License for more details.
16 
17 You should have received a copy of the GNU Lesser General Public
18 License along with this library.  If not, see <http://www.gnu.org/licenses/>.
19 ****************************************************************************/
20 #pragma once
21 
22 // For Qt metatype declaration.
23 #include "display.h"
24 #include "xdg_shell_popup.h"
25 #include "xdg_shell_toplevel.h"
26 
27 #include <QObject>
28 
29 #include <Wrapland/Server/wraplandserver_export.h>
30 
31 #include <memory>
32 
33 namespace Wrapland::Server
34 {
35 class Client;
36 class Display;
37 class XdgShellPopup;
38 class XdgShellToplevel;
39 
40 class WRAPLANDSERVER_EXPORT XdgShell : public QObject
41 {
42     Q_OBJECT
43 public:
44     ~XdgShell() override;
45 
46     uint32_t ping(Client* client);
47 
48 Q_SIGNALS:
49     void toplevelCreated(XdgShellToplevel* toplevel);
50     void popupCreated(XdgShellPopup* popup);
51 
52     void pongReceived(uint32_t serial);
53     void pingDelayed(uint32_t serial);
54     void pingTimeout(uint32_t serial);
55 
56 private:
57     friend class Display;
58     friend class XdgShellSurface;
59     friend class XdgDecorationManager;
60     explicit XdgShell(Display* display, QObject* parent = nullptr);
61 
62     class Private;
63     std::unique_ptr<Private> d_ptr;
64 };
65 
66 }
67