Merge branch 'main' into feat/llm-chat-tab
C++ / fmt (pull_request) Failing after 3s
C++ / build (pull_request) Failing after 9s
C++ / clang-tidy (pull_request) Failing after 9s
JS/TS / fmt (pull_request) Successful in 9s
JS/TS / lint (pull_request) Successful in 10s
Python / static (pull_request) Successful in 28s
Rust / build (pull_request) Successful in 49s
Python / verify (pull_request) Successful in 1m40s
Rust / fmt (pull_request) Successful in 27s
Rust / clippy (pull_request) Successful in 46s

This commit is contained in:
2026-09-30 17:59:14 +02:00
298 changed files with 18329 additions and 6057 deletions
+5 -5
View File
@@ -15,7 +15,7 @@ CustomListView {
property string displayText
readonly property string requestedState: stateForText(search.text)
required property SearchBar search
required property PersistentProperties visibilities
required property ScreenState screenState
function resultsForText(text: string): var {
switch (stateForText(text)) {
@@ -46,7 +46,7 @@ CustomListView {
}
function syncDisplayText(): void {
if (visibilities.launcher && requestedState === displayState)
if (screenState.launcher && requestedState === displayState)
displayText = search.text;
}
@@ -57,7 +57,7 @@ CustomListView {
preferredHighlightBegin: 0
preferredHighlightEnd: height
spacing: Tokens.spacing.small
state: visibilities.launcher ? requestedState : displayState
state: screenState.launcher ? requestedState : displayState
verticalLayoutDirection: ListView.BottomToTop
CustomScrollBar.vertical: CustomScrollBar {
@@ -245,7 +245,7 @@ CustomListView {
id: appItem
AppItem {
visibilities: root.visibilities
screenState: root.screenState
}
}
@@ -294,6 +294,6 @@ CustomListView {
root.syncDisplayText();
}
target: root.visibilities
target: root.screenState
}
}
+3 -3
View File
@@ -13,14 +13,14 @@ CarouselView {
readonly property var screen: QsWindow.window?.screen
required property SearchBar search
readonly property var values: Wallpapers.query(root.search.text.split(" ").slice(1).join(" "))
required property var visibilities
required property ScreenState screenState
currentIndex: {
const idx = Wallpapers.list.findIndex(w => w.path === Wallpapers.actualCurrent);
return idx >= 0 ? idx : 0;
}
delegateProperties: ({
visibilities: root.visibilities
screenState: root.screenState
})
focalWidth: Config.launcher.sizes.wallpaperWidth
glideDuration: 250
@@ -32,7 +32,7 @@ CarouselView {
return 0;
const barMargins = Config.bar.border * 2;
let margins = Math.round(screen.width / 6);
if (visibilities.utilities || visibilities.sidebar)
if (screenState.utilities || screenState.sidebar)
margins = Config.sidebar.sizes.width;
return screen.width - (barMargins + margins) * 2 - Config.bar.rounding * 4;
}
+7 -7
View File
@@ -15,7 +15,7 @@ Item {
readonly property int padding: Tokens.padding.largeIncreased / 4
required property var panels
readonly property int rounding: Tokens.rounding.largeIncreased
required property PersistentProperties visibilities
required property ScreenState screenState
implicitHeight: search.height + listWrapper.height + padding * 2
implicitWidth: listWrapper.width + padding * 2
@@ -38,7 +38,7 @@ Item {
panels: root.panels
rounding: root.rounding
search: search
visibilities: root.visibilities
screenState: root.screenState
}
}
@@ -55,7 +55,7 @@ Item {
Component.onCompleted: forceActiveFocus()
Keys.onDownPressed: list.currentList?.decrementCurrentIndex()
Keys.onEscapePressed: root.visibilities.launcher = false
Keys.onEscapePressed: root.screenState.launcher = false
Keys.onPressed: event => {
if (event.modifiers & Qt.ControlModifier) {
if (event.key === Qt.Key_J) {
@@ -81,7 +81,7 @@ Item {
if (Colors.scheme === "dynamic" && currentItem.modelData.path !== Wallpapers.actualCurrent)
Wallpapers.previewColorLock = true;
Wallpapers.setWallpaper(currentItem.modelData.path);
root.visibilities.launcher = false;
root.screenState.launcher = false;
} else if (text.startsWith(Config.launcher.actionPrefix)) {
if (text.startsWith(`${Config.launcher.actionPrefix}calc `))
currentItem.onClicked();
@@ -91,18 +91,18 @@ Item {
currentItem.modelData.onClicked(list.currentList);
} else {
Apps.launch(currentItem.modelData);
root.visibilities.launcher = false;
root.screenState.launcher = false;
}
}
}
Connections {
function onLauncherChanged(): void {
if (!root.visibilities.launcher)
if (!root.screenState.launcher)
search.text = "";
}
target: root.visibilities
target: root.screenState
}
}
}
+11 -15
View File
@@ -20,7 +20,7 @@ Item {
required property int rounding
required property SearchBar search
readonly property bool showWallpapers: search.text.startsWith(`${Config.launcher.actionPrefix}wallpaper `)
required property PersistentProperties visibilities
required property ScreenState screenState
anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter
@@ -28,7 +28,7 @@ Item {
state: showWallpapers ? "wallpapers" : "apps"
Behavior on implicitHeight {
enabled: root.visibilities.launcher
enabled: root.screenState.launcher
Anim {
duration: Tokens.anim.durations.small
@@ -36,7 +36,7 @@ Item {
}
}
Behavior on implicitWidth {
enabled: root.visibilities.launcher
enabled: root.screenState.launcher
Anim {
duration: Tokens.anim.durations.small
@@ -53,8 +53,7 @@ Item {
to: 0
}
PropertyAction {
}
PropertyAction {}
Anim {
duration: Tokens.anim.durations.small
@@ -99,7 +98,7 @@ Item {
sourceComponent: AppList {
search: root.search
visibilities: root.visibilities
screenState: root.screenState
}
}
@@ -115,7 +114,7 @@ Item {
sourceComponent: CarouselView {
panels: root.panels
search: root.search
visibilities: root.visibilities
screenState: root.screenState
}
}
@@ -130,18 +129,16 @@ Item {
spacing: Tokens.spacing.medium
Behavior on opacity {
Anim {
}
Anim {}
}
Behavior on scale {
Anim {
}
Anim {}
}
MaterialIcon {
anchors.verticalCenter: parent.verticalCenter
color: Colors.palette.m3onSurfaceVariant
font.pointSize: Tokens.font.size.extraLarge
fontStyle: Tokens.font.icon.extraLarge
text: root.state === "wallpapers" ? "wallpaper_slideshow" : "manage_search"
}
@@ -150,14 +147,13 @@ Item {
CustomText {
color: Colors.palette.m3onSurfaceVariant
font.pointSize: Tokens.font.size.larger
font.weight: 500
font: Tokens.font.body.builders.large.weight(Font.Medium).build()
text: root.state === "wallpapers" ? qsTr("No wallpapers found") : qsTr("No results")
}
CustomText {
color: Colors.palette.m3onSurfaceVariant
font.pointSize: Tokens.font.size.normal
font: Tokens.font.body.medium
text: root.state === "wallpapers" && Wallpapers.list.length === 0 ? qsTr("Try putting some wallpapers in %1").arg(Paths.shortenHome(Paths.wallsdir)) : qsTr("Try searching for something else")
}
}
+2 -3
View File
@@ -33,7 +33,7 @@ Item {
id: icon
anchors.verticalCenter: parent.verticalCenter
font.pointSize: Tokens.font.size.extraLarge
fontStyle: Tokens.font.icon.large
text: root.modelData?.icon ?? ""
}
@@ -47,7 +47,6 @@ Item {
CustomText {
id: name
font.pointSize: Tokens.font.size.normal
text: root.modelData?.name ?? ""
}
@@ -57,7 +56,7 @@ Item {
anchors.top: name.bottom
color: Colors.palette.m3outline
elide: Text.ElideRight
font.pointSize: Tokens.font.size.small
font: Tokens.font.body.small
text: root.modelData?.desc ?? ""
width: root.width - icon.width - Tokens.rounding.medium * 2
}
+3 -4
View File
@@ -12,7 +12,7 @@ Item {
id: root
required property DesktopEntry modelData
required property PersistentProperties visibilities
required property ScreenState screenState
anchors.left: parent?.left
anchors.right: parent?.right
@@ -23,7 +23,7 @@ Item {
onClicked: {
Apps.launch(root.modelData);
root.visibilities.launcher = false;
root.screenState.launcher = false;
}
}
@@ -51,7 +51,6 @@ Item {
CustomText {
id: name
font.pointSize: Tokens.font.size.normal
text: root.modelData?.name ?? ""
}
@@ -61,7 +60,7 @@ Item {
anchors.top: name.bottom
color: Colors.palette.m3outline
elide: Text.ElideRight
font.pointSize: Tokens.font.size.small
font: Tokens.font.body.small
text: (root.modelData?.comment || root.modelData?.genericName || root.modelData?.name) ?? ""
width: root.width - icon.width - Tokens.rounding.medium - Tokens.padding.medium * 2
}
+5 -5
View File
@@ -16,7 +16,7 @@ Item {
function onClicked(): void {
Quickshell.execDetached(["wl-copy", Qalculator.eval(math, false)]);
root.list.visibilities.launcher = false;
root.list.screenState.launcher = false;
}
anchors.left: parent?.left
@@ -40,7 +40,7 @@ Item {
MaterialIcon {
Layout.alignment: Qt.AlignVCenter
font.pointSize: Tokens.font.size.extraLarge
fontStyle: Tokens.font.icon.large
text: "function"
}
@@ -81,7 +81,7 @@ Item {
onClicked: {
Quickshell.execDetached(["app2unit", "--", ...Config.general.apps.terminal, "fish", "-C", `exec qalc -i '${root.math}'`]);
root.list.visibilities.launcher = false;
root.list.screenState.launcher = false;
}
}
@@ -92,7 +92,7 @@ Item {
anchors.rightMargin: Tokens.spacing.small
anchors.verticalCenter: parent.verticalCenter
color: Colors.palette.m3onTertiary
font.pointSize: Tokens.font.size.normal
font: Tokens.font.body.medium
opacity: stateLayer.containsMouse ? 1 : 0
text: qsTr("Open in calculator")
@@ -108,7 +108,7 @@ Item {
anchors.rightMargin: Tokens.padding.small
anchors.verticalCenter: parent.verticalCenter
color: Colors.palette.m3onTertiary
font.pointSize: Tokens.font.size.large
fontStyle: Tokens.font.icon.medium
text: "open_in_new"
}
}
+7 -7
View File
@@ -18,7 +18,7 @@ Item {
implicitHeight: Config.launcher.sizes.itemHeight
function onClicked(): void {
root.list.visibilities.launcher = false;
root.list.screenState.launcher = false;
if (root.modelData?.path)
Files.launch(["xdg-open", root.modelData.path]);
}
@@ -60,7 +60,7 @@ Item {
}
onClicked: {
root.list.visibilities.launcher = false;
root.list.screenState.launcher = false;
if (root.modelData?.path)
Files.showInFolder(root.modelData.path);
}
@@ -76,7 +76,7 @@ Item {
id: icon
anchors.verticalCenter: parent.verticalCenter
implicitSize: Tokens.font.size.extraLarge
implicitSize: Tokens.font.icon.extraLarge.pointSize
source: Quickshell.iconPath(root.modelData?.icon) ?? ""
visible: !root.modelData?.isImage
}
@@ -94,14 +94,14 @@ Item {
}
sourceComponent: LoadingIndicator {
color: Colors.palette.m3primaryContainer
implicitSize: Tokens.font.size.extraLarge
implicitSize: Tokens.font.icon.extraLarge.pointSize
}
}
FadeImage {
id: image
property int implicitSize: Tokens.font.size.extraLarge
property int implicitSize: Tokens.font.icon.extraLarge.pointSize
width: implicitSize
fillMode: Image.PreserveAspectFit
@@ -120,7 +120,7 @@ Item {
CustomText {
id: name
font.pointSize: Tokens.font.size.normal
font: Tokens.font.body.medium
text: root.modelData?.name ?? ""
elide: Text.ElideRight
width: root.width - icon.width - openLocation.implicitWidth - openLocation.anchors.rightMargin - Tokens.spacing.medium - Tokens.rounding.medium * 2
@@ -132,7 +132,7 @@ Item {
anchors.top: name.bottom
color: Colors.palette.m3outline
elide: Text.ElideRight
font.pointSize: Tokens.font.size.small
font: Tokens.font.body.small
text: root.modelData?.path ?? ""
width: root.width - icon.width - openLocation.implicitWidth - openLocation.anchors.rightMargin - Tokens.spacing.medium - Tokens.rounding.medium * 2
}
+3 -4
View File
@@ -32,7 +32,7 @@ Item {
id: icon
anchors.verticalCenter: parent.verticalCenter
font.pointSize: Tokens.font.size.extraLarge
fontStyle: Tokens.font.icon.large
text: root.modelData?.icon ?? ""
}
@@ -44,7 +44,6 @@ Item {
width: parent.width - icon.width - anchors.leftMargin - (current.active ? current.width + Tokens.spacing.medium : 0)
CustomText {
font.pointSize: Tokens.font.size.normal
text: root.modelData?.name ?? ""
}
@@ -53,7 +52,7 @@ Item {
anchors.right: parent.right
color: Colors.palette.m3outline
elide: Text.ElideRight
font.pointSize: Tokens.font.size.small
font: Tokens.font.body.small
text: root.modelData?.description ?? ""
}
}
@@ -67,7 +66,7 @@ Item {
sourceComponent: MaterialIcon {
color: Colors.palette.m3onSurfaceVariant
font.pointSize: Tokens.font.size.large
fontStyle: Tokens.font.icon.large
text: "check"
}
}
+2 -3
View File
@@ -12,7 +12,7 @@ Item {
required property var modelData // FileSystemEntry-like {path, relativePath}
required property real tileHeight
required property real tileWidth
required property PersistentProperties visibilities
required property ScreenState screenState
signal requestActivate
@@ -32,8 +32,7 @@ Item {
MaterialIcon {
anchors.centerIn: parent
color: Colors.tPalette.m3outline
font.pointSize: Tokens.font.size.extraLarge * 2
font.weight: 600
fontStyle: Tokens.font.icon.builders.extraLarge.scale(2).weight(Font.DemiBold).build()
text: "image"
}
+2 -2
View File
@@ -42,10 +42,10 @@ Searcher {
if (command[0] === "autocomplete" && command.length > 1) {
list.search.text = `${Config.launcher.actionPrefix}${command[1]} `;
} else if (command[0] === "setMode" && command.length > 1) {
list.visibilities.launcher = false;
list.screenState.launcher = false;
Colors.setMode(command[1]);
} else {
list.visibilities.launcher = false;
list.screenState.launcher = false;
Quickshell.execDetached(command);
}
}
+1 -1
View File
@@ -79,7 +79,7 @@ Searcher {
required property string variant
function onClicked(list: AppList): void {
list.visibilities.launcher = false;
list.screenState.launcher = false;
Quickshell.execDetached(["zshell-cli", "scheme", "generate", "--scheme", variant]);
Config.colors.schemeType = variant;
}
+4 -4
View File
@@ -12,7 +12,7 @@ Item {
property int contentHeight
readonly property real maxHeight: {
let max = screen.height - Tokens.spacing.largeIncreased * 2;
if (visibilities.resources && panels.resourcesWrapper.x + panels.resourcesWrapper.width > root.x)
if (screenState.resources && panels.resourcesWrapper.x + panels.resourcesWrapper.width > root.x)
max -= panels.resources.nonAnimHeight;
if (panels.popouts.hasCurrent)
if (panels.popouts.current?.x + panels.popouts.current?.width > root.x && panels.popouts.current?.x < root.x + root.width)
@@ -22,8 +22,8 @@ Item {
property real offsetScale: shouldBeActive ? 0 : 1
required property var panels
required property ShellScreen screen
readonly property bool shouldBeActive: visibilities.launcher
required property PersistentProperties visibilities
readonly property bool shouldBeActive: screenState.launcher
required property ScreenState screenState
anchors.bottomMargin: (-implicitHeight - 5) * offsetScale
implicitHeight: content.implicitHeight
@@ -57,7 +57,7 @@ Item {
sourceComponent: Content {
maxHeight: root.maxHeight
panels: root.panels
visibilities: root.visibilities
screenState: root.screenState
}
}
}