summaryrefslogtreecommitdiff
path: root/modules/controlcenter/launcher
diff options
context:
space:
mode:
Diffstat (limited to 'modules/controlcenter/launcher')
-rw-r--r--modules/controlcenter/launcher/LauncherPane.qml106
1 files changed, 60 insertions, 46 deletions
diff --git a/modules/controlcenter/launcher/LauncherPane.qml b/modules/controlcenter/launcher/LauncherPane.qml
index 0cb223b..71d1d6f 100644
--- a/modules/controlcenter/launcher/LauncherPane.qml
+++ b/modules/controlcenter/launcher/LauncherPane.qml
@@ -300,73 +300,87 @@ RowLayout {
}
}
- StyledListView {
- id: appsListView
+ Loader {
+ id: appsListLoader
Layout.fillWidth: true
Layout.fillHeight: true
+ asynchronous: true
+ active: {
+ // Lazy load: activate when left pane is loaded
+ // The ListView will load asynchronously, and search will work because filteredApps
+ // is updated regardless of whether the ListView is loaded
+ return leftLauncherLoader.item !== null;
+ }
- model: root.filteredApps
- spacing: Appearance.spacing.small / 2
- clip: true
+ sourceComponent: StyledListView {
+ id: appsListView
+
+ Layout.fillWidth: true
+ Layout.fillHeight: true
- StyledScrollBar.vertical: StyledScrollBar {
- flickable: parent
- }
+ model: root.filteredApps
+ spacing: Appearance.spacing.small / 2
+ clip: true
+
+ StyledScrollBar.vertical: StyledScrollBar {
+ flickable: parent
+ }
- delegate: StyledRect {
- required property var modelData
+ delegate: StyledRect {
+ required property var modelData
- width: parent ? parent.width : 0
+ width: parent ? parent.width : 0
- readonly property bool isSelected: root.selectedApp === modelData
+ readonly property bool isSelected: root.selectedApp === modelData
- color: isSelected ? Colours.layer(Colours.palette.m3surfaceContainer, 2) : "transparent"
- radius: Appearance.rounding.normal
+ color: isSelected ? Colours.layer(Colours.palette.m3surfaceContainer, 2) : "transparent"
+ radius: Appearance.rounding.normal
- opacity: 0
+ opacity: 0
- Behavior on opacity {
- NumberAnimation {
- duration: 1000
- easing.type: Easing.OutCubic
+ Behavior on opacity {
+ NumberAnimation {
+ duration: 1000
+ easing.type: Easing.OutCubic
+ }
}
- }
- Component.onCompleted: {
- opacity = 1;
- }
+ Component.onCompleted: {
+ opacity = 1;
+ }
- StateLayer {
- function onClicked(): void {
- root.selectedApp = modelData;
+ StateLayer {
+ function onClicked(): void {
+ root.selectedApp = modelData;
+ }
}
- }
- RowLayout {
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.verticalCenter: parent.verticalCenter
- anchors.margins: Appearance.padding.normal
+ RowLayout {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.margins: Appearance.padding.normal
- spacing: Appearance.spacing.normal
+ spacing: Appearance.spacing.normal
- IconImage {
- Layout.alignment: Qt.AlignVCenter
- implicitSize: 32
- source: {
- const entry = modelData.entry;
- return entry ? Quickshell.iconPath(entry.icon, "image-missing") : "image-missing";
+ IconImage {
+ Layout.alignment: Qt.AlignVCenter
+ implicitSize: 32
+ source: {
+ const entry = modelData.entry;
+ return entry ? Quickshell.iconPath(entry.icon, "image-missing") : "image-missing";
+ }
}
- }
- StyledText {
- Layout.fillWidth: true
- text: modelData.name || modelData.entry?.name || qsTr("Unknown")
- font.pointSize: Appearance.font.size.normal
+ StyledText {
+ Layout.fillWidth: true
+ text: modelData.name || modelData.entry?.name || qsTr("Unknown")
+ font.pointSize: Appearance.font.size.normal
+ }
}
- }
- implicitHeight: 40
+ implicitHeight: 40
+ }
}
}
}