+static void
+load_agl_shell_app(QPlatformNativeInterface *native,
+ QQmlApplicationEngine *engine,
+ struct agl_shell *agl_shell, QUrl &bindingAddress,
+ const char *screen_name, bool is_demo)
+{
+ struct wl_surface *bg, *top, *bottom;
+ struct wl_output *output;
+ QObject *qobj_bg, *qobj_top, *qobj_bottom;
+ QScreen *screen = nullptr;
+
+ if (is_demo) {
+ QQmlComponent bg_comp(engine, QUrl("qrc:/background_demo.qml"));
+ qInfo() << bg_comp.errors();
+
+ QQmlComponent top_comp(engine, QUrl("qrc:/toppanel_demo.qml"));
+ qInfo() << top_comp.errors();
+
+ QQmlComponent bot_comp(engine, QUrl("qrc:/bottompanel_demo.qml"));
+ qInfo() << bot_comp.errors();
+
+ top = create_component(native, &top_comp, screen, &qobj_top);
+ bottom = create_component(native, &bot_comp, screen, &qobj_bottom);
+ bg = create_component(native, &bg_comp, screen, &qobj_bg);
+ } else {
+ QQmlComponent bg_comp(engine, QUrl("qrc:/background.qml"));
+ qInfo() << bg_comp.errors();
+
+ QQmlComponent top_comp(engine, QUrl("qrc:/toppanel.qml"));
+ qInfo() << top_comp.errors();
+
+ QQmlComponent bot_comp(engine, QUrl("qrc:/bottompanel.qml"));
+ qInfo() << bot_comp.errors();
+
+ top = create_component(native, &top_comp, screen, &qobj_top);
+ bottom = create_component(native, &bot_comp, screen, &qobj_bottom);
+ bg = create_component(native, &bg_comp, screen, &qobj_bg);
+ }
+
+ if (!screen_name)
+ screen = qApp->primaryScreen();
+ else
+ screen = find_screen(screen_name);
+
+ qDebug() << "found primary screen " << qApp->primaryScreen()->name() <<
+ "first screen " << qApp->screens().first()->name();
+ output = getWlOutput(native, screen);
+
+
+ /* engine.rootObjects() works only if we had a load() */
+ StatusBarModel *statusBar = qobj_top->findChild<StatusBarModel *>("statusBar");
+ if (statusBar) {
+ qDebug() << "got statusBar objectname, doing init()";
+ statusBar->init(bindingAddress, engine->rootContext());
+ }
+
+ agl_shell_set_panel(agl_shell, top, output, AGL_SHELL_EDGE_TOP);
+ agl_shell_set_panel(agl_shell, bottom, output, AGL_SHELL_EDGE_BOTTOM);
+ qDebug() << "Setting homescreen to screen " << screen->name();
+
+ agl_shell_set_background(agl_shell, bg, output);
+
+ /* Delay the ready signal until after Qt has done all of its own setup
+ * in a.exec() */
+ QTimer::singleShot(500, [agl_shell](){
+ agl_shell_ready(agl_shell);
+ });