From 9823c6629900a8a3513a98b18aef7695248381c6 Mon Sep 17 00:00:00 2001 From: zach Date: Sat, 15 Aug 2026 14:18:00 +0200 Subject: [PATCH] restructure bar components layout --- Drawers/Drawers.qml | 4 - Drawers/Interactions.qml | 4 +- Drawers/Panels.qml | 4 +- Helpers/Icons.qml | 53 +++++- Modules/Bar/Bar.qml | 6 +- Modules/Bar/BarLoader.qml | 6 +- Modules/{ => Bar/Components}/Clock.qml | 2 +- .../{ => Bar/Components}/HyprsunsetWidget.qml | 0 Modules/{ => Bar/Components}/MediaWidget.qml | 0 .../Components}/NetworkWidget.qml | 0 Modules/{ => Bar/Components}/NotifBell.qml | 1 + Modules/{ => Bar/Components}/Resource.qml | 0 Modules/{ => Bar/Components}/Resources.qml | 0 .../Components}/StatusIcons.qml | 4 +- .../Components/StatusIcons}/AudioWidget.qml | 0 .../Components/StatusIcons}/MicWidget.qml | 0 .../Components/StatusIcons}/UPowerWidget.qml | 0 .../Components/Tray}/TrayItem.qml | 3 +- .../{SysTray => Bar/Components}/TrayIcons.qml | 3 +- .../Components}/UpdatesWidget.qml | 0 Modules/{ => Bar/Components}/WindowTitle.qml | 4 +- Modules/{ => Bar/Components}/Workspaces.qml | 4 +- .../Workspaces}/AnimatedTabIndexPair.qml | 0 .../{SysTray => Bar}/Popouts/AudioPopout.qml | 0 Modules/{ => Bar/Popouts}/ClipWrapper.qml | 0 Modules/{ => Bar/Popouts}/Content.qml | 4 - .../Popouts}/NetworkPopout.qml | 0 Modules/{ => Bar/Popouts}/PopoutState.qml | 0 .../Popouts/TrayMenuPopout.qml | 0 .../{SysTray => Bar}/Popouts/UPowerPopout.qml | 0 .../Popouts}/UpdatesPopout.qml | 0 Modules/{ => Bar/Popouts}/Wrapper.qml | 0 Modules/SysTray/TrayWidget.qml | 159 ------------------ Modules/WSOverview/OverviewPopout.qml | 86 ---------- 34 files changed, 69 insertions(+), 278 deletions(-) rename Modules/{ => Bar/Components}/Clock.qml (98%) rename Modules/{ => Bar/Components}/HyprsunsetWidget.qml (100%) rename Modules/{ => Bar/Components}/MediaWidget.qml (100%) rename Modules/{Network => Bar/Components}/NetworkWidget.qml (100%) rename Modules/{ => Bar/Components}/NotifBell.qml (97%) rename Modules/{ => Bar/Components}/Resource.qml (100%) rename Modules/{ => Bar/Components}/Resources.qml (100%) rename Modules/{SysTray => Bar/Components}/StatusIcons.qml (98%) rename Modules/{SysTray/Widgets => Bar/Components/StatusIcons}/AudioWidget.qml (100%) rename Modules/{SysTray/Widgets => Bar/Components/StatusIcons}/MicWidget.qml (100%) rename Modules/{SysTray/Widgets => Bar/Components/StatusIcons}/UPowerWidget.qml (100%) rename Modules/{SysTray => Bar/Components/Tray}/TrayItem.qml (98%) rename Modules/{SysTray => Bar/Components}/TrayIcons.qml (95%) rename Modules/{Updates => Bar/Components}/UpdatesWidget.qml (100%) rename Modules/{ => Bar/Components}/WindowTitle.qml (94%) rename Modules/{ => Bar/Components}/Workspaces.qml (98%) rename {Components => Modules/Bar/Components/Workspaces}/AnimatedTabIndexPair.qml (100%) rename Modules/{SysTray => Bar}/Popouts/AudioPopout.qml (100%) rename Modules/{ => Bar/Popouts}/ClipWrapper.qml (100%) rename Modules/{ => Bar/Popouts}/Content.qml (95%) rename Modules/{Network => Bar/Popouts}/NetworkPopout.qml (100%) rename Modules/{ => Bar/Popouts}/PopoutState.qml (100%) rename Modules/{SysTray => Bar}/Popouts/TrayMenuPopout.qml (100%) rename Modules/{SysTray => Bar}/Popouts/UPowerPopout.qml (100%) rename Modules/{Updates => Bar/Popouts}/UpdatesPopout.qml (100%) rename Modules/{ => Bar/Popouts}/Wrapper.qml (100%) delete mode 100644 Modules/SysTray/TrayWidget.qml delete mode 100644 Modules/WSOverview/OverviewPopout.qml diff --git a/Drawers/Drawers.qml b/Drawers/Drawers.qml index 490bc0e..7a38a43 100644 --- a/Drawers/Drawers.qml +++ b/Drawers/Drawers.qml @@ -27,10 +27,6 @@ Variants { } Connections { - function onConfigDashboardPositionChanged(): void { - Qt.callLater(scope.rebuild); - } - function onConfigPositionChanged(): void { Qt.callLater(scope.rebuild); } diff --git a/Drawers/Interactions.qml b/Drawers/Interactions.qml index 581201e..12d02ba 100644 --- a/Drawers/Interactions.qml +++ b/Drawers/Interactions.qml @@ -3,7 +3,7 @@ import QtQuick import qs.Components import ZShell.Config import qs.Helpers -import qs.Modules as BarPopouts +import qs.Modules.Bar.Popouts Item { id: root @@ -15,7 +15,7 @@ Item { required property EdgeGeometry geometry property bool osdShortcutActive required property Panels panels - required property BarPopouts.Wrapper popouts + required property Wrapper popouts required property ShellScreen screen property bool singleGestureTriggered: false property bool utilitiesShortcutActive diff --git a/Drawers/Panels.qml b/Drawers/Panels.qml index b24a048..630582e 100644 --- a/Drawers/Panels.qml +++ b/Drawers/Panels.qml @@ -1,7 +1,7 @@ import Quickshell import QtQuick import qs.Components -import qs.Modules as Modules +import qs.Modules.Bar.Popouts as Popouts import qs.Modules.Notifications as Notifications import qs.Modules.Notifications.Sidebar as Sidebar import qs.Modules.Notifications.Sidebar.Utils as Utils @@ -100,7 +100,7 @@ Item { visibilities: root.visibilities } - Modules.ClipWrapper { + Popouts.ClipWrapper { id: popouts borderThickness: root.borderThickness diff --git a/Helpers/Icons.qml b/Helpers/Icons.qml index 2599449..03be431 100644 --- a/Helpers/Icons.qml +++ b/Helpers/Icons.qml @@ -1,9 +1,8 @@ pragma Singleton -import ZShell.Config +import QtQuick import Quickshell import Quickshell.Services.Notifications -import QtQuick Singleton { id: root @@ -95,6 +94,15 @@ Singleton { return Quickshell.iconPath(icon); } + function getBatteryIcon(percentage: real, charging = false): string { + if (percentage === 1) + return charging ? "battery_charging_full" : "battery_full"; + let level = Math.floor(percentage * 7); + if (charging && (level === 4 || level === 1)) + level--; + return charging ? `battery_charging_${(level + 3) * 10}` : `battery_${level}_bar`; + } + function getBluetoothIcon(icon: string): string { if (icon.includes("headset") || icon.includes("headphones")) return "headphones"; @@ -168,6 +176,32 @@ Singleton { return "chat"; } + function getSpecialWsIcon(name: string): string { + name = name.toLowerCase().slice("special:".length); + + if (name === "special") + return "star"; + if (name === "communication") + return "forum"; + if (name === "music") + return "music_cast"; + if (name === "todo") + return "checklist"; + if (name === "sysmon") + return "monitor_heart"; + return name[0].toUpperCase(); + } + + function getTrayIcon(id: string, icon: string): string { + if (icon.includes("?path=")) { + const [name, path] = icon.split("?path="); + const file = name.slice(name.lastIndexOf("/") + 1); + const themed = Quickshell.iconPath(file, true); + icon = themed ? themed : Qt.resolvedUrl(`${path}/${file}`); + } + return icon; + } + function getVolumeIcon(volume: real, isMuted: bool): string { if (isMuted) return "no_sound"; @@ -183,4 +217,19 @@ Singleton { return weatherIcons[code]; return "air"; } + + function matchIconConfig(name: string, iconConfig: var): bool { + if (!iconConfig.icon) + return false; + + if (iconConfig.regex) { + const re = new RegExp(iconConfig.regex, iconConfig.flags ?? ""); + if (re.test(name)) + return true; + } else if (iconConfig.name === name) { + return true; + } + + return false; + } } diff --git a/Modules/Bar/Bar.qml b/Modules/Bar/Bar.qml index 3ff2e1b..d396f8f 100644 --- a/Modules/Bar/Bar.qml +++ b/Modules/Bar/Bar.qml @@ -3,11 +3,9 @@ pragma ComponentBehavior: Bound import Quickshell import QtQuick import QtQuick.Layouts -import qs.Modules import ZShell.Config -import qs.Modules.SysTray -import qs.Modules.Network -import qs.Modules.Updates +import qs.Modules.Bar.Components +import qs.Modules.Bar.Popouts GridLayout { id: root diff --git a/Modules/Bar/BarLoader.qml b/Modules/Bar/BarLoader.qml index ff7f0a2..6429b13 100644 --- a/Modules/Bar/BarLoader.qml +++ b/Modules/Bar/BarLoader.qml @@ -3,12 +3,8 @@ pragma ComponentBehavior: Bound import Quickshell import QtQuick import ZShell.Config +import qs.Modules.Bar.Popouts import qs.Components -import qs.Modules -import qs.Helpers -import qs.Modules.SysTray -import qs.Modules.SysTray.Widgets -import qs.Modules.Network Item { id: root diff --git a/Modules/Clock.qml b/Modules/Bar/Components/Clock.qml similarity index 98% rename from Modules/Clock.qml rename to Modules/Bar/Components/Clock.qml index 0626ed9..3c86067 100644 --- a/Modules/Clock.qml +++ b/Modules/Bar/Components/Clock.qml @@ -2,7 +2,7 @@ import Quickshell import QtQuick import QtQuick.Layouts import ZShell.Config -import qs.Modules +import qs.Modules.Bar.Popouts import qs.Helpers import qs.Components import qs.Services diff --git a/Modules/HyprsunsetWidget.qml b/Modules/Bar/Components/HyprsunsetWidget.qml similarity index 100% rename from Modules/HyprsunsetWidget.qml rename to Modules/Bar/Components/HyprsunsetWidget.qml diff --git a/Modules/MediaWidget.qml b/Modules/Bar/Components/MediaWidget.qml similarity index 100% rename from Modules/MediaWidget.qml rename to Modules/Bar/Components/MediaWidget.qml diff --git a/Modules/Network/NetworkWidget.qml b/Modules/Bar/Components/NetworkWidget.qml similarity index 100% rename from Modules/Network/NetworkWidget.qml rename to Modules/Bar/Components/NetworkWidget.qml diff --git a/Modules/NotifBell.qml b/Modules/Bar/Components/NotifBell.qml similarity index 97% rename from Modules/NotifBell.qml rename to Modules/Bar/Components/NotifBell.qml index 0567d89..c1db86f 100644 --- a/Modules/NotifBell.qml +++ b/Modules/Bar/Components/NotifBell.qml @@ -1,6 +1,7 @@ import Quickshell import QtQuick import ZShell.Config +import qs.Modules.Bar.Popouts import qs.Daemons import qs.Components import qs.Services diff --git a/Modules/Resource.qml b/Modules/Bar/Components/Resource.qml similarity index 100% rename from Modules/Resource.qml rename to Modules/Bar/Components/Resource.qml diff --git a/Modules/Resources.qml b/Modules/Bar/Components/Resources.qml similarity index 100% rename from Modules/Resources.qml rename to Modules/Bar/Components/Resources.qml diff --git a/Modules/SysTray/StatusIcons.qml b/Modules/Bar/Components/StatusIcons.qml similarity index 98% rename from Modules/SysTray/StatusIcons.qml rename to Modules/Bar/Components/StatusIcons.qml index 2fa363a..e0d6655 100644 --- a/Modules/SysTray/StatusIcons.qml +++ b/Modules/Bar/Components/StatusIcons.qml @@ -3,9 +3,9 @@ pragma ComponentBehavior: Bound import Quickshell import QtQuick import QtQuick.Layouts -import qs.Helpers -import qs.Modules.SysTray.Widgets import ZShell.Config +import qs.Helpers +import qs.Modules.Bar.Components.StatusIcons import qs.Components import qs.Services diff --git a/Modules/SysTray/Widgets/AudioWidget.qml b/Modules/Bar/Components/StatusIcons/AudioWidget.qml similarity index 100% rename from Modules/SysTray/Widgets/AudioWidget.qml rename to Modules/Bar/Components/StatusIcons/AudioWidget.qml diff --git a/Modules/SysTray/Widgets/MicWidget.qml b/Modules/Bar/Components/StatusIcons/MicWidget.qml similarity index 100% rename from Modules/SysTray/Widgets/MicWidget.qml rename to Modules/Bar/Components/StatusIcons/MicWidget.qml diff --git a/Modules/SysTray/Widgets/UPowerWidget.qml b/Modules/Bar/Components/StatusIcons/UPowerWidget.qml similarity index 100% rename from Modules/SysTray/Widgets/UPowerWidget.qml rename to Modules/Bar/Components/StatusIcons/UPowerWidget.qml diff --git a/Modules/SysTray/TrayItem.qml b/Modules/Bar/Components/Tray/TrayItem.qml similarity index 98% rename from Modules/SysTray/TrayItem.qml rename to Modules/Bar/Components/Tray/TrayItem.qml index ce054aa..d7b8fc1 100644 --- a/Modules/SysTray/TrayItem.qml +++ b/Modules/Bar/Components/Tray/TrayItem.qml @@ -1,10 +1,9 @@ import QtQuick.Layouts import QtQuick -import QtQuick.VectorImage import Quickshell import Quickshell.Services.SystemTray import qs.Helpers -import qs.Modules +import qs.Modules.Bar.Popouts import qs.Components import ZShell.Config import qs.Services diff --git a/Modules/SysTray/TrayIcons.qml b/Modules/Bar/Components/TrayIcons.qml similarity index 95% rename from Modules/SysTray/TrayIcons.qml rename to Modules/Bar/Components/TrayIcons.qml index c9eb96f..a7175b4 100644 --- a/Modules/SysTray/TrayIcons.qml +++ b/Modules/Bar/Components/TrayIcons.qml @@ -5,7 +5,8 @@ import QtQuick.Layouts import Quickshell.Services.SystemTray import qs.Components import ZShell.Config -import qs.Modules +import qs.Modules.Bar.Components.Tray +import qs.Modules.Bar.Popouts import qs.Services CustomClippingRect { diff --git a/Modules/Updates/UpdatesWidget.qml b/Modules/Bar/Components/UpdatesWidget.qml similarity index 100% rename from Modules/Updates/UpdatesWidget.qml rename to Modules/Bar/Components/UpdatesWidget.qml diff --git a/Modules/WindowTitle.qml b/Modules/Bar/Components/WindowTitle.qml similarity index 94% rename from Modules/WindowTitle.qml rename to Modules/Bar/Components/WindowTitle.qml index 72d145f..a9c7a4e 100644 --- a/Modules/WindowTitle.qml +++ b/Modules/Bar/Components/WindowTitle.qml @@ -21,9 +21,9 @@ Item { } anchors.centerIn: parent - clip: true + clip: false implicitHeight: horizontal ? current.implicitHeight : current.implicitWidth + current.anchors.topMargin - implicitWidth: horizontal ? Math.min(current.implicitWidth, root.maxSize) : current.implicitHeight + current.anchors.topMargin + implicitWidth: horizontal ? current.implicitWidth + current.anchors.leftMargin : current.implicitHeight + current.anchors.topMargin Behavior on implicitHeight { enabled: !root.horizontal diff --git a/Modules/Workspaces.qml b/Modules/Bar/Components/Workspaces.qml similarity index 98% rename from Modules/Workspaces.qml rename to Modules/Bar/Components/Workspaces.qml index fa7e297..091ff2f 100644 --- a/Modules/Workspaces.qml +++ b/Modules/Bar/Components/Workspaces.qml @@ -2,10 +2,10 @@ pragma ComponentBehavior: Bound import QtQuick import QtQuick.Controls -import QtQuick.Effects import Quickshell import Quickshell.Hyprland import ZShell.Config +import qs.Modules.Bar.Components.Workspaces import qs.Components import qs.Services @@ -90,7 +90,7 @@ Item { color: Colors.palette.m3onSecondaryContainer elide: Text.ElideRight horizontalAlignment: Text.AlignHCenter - text: button.modelData.name + text: button.modelData?.name ?? "" verticalAlignment: Text.AlignVCenter } } diff --git a/Components/AnimatedTabIndexPair.qml b/Modules/Bar/Components/Workspaces/AnimatedTabIndexPair.qml similarity index 100% rename from Components/AnimatedTabIndexPair.qml rename to Modules/Bar/Components/Workspaces/AnimatedTabIndexPair.qml diff --git a/Modules/SysTray/Popouts/AudioPopout.qml b/Modules/Bar/Popouts/AudioPopout.qml similarity index 100% rename from Modules/SysTray/Popouts/AudioPopout.qml rename to Modules/Bar/Popouts/AudioPopout.qml diff --git a/Modules/ClipWrapper.qml b/Modules/Bar/Popouts/ClipWrapper.qml similarity index 100% rename from Modules/ClipWrapper.qml rename to Modules/Bar/Popouts/ClipWrapper.qml diff --git a/Modules/Content.qml b/Modules/Bar/Popouts/Content.qml similarity index 95% rename from Modules/Content.qml rename to Modules/Bar/Popouts/Content.qml index a2ec2d1..555b9d9 100644 --- a/Modules/Content.qml +++ b/Modules/Bar/Popouts/Content.qml @@ -5,10 +5,6 @@ import Quickshell.Services.SystemTray import QtQuick import ZShell.Config import qs.Components -import qs.Modules.WSOverview -import qs.Modules.Network -import qs.Modules.SysTray.Popouts -import qs.Modules.Updates Item { id: root diff --git a/Modules/Network/NetworkPopout.qml b/Modules/Bar/Popouts/NetworkPopout.qml similarity index 100% rename from Modules/Network/NetworkPopout.qml rename to Modules/Bar/Popouts/NetworkPopout.qml diff --git a/Modules/PopoutState.qml b/Modules/Bar/Popouts/PopoutState.qml similarity index 100% rename from Modules/PopoutState.qml rename to Modules/Bar/Popouts/PopoutState.qml diff --git a/Modules/SysTray/Popouts/TrayMenuPopout.qml b/Modules/Bar/Popouts/TrayMenuPopout.qml similarity index 100% rename from Modules/SysTray/Popouts/TrayMenuPopout.qml rename to Modules/Bar/Popouts/TrayMenuPopout.qml diff --git a/Modules/SysTray/Popouts/UPowerPopout.qml b/Modules/Bar/Popouts/UPowerPopout.qml similarity index 100% rename from Modules/SysTray/Popouts/UPowerPopout.qml rename to Modules/Bar/Popouts/UPowerPopout.qml diff --git a/Modules/Updates/UpdatesPopout.qml b/Modules/Bar/Popouts/UpdatesPopout.qml similarity index 100% rename from Modules/Updates/UpdatesPopout.qml rename to Modules/Bar/Popouts/UpdatesPopout.qml diff --git a/Modules/Wrapper.qml b/Modules/Bar/Popouts/Wrapper.qml similarity index 100% rename from Modules/Wrapper.qml rename to Modules/Bar/Popouts/Wrapper.qml diff --git a/Modules/SysTray/TrayWidget.qml b/Modules/SysTray/TrayWidget.qml deleted file mode 100644 index cd9b8d3..0000000 --- a/Modules/SysTray/TrayWidget.qml +++ /dev/null @@ -1,159 +0,0 @@ -pragma ComponentBehavior: Bound - -import QtQuick -import QtQuick.Layouts -import Quickshell.Services.SystemTray -import qs.Components -import ZShell.Config -import qs.Modules.SysTray.Widgets -import qs.Modules -import qs.Services - -GridLayout { - id: root - - required property bool horizontal - readonly property alias items: repeater - required property GridLayout loader - required property Wrapper popouts - readonly property real shortSize: Config.bar.height + Tokens.padding.smallest * 2 - readonly property real size: horizontal ? sysTray.implicitWidth + sysTrayMod.implicitWidth + Tokens.padding.small : sysTray.implicitHeight + sysTrayMod.implicitHeight + Tokens.padding.small - - function closestRowChild(row, x) { - let child = row.childAt(x, row.height / 2); - if (child) - return child; - - let closest = null; - let closestDistance = Infinity; - - for (let i = 0; i < row.children.length; ++i) { - let c = row.children[i]; - - if (!c.visible || c.width <= 0) - continue; - - let centerX = c.x + c.width / 2; - let dist = Math.abs(x - centerX); - - if (dist < closestDistance) { - closestDistance = dist; - closest = c; - } - } - - return closest; - } - - function getHoveredSubItem(localX, localY) { - let modPos = mapToItem(sysTrayMod, localX, localY); - if (sysTrayMod.contains(Qt.point(modPos.x, modPos.y))) { - let modRowPos = sysTrayMod.mapToItem(sysIcons, modPos.x, modPos.y); - let child = closestRowChild(sysIcons, modRowPos.x); - if (child) { - if (child.objectName === "audio" && Config.bar.popouts.audio) - return { - id: "audio", - item: child - }; - if (child.objectName === "microphone" && Config.bar.popouts.audio) - return { - id: "audio", - item: child - }; - if (child.objectName === "upower" && Config.bar.popouts.upower) - return { - id: "upower", - item: child - }; - } - } - - let trayPos = mapToItem(sysTray, localX, localY); - if (Config.bar.tray.showOnHover && sysTray.contains(Qt.point(trayPos.x, trayPos.y))) { - let trayRowPos = sysTray.mapToItem(sysRow, trayPos.x, trayPos.y); - let child = sysRow.childAt(trayRowPos.x, trayRowPos.y); - if (child && child.hasOwnProperty("ind")) { - return { - id: `traymenu${child.ind}`, - item: child - }; - } - } - - return null; - } - - columnSpacing: Tokens.padding.small - columns: horizontal ? -1 : 1 - height: horizontal ? shortSize : size - rowSpacing: Tokens.padding.small - width: horizontal ? size : shortSize - - CustomClippingRect { - id: sysTray - - Layout.fillHeight: true - bottomRightRadius: Tokens.rounding.smallest / 2 - color: Colors.tPalette.m3surfaceContainer - implicitWidth: sysRow.width + Tokens.padding.small * 2 - radius: Tokens.rounding.full - topRightRadius: Tokens.rounding.smallest / 2 - - GridLayout { - id: sysRow - - anchors.bottom: root.horizontal ? undefined : parent.bottom - anchors.centerIn: parent - anchors.horizontalCenter: root.horizontal ? parent.horizontalCenter : undefined - anchors.left: root.horizontal ? undefined : parent.left - anchors.right: root.horizontal ? undefined : parent.right - anchors.verticalCenter: root.horizontal ? parent.verticalCenter : undefined - columnSpacing: Tokens.spacing.small / 2 - columns: root.horizontal ? -1 : 1 - rowSpacing: Tokens.spacing.small / 2 - - Repeater { - id: repeater - - model: SystemTray.items - - TrayItem { - id: trayItem - - required property int index - required property SystemTrayItem modelData - - implicitHeight: 34 - implicitWidth: 34 - ind: index - item: modelData - loader: root.loader - popouts: root.popouts - } - } - } - } - - CustomClippingRect { - id: sysTrayMod - - Layout.fillHeight: root.horizontal - Layout.fillWidth: !root.horizontal - bottomLeftRadius: Tokens.rounding.smallest / 2 - color: Colors.tPalette.m3surfaceContainer - implicitHeight: root.horizontal ? sysIcons.implicitHeight : sysIcons.implicitHeight + Tokens.padding.smaller + Tokens.padding.normal - implicitWidth: root.horizontal ? sysIcons.implicitWidth + Tokens.padding.smaller + Tokens.padding.normal : sysIcons.implicitWidth - radius: Tokens.rounding.full - topLeftRadius: Tokens.rounding.smallest / 2 - - StatusIcons { - id: sysIcons - - anchors.fill: parent - anchors.leftMargin: Tokens.padding.smaller - anchors.rightMargin: Tokens.padding.normal - horizontal: root.horizontal - } - } -} diff --git a/Modules/WSOverview/OverviewPopout.qml b/Modules/WSOverview/OverviewPopout.qml deleted file mode 100644 index 9f42165..0000000 --- a/Modules/WSOverview/OverviewPopout.qml +++ /dev/null @@ -1,86 +0,0 @@ -import Quickshell -import Quickshell.Hyprland -import Quickshell.Wayland -import QtQuick -import QtQuick.Layouts -import ZShell.Config -import qs.Components -import qs.Modules -import qs.Helpers -import qs.Services - -Item { - id: root - - required property ShellScreen screen - required property Item wrapper - - implicitHeight: layout.implicitHeight + 16 - implicitWidth: layout.implicitWidth + 16 - - GridLayout { - id: layout - - anchors.centerIn: parent - columnSpacing: 8 - rowSpacing: 8 - - Repeater { - model: Hypr.workspaces - - CustomRect { - id: workspacePreview - - required property HyprlandWorkspace modelData - - Layout.preferredHeight: 180 + 10 - Layout.preferredWidth: 320 + 10 - border.color: "white" - border.width: 1 - radius: Tokens.rounding.smallest - - Repeater { - model: workspacePreview.modelData.toplevels - - Item { - id: preview - - property rect appPosition: { - let { - at: [cx, cy], - size: [cw, ch] - } = modelData.lastIpcObject; - - cx -= modelData.monitor.x; - cy -= modelData.monitor.y; - - return Qt.rect((cx / 8), (cy / 8), (cw / 8), (ch / 8)); - } - required property HyprlandToplevel modelData - - anchors.fill: parent - anchors.margins: 5 - - CustomRect { - border.color: Colors.tPalette.m3outline - border.width: 1 - implicitHeight: preview.appPosition.height - implicitWidth: preview.appPosition.width - radius: Tokens.rounding.smallest / 2 - x: preview.appPosition.x - y: preview.appPosition.y - 3.4 - - ScreencopyView { - id: previewCopy - - anchors.fill: parent - captureSource: preview.modelData.wayland - live: true - } - } - } - } - } - } - } -}