Make apps menu scrollable when content taller than available vertical space, preventi...
authorClaudio Cambra <claudio.cambra@gmail.com>
Tue, 12 Jul 2022 16:48:36 +0000 (18:48 +0200)
committerMatthieu Gallien <matthieu_gallien@yahoo.fr>
Wed, 27 Jul 2022 10:19:10 +0000 (12:19 +0200)
Signed-off-by: Claudio Cambra <claudio.cambra@gmail.com>
src/gui/tray/Window.qml

index 5508d080386d4252fe1587269fb58158b1bcdbe9..7d4041f330558513bbd98f658330caa359477447 100644 (file)
@@ -580,7 +580,7 @@ Window {
                     icon.color: UserModel.currentUser.headerTextColor\r
 \r
                     onClicked: {\r
-                        if(appsMenu.count <= 0) {\r
+                        if(appsMenuListView.count <= 0) {\r
                             UserModel.openCurrentAccountServer()\r
                         } else if (appsMenu.visible) {\r
                             appsMenu.close()\r
@@ -593,10 +593,12 @@ Window {
                     Accessible.name: qsTr("More apps")\r
                     Accessible.onPressAction: trayWindowAppsButton.clicked()\r
 \r
-                    AutoSizingMenu {\r
+                    Menu {\r
                         id: appsMenu\r
+                        x: -2\r
                         y: (trayWindowAppsButton.y + trayWindowAppsButton.height + 2)\r
-                        readonly property Item listContentItem: contentItem.contentItem\r
+                        width: Style.trayWindowWidth * 0.35\r
+                        height: implicitHeight + y > Style.trayWindowHeight ? Style.trayWindowHeight - y : implicitHeight\r
                         closePolicy: Menu.CloseOnPressOutsideParent | Menu.CloseOnEscape\r
 \r
                         background: Rectangle {\r
@@ -605,34 +607,47 @@ Window {
                             radius: 2\r
                         }\r
 \r
-                        Instantiator {\r
-                            id: appsMenuInstantiator\r
-                            model: UserAppsModel\r
-                            onObjectAdded: appsMenu.insertItem(index, object)\r
-                            onObjectRemoved: appsMenu.removeItem(object)\r
-                            delegate: MenuItem {\r
-                                id: appEntry\r
-                                text: appName\r
-                                font.pixelSize: Style.topLinePixelSize\r
-                                palette.windowText: Style.ncTextColor\r
-                                icon.source: appIconUrl\r
-                                icon.color: Style.ncTextColor\r
-                                onTriggered: UserAppsModel.openAppUrl(appUrl)\r
-                                hoverEnabled: true\r
-\r
-                                background: Item {\r
-                                    height: parent.height\r
-                                    width: parent.width\r
-                                    Rectangle {\r
-                                        anchors.fill: parent\r
-                                        anchors.margins: 1\r
-                                        color: parent.parent.hovered || parent.parent.visualFocus ? Style.lightHover : "transparent"\r
+                        contentItem: ScrollView {\r
+                            id: appsMenuScrollView\r
+                            ScrollBar.horizontal.policy: ScrollBar.AlwaysOff\r
+\r
+                            data: WheelHandler {\r
+                                target: appMenuScrollView.contentItem\r
+                            }\r
+                            ListView {\r
+                                id: appsMenuListView\r
+                                implicitHeight: contentHeight\r
+                                model: UserAppsModel\r
+                                interactive: true\r
+                                clip: true\r
+                                currentIndex: appsMenu.currentIndex\r
+                                delegate: MenuItem {\r
+                                    id: appEntry\r
+                                    anchors.left: parent.left\r
+                                    anchors.right: parent.right\r
+\r
+                                    text: model.appName\r
+                                    font.pixelSize: Style.topLinePixelSize\r
+                                    palette.windowText: Style.ncTextColor\r
+                                    icon.source: model.appIconUrl\r
+                                    icon.color: Style.ncTextColor\r
+                                    onTriggered: UserAppsModel.openAppUrl(appUrl)\r
+                                    hoverEnabled: true\r
+\r
+                                    background: Item {\r
+                                        height: parent.height\r
+                                        width: parent.width\r
+                                        Rectangle {\r
+                                            anchors.fill: parent\r
+                                            anchors.margins: 1\r
+                                            color: parent.parent.hovered || parent.parent.visualFocus ? Style.lightHover : "transparent"\r
+                                        }\r
                                     }\r
-                                }\r
 \r
-                                Accessible.role: Accessible.MenuItem\r
-                                Accessible.name: qsTr("Open %1 in browser").arg(appName)\r
-                                Accessible.onPressAction: appEntry.triggered()\r
+                                    Accessible.role: Accessible.MenuItem\r
+                                    Accessible.name: qsTr("Open %1 in browser").arg(model.appName)\r
+                                    Accessible.onPressAction: appEntry.triggered()\r
+                                }\r
                             }\r
                         }\r
                     }\r