Files
DankMaterialShell/quickshell/Modules/ControlCenter/Widgets/CcAppIcon.qml
T
2026-10-28 11:48:41 -04:00

48 lines
1.3 KiB
QML

import QtQuick
import Quickshell
import Quickshell.Widgets
import qs.Common
import qs.DCommon.Common as DCommon
import qs.DCommon.Widgets
Item {
id: root
property string appId: ""
property real iconSize: Theme.iconSize
readonly property int iconRequestSize: DCommon.Style.iconRasterSize(iconSize)
implicitWidth: iconSize
implicitHeight: iconSize
IconImage {
id: image
property string paintedFor: ""
readonly property bool holdsCurrentIcon: paintedFor !== "" && paintedFor === root.appId
readonly property bool showsFrame: status === Image.Ready || (holdsCurrentIcon && status === Image.Loading)
anchors.fill: parent
source: root.appId ? Paths.getAppIcon(root.appId, DesktopEntries.heuristicLookup(root.appId)) : ""
backer.sourceSize: Qt.size(root.iconRequestSize, root.iconRequestSize)
backer.retainWhileLoading: true
smooth: true
mipmap: true
asynchronous: true
visible: showsFrame
onStatusChanged: {
if (status !== Image.Ready)
return;
paintedFor = root.appId;
}
}
DIcon {
anchors.centerIn: parent
name: "apps"
size: root.iconSize
color: Theme.onSurfaceVariant
visible: image.status === Image.Error || image.source.toString() === ""
}
}