From 0807633e766140b8cbc830b9ccc38c90b2e3e546 Mon Sep 17 00:00:00 2001 From: ItsLemmy Date: Sat, 4 Oct 2025 08:07:23 -0400 Subject: [PATCH 1/4] Overview: no unloading so it's always available on demande + memory optimizations. --- Modules/Background/Overview.qml | 62 +++++++++++---------------------- 1 file changed, 21 insertions(+), 41 deletions(-) diff --git a/Modules/Background/Overview.qml b/Modules/Background/Overview.qml index 35f12294..34e673e6 100644 --- a/Modules/Background/Overview.qml +++ b/Modules/Background/Overview.qml @@ -13,7 +13,7 @@ Variants { required property ShellScreen modelData property string wallpaper: "" - active: CompositorService.isNiri && Settings.data.wallpaper.enabled && modelData && CompositorService.backend?.overviewActive + active: CompositorService.isNiri && Settings.data.wallpaper.enabled && modelData sourceComponent: PanelWindow { id: panelWindow @@ -59,48 +59,28 @@ Variants { left: true } - // Wrap everything in an Item with opacity animation - Item { - id: contentContainer + Image { + id: bgImage anchors.fill: parent - opacity: 0 + fillMode: Image.PreserveAspectCrop + source: wallpaper + smooth: true + mipmap: false + cache: false + asynchronous: true + // Image is heavily blurred, so might as well save a lot of memory here. + sourceSize: Qt.size(1280, 720) + } - Behavior on opacity { - NumberAnimation { - duration: 500 - easing.type: Easing.OutCubic - } - } - - Component.onCompleted: { - opacity = 1 - } - - Image { - id: bgImage - anchors.fill: parent - fillMode: Image.PreserveAspectCrop - source: wallpaper - smooth: true - mipmap: false - cache: false - asynchronous: true - - } - - MultiEffect { - anchors.fill: parent - source: bgImage - autoPaddingEnabled: false - blurEnabled: true - blur: 0.48 - blurMax: 128 - } - - Rectangle { - anchors.fill: parent - color: Settings.data.colorSchemes.darkMode ? Qt.alpha(Color.mSurface, Style.opacityMedium) : Qt.alpha(Color.mOnSurface, Style.opacityMedium) - } + MultiEffect { + anchors.fill: parent + source: bgImage + autoPaddingEnabled: false + blurEnabled: true + blur: 0.48 + blurMax: 128 + colorization: Style.opacityMedium + colorizationColor: Settings.data.colorSchemes.darkMode ? Color.mSurface : Color.mOnSurface } } } From f348505d2ae04781be5e39df8c1fa9f5dae1c747 Mon Sep 17 00:00:00 2001 From: ItsLemmy Date: Sat, 4 Oct 2025 08:16:32 -0400 Subject: [PATCH 2/4] Wallpaper: always resize images to the screen size to improve memory usage. --- Modules/Background/Background.qml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Modules/Background/Background.qml b/Modules/Background/Background.qml index e27a7537..77522f26 100644 --- a/Modules/Background/Background.qml +++ b/Modules/Background/Background.qml @@ -105,6 +105,7 @@ Variants { visible: false cache: false asynchronous: true + sourceSize: Qt.size(modelData.width, modelData.height) onStatusChanged: { if (status === Image.Error) { Logger.warn("Current wallpaper failed to load:", source) @@ -120,6 +121,7 @@ Variants { visible: false cache: false asynchronous: true + sourceSize: Qt.size(modelData.width, modelData.height) onStatusChanged: { if (status === Image.Error) { Logger.warn("Next wallpaper failed to load:", source) From f7e1fe4e0f9a9818348edc2d4e8f250467f240d7 Mon Sep 17 00:00:00 2001 From: ItsLemmy Date: Sat, 4 Oct 2025 08:56:05 -0400 Subject: [PATCH 3/4] Bar: minor memory optimization --- Modules/Bar/Bar.qml | 2 ++ Modules/Bar/Extras/BarWidgetLoader.qml | 22 +++++++++++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/Modules/Bar/Bar.qml b/Modules/Bar/Bar.qml index 6ea66496..dd6d950c 100644 --- a/Modules/Bar/Bar.qml +++ b/Modules/Bar/Bar.qml @@ -79,6 +79,8 @@ Variants { MouseArea { anchors.fill: parent acceptedButtons: Qt.RightButton + hoverEnabled: false + preventStealing: true onClicked: function (mouse) { if (mouse.button === Qt.RightButton) { // Important to pass the screen here so we get the right widget for the actual bar that was clicked. diff --git a/Modules/Bar/Extras/BarWidgetLoader.qml b/Modules/Bar/Extras/BarWidgetLoader.qml index 358a42ef..8b1b6b47 100644 --- a/Modules/Bar/Extras/BarWidgetLoader.qml +++ b/Modules/Bar/Extras/BarWidgetLoader.qml @@ -8,12 +8,18 @@ Item { property string widgetId: "" property var widgetProps: ({}) - property string screenName: widgetProps.screen ? widgetProps.screen.name : "" - property string section: widgetProps.section || "" - property int sectionIndex: widgetProps.sectionWidgetIndex || 0 + property string screenName: widgetProps && widgetProps.screen ? widgetProps.screen.name : "" + property string section: widgetProps && widgetProps.section || "" + property int sectionIndex: widgetProps && widgetProps.sectionWidgetIndex || 0 + + + // Don't reserve space unless the loaded widget is really visible + implicitWidth: getImplicitSize(loader.item, "implicitWidth") + implicitHeight: getImplicitSize(loader.item, "implicitHeight") Connections { target: ScalingService + enabled: loader.item && (loader.item.screen !== undefined) function onScaleChanged(aScreenName, scale) { if (loader.item && loader.item.screen && aScreenName === screenName) { loader.item['scaling'] = scale @@ -21,15 +27,15 @@ Item { } } - // Don't reserve space unless the loaded widget is really visible - implicitWidth: loader.item ? loader.item.visible ? loader.item.implicitWidth : 0 : 0 - implicitHeight: loader.item ? loader.item.visible ? loader.item.implicitHeight : 0 : 0 + function getImplicitSize(item, prop) { + return (item && item.visible) ? item[prop] : 0 + } Loader { id: loader - anchors.fill: parent active: widgetId !== "" + asynchronous: false sourceComponent: { if (!active) { return null @@ -64,6 +70,8 @@ Item { if (screenName && section) { BarService.unregisterWidget(screenName, section, widgetId, sectionIndex) } + // Explicitly clear references + widgetProps = null } } From 6fee2ef8265bf40581ce044e4875d039fe7875a9 Mon Sep 17 00:00:00 2001 From: ItsLemmy Date: Sat, 4 Oct 2025 09:22:16 -0400 Subject: [PATCH 4/4] MediaCard: always centered --- Modules/ControlCenter/Cards/MediaCard.qml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Modules/ControlCenter/Cards/MediaCard.qml b/Modules/ControlCenter/Cards/MediaCard.qml index be99ef13..cf3b447e 100644 --- a/Modules/ControlCenter/Cards/MediaCard.qml +++ b/Modules/ControlCenter/Cards/MediaCard.qml @@ -50,6 +50,12 @@ NBox { visible: MediaService.currentPlayer && MediaService.canPlay spacing: Style.marginM * scaling + Layout.alignment: Qt.AlignHCenter + + Item { + Layout.fillWidth: true + Layout.fillHeight: true + } // Player selector using NContextMenu Rectangle { @@ -341,5 +347,10 @@ NBox { Layout.alignment: Qt.AlignHCenter } } + + Item { + Layout.fillWidth: true + Layout.fillHeight: true + } } -} +} \ No newline at end of file