nosignal-shell/modules/bar/popouts/ActiveWindow.qml
2026-04-22 22:47:18 +10:00

100 lines
2.7 KiB
QML

import QtQuick
import QtQuick.Layouts
import Quickshell.Wayland
import Quickshell.Widgets
import Caelestia.Config
import qs.components
import qs.services
import qs.utils
Item {
id: root
required property PopoutState popouts
implicitWidth: Hypr.activeToplevel ? child.implicitWidth : -Tokens.padding.extraLargeIncreased
implicitHeight: child.implicitHeight
Column {
id: child
anchors.centerIn: parent
spacing: Tokens.spacing.medium
RowLayout {
id: detailsRow
anchors.left: parent.left
anchors.right: parent.right
spacing: Tokens.spacing.medium
IconImage {
id: icon
asynchronous: true
Layout.alignment: Qt.AlignVCenter
implicitSize: details.implicitHeight
source: Icons.getAppIcon(Hypr.activeToplevel?.lastIpcObject.class ?? "", "image-missing")
}
ColumnLayout {
id: details
spacing: 0
Layout.fillWidth: true
StyledText {
Layout.fillWidth: true
text: Hypr.activeToplevel?.title ?? ""
font: Tokens.font.body.medium
elide: Text.ElideRight
}
StyledText {
Layout.fillWidth: true
text: Hypr.activeToplevel?.lastIpcObject.class ?? ""
color: Colours.palette.m3onSurfaceVariant
elide: Text.ElideRight
}
}
Item {
implicitWidth: expandIcon.implicitHeight + Tokens.padding.small
implicitHeight: expandIcon.implicitHeight + Tokens.padding.small
Layout.alignment: Qt.AlignVCenter
StateLayer {
radius: Tokens.rounding.large
onClicked: root.popouts.detachRequested("winfo")
}
MaterialIcon {
id: expandIcon
anchors.centerIn: parent
anchors.horizontalCenterOffset: font.pointSize * 0.05
text: "chevron_right"
font: Tokens.font.icon.large
}
}
}
ClippingWrapperRectangle {
color: "transparent"
radius: Tokens.rounding.medium
ScreencopyView {
id: preview
captureSource: Hypr.activeToplevel?.wayland ?? null // qmllint disable unresolved-type
live: visible
constraintSize.width: Tokens.sizes.bar.windowPreviewSize
constraintSize.height: Tokens.sizes.bar.windowPreviewSize
}
}
}
}