pragma ComponentBehavior: Bound import QtQuick import QtQuick.Layouts import Quickshell import Quickshell.Hyprland import Quickshell.Wayland import Caelestia.Config import qs.components import qs.services Item { id: root required property ShellScreen screen required property HyprlandToplevel client Layout.preferredWidth: preview.implicitWidth + Tokens.padding.extraLargeIncreased Layout.fillHeight: true StyledClippingRect { id: preview anchors.horizontalCenter: parent.horizontalCenter anchors.top: parent.top anchors.bottom: label.top anchors.topMargin: Tokens.padding.large anchors.bottomMargin: Tokens.spacing.medium implicitWidth: view.implicitWidth color: Colours.tPalette.m3surfaceContainer radius: Tokens.rounding.medium Loader { asynchronous: true anchors.centerIn: parent active: !root.client sourceComponent: ColumnLayout { spacing: 0 MaterialIcon { Layout.alignment: Qt.AlignHCenter text: "web_asset_off" color: Colours.palette.m3outline fontStyle: Tokens.font.icon.builder.size(Tokens.font.icon.extraLarge.pointSize * 3).build() } StyledText { Layout.alignment: Qt.AlignHCenter text: qsTr("No active client") color: Colours.palette.m3outline font: Tokens.font.body.builders.large.size(28).weight(500).build() } StyledText { Layout.alignment: Qt.AlignHCenter text: qsTr("Try switching to a window") color: Colours.palette.m3outline font: Tokens.font.body.large } } } ScreencopyView { id: view anchors.centerIn: parent captureSource: root.client?.wayland ?? null // qmllint disable unresolved-type live: true constraintSize.width: root.client ? parent.height * Math.min(root.screen.width / root.screen.height, root.client?.lastIpcObject.size[0] / root.client?.lastIpcObject.size[1]) : parent.height constraintSize.height: parent.height } } StyledText { id: label anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: parent.bottom anchors.bottomMargin: Tokens.padding.large animate: true text: { const client = root.client; if (!client) return qsTr("No active client"); const mon = client.monitor; return qsTr("%1 on monitor %2 at %3, %4").arg(client.title).arg(mon.name).arg(client.lastIpcObject.at[0]).arg(client.lastIpcObject.at[1]); } } }