2 #include <QtQml/qqml.h>
3 #include <qlibwindowmanager.h>
4 #include <QQuickWindow>
5 #include <QtCore/QCommandLineParser>
6 #include <QtCore/QDebug>
8 #include <QtCore/QStandardPaths>
9 #include <QtCore/QUrlQuery>
10 #include <QtGui/QGuiApplication>
11 #include <QtQml/QQmlApplicationEngine>
12 #include <QtQml/QQmlContext>
13 #include <QtQuickControls2/QQuickStyle>
14 #include <libhomescreen.hpp>
16 int main(int argc, char* argv[]) {
17 QString role = QString("Restriction");
19 QGuiApplication app(argc, argv);
21 QQuickStyle::setStyle("AGL");
23 QQmlApplicationEngine engine;
25 QCommandLineParser parser;
26 parser.addPositionalArgument("port",
27 app.translate("main", "port for binding"));
28 parser.addPositionalArgument("secret",
29 app.translate("main", "secret for binding"));
30 parser.addHelpOption();
31 parser.addVersionOption();
33 QStringList positionalArguments = parser.positionalArguments();
35 if (positionalArguments.length() == 2) {
36 int port = positionalArguments.takeFirst().toInt();
37 QString secret = positionalArguments.takeFirst();
39 bindingAddress.setScheme(QStringLiteral("ws"));
40 bindingAddress.setHost(QStringLiteral("localhost"));
41 bindingAddress.setPort(port);
42 bindingAddress.setPath(QStringLiteral("/api"));
44 query.addQueryItem(QStringLiteral("token"), secret);
45 bindingAddress.setQuery(query);
47 std::string token = secret.toStdString();
48 LibHomeScreen* hs = new LibHomeScreen();
49 QLibWindowmanager* qwm = new QLibWindowmanager();
51 if (qwm->init(port, secret) != 0) {
54 // Request a surface as described in layers.json windowmanager’s file
55 if (qwm->requestSurface(role) != 0) {
58 // Create an event callback against an event type. Here a lambda is
59 // called when SyncDraw event occurs
60 qwm->set_event_handler(QLibWindowmanager::Event_SyncDraw,
61 [qwm, role](json_object* object) {
62 fprintf(stderr, "Surface got syncDraw!\n");
66 engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
67 QObject* root = engine.rootObjects().first();
70 hs->init(port, token.c_str());
72 // release restriction
73 hs->set_event_handler(
74 LibHomeScreen::Event_ReleaseRestriction,
75 [qwm, role, root](json_object* object) {
76 json_object* areaJ = nullptr;
77 if (json_object_object_get_ex(object, "area", &areaJ)) {
78 QString area(QLatin1String(json_object_get_string(areaJ)));
80 QMetaObject::invokeMethod(root, "hideImage");
82 // qwm->releaseWR(role, area);
83 qwm->deactivateSurface(role);
87 // allocate restriction
88 hs->set_event_handler(
89 LibHomeScreen::Event_AllocateRestriction,
90 [qwm, role, root](json_object* object) {
91 json_object* areaJ = nullptr;
92 if (json_object_object_get_ex(object, "area", &areaJ)) {
93 QString area(QLatin1String(json_object_get_string(areaJ)));
95 << "Surface got Event_AllocateRestriction " << area;
97 QMetaObject::invokeMethod(root, "showImage",
98 Q_ARG(QVariant, area));
100 // qwm->allocateWR(role, area);
101 qwm->activateSurface(role, area.prepend("restriction."));