@@ -29,6 +29,7 @@ import ".." // For EdgeBarrierControls
2929import "../../../qml/Stage"
3030import "../../../qml/Components"
3131import "../../../qml/Components/PanelState"
32+import "../../../qml/ApplicationMenus"
3233
3334Item {
3435 id: root
@@ -44,6 +45,8 @@ Item {
4445 }
4546
4647 Component.onCompleted: {
48+ ApplicationMenusLimits.screenWidth = Qt.binding( function() { return stageLoader.width; } );
49+ ApplicationMenusLimits.screenHeight = Qt.binding( function() { return stageLoader.height; } );
4750 QuickUtils.keyboardAttached = true;
4851 theme.name = "Ubuntu.Components.Themes.SuruDark";
4952 resetGeometry();
@@ -830,5 +833,56 @@ Item {
830833 mouseRelease(decoration);
831834 tryCompare(Mir, "cursorName", "");
832835 }
836+
837+ function test_menuPositioning_data() {
838+ return [
839+ {tag: "good", windowPosition: Qt.point(units.gu(10), units.gu(10)), expectedMenuCoordinates: Qt.point(units.gu(21.5), units.gu(3)) },
840+ {tag: "collides right", windowPosition: Qt.point(units.gu(100), units.gu(10)), expectedMenuCoordinates: Qt.point(units.gu(12), units.gu(3)) },
841+ {tag: "collides bottom", windowPosition: Qt.point(units.gu(10), units.gu(80)), expectedMenuCoordinates: Qt.point(units.gu(21.5), units.gu(-5.25)) },
842+ ]
843+ }
844+
845+ function test_menuPositioning(data) {
846+ var appDelegate = startApplication("dialer-app");
847+ appDelegate.windowedX = data.windowPosition.x;
848+ appDelegate.windowedY = data.windowPosition.y;
849+
850+ var menuItem = findChild(appDelegate, "menuBar-item3");
851+ menuItem.show();
852+
853+ var menu = findChild(appDelegate, "menuBar-item3-menu");
854+
855+ tryCompare(menu, "x", data.expectedMenuCoordinates.x);
856+ tryCompare(menu, "y", data.expectedMenuCoordinates.y);
857+ }
858+
859+ function test_submenuPositioning_data() {
860+ return [
861+ {tag: "good", windowPosition: Qt.point(units.gu(10), units.gu(10)), expectedMenuCoordinates: Qt.point(units.gu(20), units.gu(10.25)) },
862+ {tag: "collides right", windowPosition: Qt.point(units.gu(100), units.gu(10)), expectedMenuCoordinates: Qt.point(units.gu(-20), units.gu(10.25)) },
863+ {tag: "collides bottom", windowPosition: Qt.point(units.gu(10), units.gu(80)), expectedMenuCoordinates: Qt.point(units.gu(20), units.gu(0)) },
864+ ]
865+ }
866+
867+ function test_submenuPositioning(data) {
868+ var appDelegate = startApplication("dialer-app");
869+ appDelegate.windowedX = data.windowPosition.x;
870+ appDelegate.windowedY = data.windowPosition.y;
871+
872+ var menuItem = findChild(appDelegate, "menuBar-item3");
873+ menuItem.show();
874+
875+ var menu = findChild(appDelegate, "menuBar-item3-menu");
876+ menuItem = findChild(menu, "menuBar-item3-menu-item3-actionItem");
877+ tryCompare(menuItem, "visible", true);
878+ mouseMove(menuItem);
879+ mouseClick(menuItem);
880+
881+ menu = findChild(appDelegate, "menuBar-item3-menu-item3-menu");
882+
883+ console.log(menu, menu.x);
884+ tryCompare(menu, "x", data.expectedMenuCoordinates.x);
885+ tryCompare(menu, "y", data.expectedMenuCoordinates.y);
886+ }
833887 }
834888}