summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTasuku Suzuki <tasuku.suzuki@qt.io>2017-12-14 18:35:41 +0900
committerTasuku Suzuki <tasuku.suzuki@qt.io>2017-12-14 18:38:22 +0900
commit1fc5b34801d033a50a683687b18f05e250fee9d4 (patch)
treeac57a53693e2225a7a6adda4f85184cc00ee4373
parent06ca4be06cc082c77565f1828fedce11e3510b6b (diff)
Check if dependencies are available and make it run without them
To develop apps efficiently, apps should work on any platform that Qt supports. Change-Id: I559786d207663e023cfbbf1a3f6cf1770191a960 Signed-off-by: Tasuku Suzuki <tasuku.suzuki@qt.io>
-rw-r--r--app/app.pri15
-rw-r--r--app/app.pro3
-rw-r--r--app/config.tests/qlibwindowmanager/qlibwindowmanager.cpp8
-rw-r--r--app/config.tests/qlibwindowmanager/qlibwindowmanager.pro5
-rw-r--r--app/main.cpp92
5 files changed, 82 insertions, 41 deletions
diff --git a/app/app.pri b/app/app.pri
index e535cbc..590c154 100644
--- a/app/app.pri
+++ b/app/app.pri
@@ -2,4 +2,19 @@ TEMPLATE = app
load(configure)
+qtCompileTest(libhomescreen)
+qtCompileTest(qlibwindowmanager)
+
+config_libhomescreen {
+ CONFIG += link_pkgconfig
+ PKGCONFIG += libhomescreen
+ DEFINES += HAVE_LIBHOMESCREEN
+}
+
+config_qlibwindowmanager {
+ CONFIG += link_pkgconfig
+ PKGCONFIG += qlibwindowmanager
+ DEFINES += HAVE_QLIBWINDOWMANAGER
+}
+
DESTDIR = $${OUT_PWD}/../package/root/bin
diff --git a/app/app.pro b/app/app.pro
index 1aa4da0..c0b0cad 100644
--- a/app/app.pro
+++ b/app/app.pro
@@ -8,9 +8,6 @@ HEADERS += \
SOURCES = main.cpp \
translator.cpp
-CONFIG += link_pkgconfig
-PKGCONFIG += libhomescreen qlibwindowmanager
-
RESOURCES += \
dashboard.qrc \
images/images.qrc
diff --git a/app/config.tests/qlibwindowmanager/qlibwindowmanager.cpp b/app/config.tests/qlibwindowmanager/qlibwindowmanager.cpp
new file mode 100644
index 0000000..bb95c93
--- /dev/null
+++ b/app/config.tests/qlibwindowmanager/qlibwindowmanager.cpp
@@ -0,0 +1,8 @@
+#include <qlibwindowmanager.h>
+
+int main(int argc,char **argv)
+{
+ QLibWindowmanager qwm;
+ return 0;
+}
+
diff --git a/app/config.tests/qlibwindowmanager/qlibwindowmanager.pro b/app/config.tests/qlibwindowmanager/qlibwindowmanager.pro
new file mode 100644
index 0000000..96721e8
--- /dev/null
+++ b/app/config.tests/qlibwindowmanager/qlibwindowmanager.pro
@@ -0,0 +1,5 @@
+SOURCES = qlibwindowmanager.cpp
+
+CONFIG -= qt
+CONFIG += link_pkgconfig
+PKGCONFIG += qlibwindowmanager
diff --git a/app/main.cpp b/app/main.cpp
index d7f15b5..ed393a4 100644
--- a/app/main.cpp
+++ b/app/main.cpp
@@ -25,8 +25,13 @@
#include "translator.h"
+#ifdef HAVE_LIBHOMESCREEN
#include <libhomescreen.hpp>
+#endif
+
+#ifdef HAVE_QLIBWINDOWMANAGER
#include <qlibwindowmanager.h>
+#endif
int main(int argc, char *argv[])
{
@@ -51,10 +56,12 @@ int main(int argc, char *argv[])
qmlRegisterType<Translator>("Translator", 1, 0, "Translator");
QQmlApplicationEngine engine;
+ QQmlContext *context = engine.rootContext();
+ QUrl bindingAddress;
+ QString secret;
if (positionalArguments.length() == 2) {
int port = positionalArguments.takeFirst().toInt();
QString secret = positionalArguments.takeFirst();
- QUrl bindingAddress;
bindingAddress.setScheme(QStringLiteral("ws"));
bindingAddress.setHost(QStringLiteral("localhost"));
bindingAddress.setPort(port);
@@ -62,49 +69,58 @@ int main(int argc, char *argv[])
QUrlQuery query;
query.addQueryItem(QStringLiteral("token"), secret);
bindingAddress.setQuery(query);
- QQmlContext *context = engine.rootContext();
context->setContextProperty(QStringLiteral("bindingAddress"), bindingAddress);
+ } else {
+ context->setContextProperty(QStringLiteral("bindingAddress"), bindingAddress);
+ }
- std::string token = secret.toStdString();
- LibHomeScreen* hs = new LibHomeScreen();
- QLibWindowmanager* qwm = new QLibWindowmanager();
-
- // WindowManager
- if(qwm->init(port,secret) != 0){
- exit(EXIT_FAILURE);
- }
- // Request a surface as described in layers.json windowmanager’s file
- if (qwm->requestSurface(myname) != 0) {
- exit(EXIT_FAILURE);
- }
- // Create an event callback against an event type. Here a lambda is called when SyncDraw event occurs
- qwm->set_event_handler(QLibWindowmanager::Event_SyncDraw, [qwm, myname](json_object *object) {
- fprintf(stderr, "Surface got syncDraw!\n");
- qwm->endDraw(myname);
- });
+#ifdef HAVE_QLIBWINDOWMANAGER
+ // WindowManager
+ QLibWindowmanager* qwm = new QLibWindowmanager();
+ if(qwm->init(port,secret) != 0){
+ exit(EXIT_FAILURE);
+ }
+ // Request a surface as described in layers.json windowmanager’s file
+ if (qwm->requestSurface(myname) != 0) {
+ exit(EXIT_FAILURE);
+ }
+ // Create an event callback against an event type. Here a lambda is called when SyncDraw event occurs
+ qwm->set_event_handler(QLibWindowmanager::Event_SyncDraw, [qwm, myname](json_object *object) {
+ fprintf(stderr, "Surface got syncDraw!\n");
+ qwm->endDraw(myname);
+ });
+#endif
- // HomeScreen
- hs->init(port, token.c_str());
- // Set the event handler for Event_TapShortcut which will activate the surface for windowmanager
- hs->set_event_handler(LibHomeScreen::Event_TapShortcut, [qwm, myname](json_object *object){
- json_object *appnameJ = nullptr;
- if(json_object_object_get_ex(object, "application_name", &appnameJ))
+#ifdef HAVE_LIBHOMESCREEN
+ // HomeScreen
+ LibHomeScreen* hs = new LibHomeScreen();
+ std::string token = secret.toStdString();
+ hs->init(port, secret.to);
+ // Set the event handler for Event_TapShortcut which will activate the surface for windowmanager
+ hs->set_event_handler(LibHomeScreen::Event_TapShortcut, [qwm, myname](json_object *object){
+ json_object *appnameJ = nullptr;
+ if(json_object_object_get_ex(object, "application_name", &appnameJ))
+ {
+ const char *appname = json_object_get_string(appnameJ);
+ if(myname == appname)
{
- const char *appname = json_object_get_string(appnameJ);
- if(myname == appname)
- {
- qDebug("Surface %s got tapShortcut\n", appname);
- qwm->activateSurface(myname);
- }
+ qDebug("Surface %s got tapShortcut\n", appname);
+ qwm->activateSurface(myname);
}
- });
+ }
+ });
+#endif
+ engine.load(QUrl(QStringLiteral("qrc:/Dashboard.qml")));
+
+ QObject *root = engine.rootObjects().first();
+ QQuickWindow *window = qobject_cast<QQuickWindow *>(root);
+#ifdef HAVE_QLIBWINDOWMANAGER
+ QObject::connect(window, SIGNAL(frameSwapped()), qwm, SLOT(slotActivateSurface()));
+#else
+ window->resize(1080, 1920 - 218 - 215);
+ window->setVisible(true);
+#endif
- engine.load(QUrl(QStringLiteral("qrc:/Dashboard.qml")));
- QObject *root = engine.rootObjects().first();
- QQuickWindow *window = qobject_cast<QQuickWindow *>(root);
- QObject::connect(window, SIGNAL(frameSwapped()), qwm, SLOT(slotActivateSurface()
- ));
- }
return app.exec();
}