app: Allow to place the window on a different output
[apps/hvac.git] / app / shell-desktop.h
1 /*
2  * Copyright © 2020 Collabora Ltd.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining
5  * a copy of this software and associated documentation files (the
6  * "Software"), to deal in the Software without restriction, including
7  * without limitation the rights to use, copy, modify, merge, publish,
8  * distribute, sublicense, and/or sell copies of the Software, and to
9  * permit persons to whom the Software is furnished to do so, subject to
10  * the following conditions:
11  *
12  * The above copyright notice and this permission notice (including the
13  * next paragraph) shall be included in all copies or substantial
14  * portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19  * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
20  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
21  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23  * SOFTWARE.
24  */
25
26 #ifndef SHELLDESKTOP_H
27 #define SHELLDESKTOP_H
28
29 #include <QObject>
30 #include <QString>
31 #include <QScreen>
32 #include <QWindow>
33 #include <QDebug>
34 #include <memory>
35
36 #include "wayland-agl-shell-desktop-client-protocol.h"
37
38 static void
39 application_id_event(void *data, struct agl_shell_desktop *agl_shell_desktop,
40                      const char *app_id);
41 static void
42 application_state_event(void *data, struct agl_shell_desktop *agl_shell_desktop,
43                         const char *app_id, const char *app_data,
44                         uint32_t app_state, uint32_t app_role);
45
46 static const struct agl_shell_desktop_listener agl_shell_desktop_listener = {
47         application_id_event,
48         application_state_event,
49 };
50
51 class Shell : public QObject
52 {
53 Q_OBJECT
54
55 public:
56         std::shared_ptr<struct agl_shell_desktop> shell;
57         Shell(std::shared_ptr<struct agl_shell_desktop> shell, QObject *parent = nullptr) :
58                 QObject(parent), shell(shell)
59         {
60                 struct agl_shell_desktop *agl_shell_desktop = shell.get();
61                 agl_shell_desktop_add_listener(agl_shell_desktop,
62                                                &agl_shell_desktop_listener, this);
63         }
64
65 public slots: // calls out of qml into CPP
66         void set_window_on_screen(QScreen *screen, const QString &app_id);
67 };
68
69 static void
70 application_id_event(void *data, struct agl_shell_desktop *agl_shell_desktop,
71                      const char *app_id)
72 {
73         Shell *aglShell = static_cast<Shell *>(data);
74         (void) agl_shell_desktop;
75 }
76
77 static void
78 application_state_event(void *data, struct agl_shell_desktop *agl_shell_desktop,
79                         const char *app_id, const char *app_data,
80                         uint32_t app_state, uint32_t app_role)
81 {
82         (void) data;
83         (void) agl_shell_desktop;
84         (void) app_id;
85         (void) app_data;
86         (void) app_state;
87         (void) app_role;
88 }
89
90 #endif // SHELLDESKTOP_H