nosignal-shell/modules/bar/popouts/ActiveWindow.qml
2 * r + 2 * t 58adddbe0b bar: better active window popout
Add icon, style better
2025-06-03 17:48:12 +10:00

76 lines
2.1 KiB
QML

import "root:/widgets"
import "root:/services"
import "root:/utils"
import "root:/config"
import Quickshell
import Quickshell.Widgets
import Quickshell.Wayland
import QtQuick
Item {
id: root
implicitWidth: Hyprland.activeClient ? child.implicitWidth : 0
implicitHeight: child.implicitHeight
Column {
id: child
anchors.centerIn: parent
spacing: Appearance.spacing.normal
Row {
id: detailsRow
spacing: Appearance.spacing.normal
IconImage {
id: icon
implicitSize: details.implicitHeight
source: Quickshell.iconPath(DesktopEntries.applications.values.find(a => a.id === Hyprland.activeClient?.wmClass.toLowerCase())?.icon, "image-missing")
}
Column {
id: details
StyledText {
text: Hyprland.activeClient?.title ?? ""
font.pointSize: Appearance.font.size.normal
elide: Text.ElideRight
width: preview.implicitWidth - icon.implicitWidth - detailsRow.spacing
}
StyledText {
text: Hyprland.activeClient?.wmClass ?? ""
color: Colours.palette.m3onSurfaceVariant
elide: Text.ElideRight
width: preview.implicitWidth - icon.implicitWidth - detailsRow.spacing
}
}
}
ClippingWrapperRectangle {
color: "transparent"
radius: Appearance.rounding.small
ScreencopyView {
id: preview
captureSource: visible ? (ToplevelManager.toplevels.values.find(t => t.title === Hyprland.activeClient?.title) ?? null) : null
live: true
constraintSize.width: BarConfig.sizes.windowPreviewSize
constraintSize.height: BarConfig.sizes.windowPreviewSize
}
}
}
component Anim: NumberAnimation {
duration: Appearance.anim.durations.normal
easing.type: Easing.BezierSpline
easing.bezierCurve: Appearance.anim.curves.emphasized
}
}