From 2a171f3964bae955dca98e023cc24294a500d527 Mon Sep 17 00:00:00 2001 From: Marco Allegretti Date: Mon, 20 Apr 2026 10:32:30 +0200 Subject: [PATCH] Fix overlay rendering, hover blink, and dead-end state MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The cover art tile used layer.effect with a plain Item instead of a ShaderEffect, which broke the overlay rendering. Replace with a clipped Rectangle wrapper. Remove Behavior on color from the grid delegate background — GridView currentIndex changes on hover caused the highlight color to flash visibly between cells. Fix dangling taskList reference in the gamepad ButtonA and DPadDown handlers (taskList lives inside RunningGamesView). Auto-reopen Game Center when the last window closes in gaming mode so the user is never stranded on a bare wallpaper. --- .../folio/qml/gaming/GameCenterOverlay.qml | 32 +++++++------------ containments/homescreens/folio/qml/main.qml | 12 +++++++ 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/containments/homescreens/folio/qml/gaming/GameCenterOverlay.qml b/containments/homescreens/folio/qml/gaming/GameCenterOverlay.qml index 61d8436c..c3b226d2 100644 --- a/containments/homescreens/folio/qml/gaming/GameCenterOverlay.qml +++ b/containments/homescreens/folio/qml/gaming/GameCenterOverlay.qml @@ -77,7 +77,7 @@ Window { } break case GamingShell.GamepadManager.ButtonDPadDown: - if (taskList.activeFocus || runningGames.activeFocus) { + if (runningGames.activeFocus) { grid.forceActiveFocus() } else if (grid.activeFocus) { grid.moveCurrentIndexDown() @@ -93,8 +93,6 @@ Window { if (grid.activeFocus && grid.currentItem) { GamingShell.GameLauncherProvider.launch(grid.currentIndex) root.gameStarted() - } else if (taskList.activeFocus && taskList.currentItem) { - taskList.currentItem.activate() } break case GamingShell.GamepadManager.ButtonB: @@ -338,7 +336,6 @@ Window { ? Kirigami.Theme.highlightColor : (parent.hovered ? Kirigami.Theme.hoverColor : "transparent") radius: Kirigami.Units.cornerRadius - Behavior on color { ColorAnimation { duration: Kirigami.Units.shortDuration } } } contentItem: Item { @@ -348,26 +345,19 @@ Window { spacing: 0 visible: hasArt - Image { + Rectangle { Layout.fillWidth: true Layout.fillHeight: true - source: hasArt ? "file://" + artwork : "" - fillMode: Image.PreserveAspectCrop - smooth: true - asynchronous: true + radius: Kirigami.Units.cornerRadius + clip: true + color: "transparent" - // Rounded top corners via layer - layer.enabled: true - layer.effect: Item { - Rectangle { - anchors.fill: parent - radius: Kirigami.Units.cornerRadius - } - } - - scale: parent.parent.parent.isCurrent ? 1.03 : 1.0 - Behavior on scale { - NumberAnimation { duration: Kirigami.Units.shortDuration; easing.type: Easing.InOutQuad } + Image { + anchors.fill: parent + source: hasArt ? "file://" + artwork : "" + fillMode: Image.PreserveAspectCrop + smooth: true + asynchronous: true } } diff --git a/containments/homescreens/folio/qml/main.qml b/containments/homescreens/folio/qml/main.qml index d1b7ffbc..2e0744f9 100644 --- a/containments/homescreens/folio/qml/main.qml +++ b/containments/homescreens/folio/qml/main.qml @@ -107,6 +107,18 @@ ContainmentItem { screenGeometry: Plasmoid.containment.screenGeometry } + // In gaming mode, reopen Game Center when the last window goes away + // so the user is never stranded on a bare wallpaper. + Connections { + target: windowMaximizedTracker + enabled: ShellSettings.Settings.gamingModeEnabled + function onShowingWindowChanged() { + if (!windowMaximizedTracker.showingWindow && !root.gameCenterOpen) { + root.gameCenterOpen = true + } + } + } + // Close app drawer when a new window appears Connections { target: WindowPlugin.WindowUtil