diff --git a/containments/homescreens/folio/CMakeLists.txt b/containments/homescreens/folio/CMakeLists.txt index 3841a9b2..a06c9db8 100644 --- a/containments/homescreens/folio/CMakeLists.txt +++ b/containments/homescreens/folio/CMakeLists.txt @@ -21,6 +21,7 @@ plasma_add_applet(org.kde.plasma.mobile.homescreen.folio qml/PipeWireThumbnail.qml qml/PlaceholderDelegate.qml qml/RunningAppsPanel.qml + qml/RunningAppsPanelButton.qml qml/WidgetDragItem.qml qml/config.qml CPP_SOURCES diff --git a/containments/homescreens/folio/qml/RunningAppsPanel.qml b/containments/homescreens/folio/qml/RunningAppsPanel.qml index b4c79685..538c7db1 100644 --- a/containments/homescreens/folio/qml/RunningAppsPanel.qml +++ b/containments/homescreens/folio/qml/RunningAppsPanel.qml @@ -79,53 +79,6 @@ Item { } } - component PanelIconButton: MouseArea { - id: button - - property string iconName - property string toolTipText - property bool checked: false - - signal triggered() - - width: Kirigami.Units.iconSizes.smallMedium + Kirigami.Units.smallSpacing * 2 - height: width - hoverEnabled: enabled - cursorShape: enabled ? Qt.PointingHandCursor : Qt.ArrowCursor - opacity: enabled ? 1 : 0.35 - - onClicked: button.triggered() - - Rectangle { - anchors.fill: parent - radius: Kirigami.Units.cornerRadius - color: button.containsPress - ? root.mixColor(Kirigami.Theme.backgroundColor, Kirigami.Theme.textColor, 0.16) - : button.checked - ? root.mixColor(Kirigami.Theme.backgroundColor, Kirigami.Theme.highlightColor, button.containsMouse ? 0.22 : 0.16) - : button.containsMouse - ? root.mixColor(Kirigami.Theme.backgroundColor, Kirigami.Theme.textColor, 0.08) - : "transparent" - - Behavior on color { - ColorAnimation { duration: Kirigami.Units.shortDuration; easing.type: Easing.OutCubic } - } - } - - Kirigami.Icon { - anchors.centerIn: parent - width: Kirigami.Units.iconSizes.small - height: width - source: button.iconName - active: button.containsMouse || button.checked - } - - PC3.ToolTip { - text: button.toolTipText - visible: button.containsMouse && button.toolTipText.length > 0 - } - } - TaskManager.VirtualDesktopInfo { id: virtualDesktopInfo } TaskManager.ActivityInfo { id: activityInfo } @@ -692,7 +645,7 @@ Item { Item { Layout.fillWidth: true } - PanelIconButton { + RunningAppsPanelButton { iconName: taskCard.pinned ? "emblem-favorite" : "window-pin" toolTipText: taskCard.pinned ? i18n("Pinned") : i18n("Pin to Dock") checked: taskCard.pinned @@ -700,20 +653,20 @@ Item { onTriggered: root.folio.FavouritesModel.addApplication(taskCard.storageId) } - PanelIconButton { + RunningAppsPanelButton { iconName: taskCard.minimizedTask ? "window-restore" : "window-minimize" toolTipText: taskCard.minimizedTask ? i18n("Restore") : i18n("Minimize") onTriggered: tasksModel.requestToggleMinimized(taskCard.modelIndex) } - PanelIconButton { + RunningAppsPanelButton { iconName: taskCard.maximizedTask ? "window-restore" : "window-maximize" toolTipText: taskCard.maximizedTask ? i18n("Restore") : i18n("Maximize") enabled: !taskCard.groupTask onTriggered: tasksModel.requestToggleMaximized(taskCard.modelIndex) } - PanelIconButton { + RunningAppsPanelButton { iconName: "window-close" toolTipText: taskCard.winIds.length > 1 ? i18n("Close All") : i18n("Close") onTriggered: tasksModel.requestClose(taskCard.modelIndex) diff --git a/containments/homescreens/folio/qml/RunningAppsPanelButton.qml b/containments/homescreens/folio/qml/RunningAppsPanelButton.qml new file mode 100644 index 00000000..18e9802f --- /dev/null +++ b/containments/homescreens/folio/qml/RunningAppsPanelButton.qml @@ -0,0 +1,62 @@ +// SPDX-FileCopyrightText: 2026 Marco Allegretti +// SPDX-License-Identifier: EUPL-1.2 + +import QtQuick + +import org.kde.kirigami as Kirigami +import org.kde.plasma.components 3.0 as PC3 + +MouseArea { + id: button + + property string iconName + property string toolTipText + property bool checked: false + + signal triggered() + + function _mix(base, overlay, ratio) { + return Qt.rgba( + base.r + (overlay.r - base.r) * ratio, + base.g + (overlay.g - base.g) * ratio, + base.b + (overlay.b - base.b) * ratio, + base.a + (overlay.a - base.a) * ratio) + } + + width: Kirigami.Units.iconSizes.smallMedium + Kirigami.Units.smallSpacing * 2 + height: width + hoverEnabled: enabled + cursorShape: enabled ? Qt.PointingHandCursor : Qt.ArrowCursor + opacity: enabled ? 1 : 0.35 + + onClicked: button.triggered() + + Rectangle { + anchors.fill: parent + radius: Kirigami.Units.cornerRadius + color: button.containsPress + ? button._mix(Kirigami.Theme.backgroundColor, Kirigami.Theme.textColor, 0.16) + : button.checked + ? button._mix(Kirigami.Theme.backgroundColor, Kirigami.Theme.highlightColor, button.containsMouse ? 0.22 : 0.16) + : button.containsMouse + ? button._mix(Kirigami.Theme.backgroundColor, Kirigami.Theme.textColor, 0.08) + : "transparent" + + Behavior on color { + ColorAnimation { duration: Kirigami.Units.shortDuration; easing.type: Easing.OutCubic } + } + } + + Kirigami.Icon { + anchors.centerIn: parent + width: Kirigami.Units.iconSizes.small + height: width + source: button.iconName + active: button.containsMouse || button.checked + } + + PC3.ToolTip { + text: button.toolTipText + visible: button.containsMouse && button.toolTipText.length > 0 + } +}