Tweak things to center the window 05/26005/1 koi 10.93.1 11.0.0 11.0.1 11.0.2 11.0.3 11.0.4 11.0.5 koi/10.93.1 koi/11.0.0 koi/11.0.1 koi/11.0.2 koi/11.0.3 koi/11.0.4 koi/11.0.5 koi_10.93.1 koi_11.0.0 koi_11.0.1 koi_11.0.2 koi_11.0.3 koi_11.0.4 koi_11.0.5
authorScott Murray <scott.murray@konsulko.com>
Mon, 1 Feb 2021 23:13:28 +0000 (18:13 -0500)
committerScott Murray <scott.murray@konsulko.com>
Thu, 4 Feb 2021 16:58:37 +0000 (16:58 +0000)
Add a onCompleted hook in Main.qml to set it's x and y coordinates to
center the window, and rework instantiation of the qml in main.cpp so
that the resulting x and y values can be queried and used in a call to
set_window_props to actually position the window.

Bug-AGL: SPEC-3784

Signed-off-by: Scott Murray <scott.murray@konsulko.com>
Change-Id: I46e2dfac7c62c9afd379fd6bf7b7fa3277422cbc
(cherry picked from commit b587bf9d453f29656c2a52bc486881c0e3cb67c6)

app/Main.qml
app/main.cpp

index 4011107..0b60d5c 100644 (file)
@@ -29,6 +29,12 @@ Window {
     visible: true
     flags: Qt.FramelessWindowHint
 
+    Component.onCompleted: {
+        // Center window
+        root.x = root.screen.virtualX + root.screen.width / 2 - root.width / 2;
+        root.y = root.screen.virtualY + root.screen.height / 2 - root.height / 2;
+    }
+
     BodyTemplateDialog {
         id: bodyTemplate
         anchors.centerIn: parent
index 3c8792c..3751862 100644 (file)
@@ -24,6 +24,8 @@
 #include <QtQml/QQmlContext>
 #include <QtQml/qqml.h>
 #include <QQuickWindow>
+#include <QQmlComponent>
+#include <QQmlProperty>
 #include <QtQuickControls2/QQuickStyle>
 #include <qpa/qplatformnativeinterface.h>
 
@@ -291,7 +293,16 @@ int main(int argc, char *argv[])
        QQmlContext *context = engine.rootContext();
        context->setContextProperty("homescreen", aglShell);
        context->setContextProperty("GuiMetadata", new GuiMetadata(bindingAddress, context));
-       engine.load(QUrl(QStringLiteral("qrc:/Main.qml")));
+       QQmlComponent component(&engine,
+                               QUrl(QStringLiteral("qrc:/Main.qml")));
+       QObject *object = component.create();
+
+       // Update window position based on component (x, y)
+       int x = QQmlProperty::read(object, "x").toInt();
+       int y = QQmlProperty::read(object, "y").toInt();
+       aglShell->set_window_props(nullptr, my_app_id,
+                                  AGL_SHELL_DESKTOP_APP_ROLE_POPUP,
+                                  x, y, 0, 0, 0, 0);
 
        // Create app framework client to handle events when window is not visible
        AfbClient client(port, token.toStdString());