reworked Workspace.qml to support specialworkspace, fixed launcher opening on two monitors, added slider animation back as an option

This commit is contained in:
SomeElse
2026-05-29 01:59:43 +00:00
parent 7606b96a09
commit a380963757
21 changed files with 120 additions and 57 deletions

View File

@@ -156,48 +156,21 @@ ModuleChip {
} }
} }
PopupPanel { StandardPopup {
id: volumePopup id: volumePopup
ns: "volume" ns: "volume"
chipRoot: root chipRoot: root
cardWidth: Cfg.Config.volumePopupWidth cardWidth: Cfg.Config.volumePopupWidth
cardColor: root.t.volPopupBg
cardBorderColor: root.t.volPopupBorder
cardHeight: popupCol.implicitHeight + 30
Rectangle { ColumnLayout {
id: volCard id: popupCol
width: parent.width anchors { left: parent.left; right: parent.right; top: parent.top }
height: popupCol.implicitHeight + 30 anchors.margins: 16
anchors.topMargin: 16
anchors.top: root.isTop ? parent.top : undefined spacing: 16
anchors.bottom: root.isTop ? undefined : parent.bottom
transform: Scale {
yScale: volumePopup.popupOpen ? 1 : 0
origin.y: root.isTop ? 0 : volCard.height
Behavior on yScale {
NumberAnimation {
duration: Cfg.Config.popupAnimDuration
easing.type: Easing.OutBack
}
enabled: volumePopup.visible
}
}
opacity: volumePopup.popupOpen ? 1.0 : 0.0
Behavior on opacity { NumberAnimation { duration: 200 } }
radius: Cfg.Config.popupRadius
color: root.t.volPopupBg
border.color: root.t.volPopupBorder
border.width: Cfg.Config.popupBorderWidth
MouseArea { anchors.fill: parent; propagateComposedEvents: false }
ColumnLayout {
id: popupCol
anchors { left: parent.left; right: parent.right; top: parent.top }
anchors.margins: 16
anchors.topMargin: 16
spacing: 16
VolumeSection { VolumeSection {
id: outputSection id: outputSection
@@ -294,7 +267,6 @@ ModuleChip {
} }
Item { height: 0 } Item { height: 0 }
} }
}
} }
component VolumeSection: ColumnLayout { component VolumeSection: ColumnLayout {

View File

@@ -13,6 +13,22 @@ ModuleChip {
chipColor: t.wsPanelBg chipColor: t.wsPanelBg
chipBorderColor: t.wsPanelBorder chipBorderColor: t.wsPanelBorder
property string activeSpecial: ""
property string lastActiveName: ""
Connections {
target: Hyprland
function onRawEvent(event) {
if (event.name === "activespecial") {
var name = event.data.split(",")[0]
root.activeSpecial = name
}
if (event.name === "workspace") {
root.lastActiveName = event.data
}
}
}
RowLayout { RowLayout {
id: workspaceLayout id: workspaceLayout
anchors.centerIn: parent anchors.centerIn: parent
@@ -22,13 +38,25 @@ ModuleChip {
model: Hyprland.workspaces model: Hyprland.workspaces
Rectangle { Rectangle {
Layout.preferredWidth: modelData.active ? 34 : 28 id: wsPill
visible: modelData.name !== "special:magic"
property bool isSelected: modelData.active || (root.activeSpecial !== "" && modelData.name === root.lastActiveName)
Layout.preferredWidth: isSelected ? 34 : 28
Layout.preferredHeight: 22 Layout.preferredHeight: 22
radius: 11 radius: 11
color: modelData.active color: {
? root.t.wsActiveBg if (isSelected && root.activeSpecial !== "") {
: (wsHover.hovered ? root.t.wsHoverBg : root.t.wsInactiveBg) return root.t.wsMagicActiveBg
}
if (modelData.active) {
return root.t.wsActiveBg
}
return wsHover.hovered ? root.t.wsHoverBg : root.t.wsInactiveBg
}
Behavior on color { ColorAnimation { duration: 200 } } Behavior on color { ColorAnimation { duration: 200 } }
Behavior on Layout.preferredWidth { NumberAnimation { duration: 200 } } Behavior on Layout.preferredWidth { NumberAnimation { duration: 200 } }
@@ -38,9 +66,15 @@ ModuleChip {
text: modelData.name text: modelData.name
font.pixelSize: 11 font.pixelSize: 11
font.bold: true font.bold: true
color: modelData.active color: {
? root.t.wsActiveText if (isSelected && root.activeSpecial !== "") {
: (wsHover.hovered ? root.t.wsHoverText : root.t.wsInactiveText) return root.t.wsMagicActiveText
}
if (modelData.active) {
return root.t.wsActiveText
}
return wsHover.hovered ? root.t.wsHoverText : root.t.wsInactiveText
}
} }
HoverHandler { id: wsHover; cursorShape: Qt.PointingHandCursor } HoverHandler { id: wsHover; cursorShape: Qt.PointingHandCursor }

View File

@@ -14,17 +14,33 @@ Rectangle {
anchors.top: isTop ? parent.top : undefined anchors.top: isTop ? parent.top : undefined
anchors.bottom: isTop ? undefined : parent.bottom anchors.bottom: isTop ? undefined : parent.bottom
transform: Scale { transform: [
yScale: popupOpen ? 1 : 0 Scale {
origin.y: isTop ? 0 : card.height yScale: Cfg.Config.popupAnimType === "bubbleslide"
Behavior on yScale { ? (popupOpen ? 1 : 0)
NumberAnimation { : 1
duration: Cfg.Config.popupAnimDuration origin.y: isTop ? 0 : card.height
easing.type: Easing.OutBack Behavior on yScale {
NumberAnimation {
duration: Cfg.Config.popupAnimDuration
easing.type: Easing.OutBack
}
enabled: animEnabled
}
},
Translate {
y: Cfg.Config.popupAnimType === "slide"
? (popupOpen ? 0 : (isTop ? -card.height : card.height))
: 0
Behavior on y {
NumberAnimation {
duration: Cfg.Config.popupAnimDuration
easing.type: Easing.OutCubic
}
enabled: animEnabled
} }
enabled: animEnabled
} }
} ]
opacity: popupOpen ? 1.0 : 0.0 opacity: popupOpen ? 1.0 : 0.0
Behavior on opacity { NumberAnimation { duration: 200 } } Behavior on opacity { NumberAnimation { duration: 200 } }

View File

@@ -6,7 +6,7 @@ import "themes"
QtObject { QtObject {
id: root id: root
readonly property var theme: Lowlight readonly property var theme: Goldencity
// ──────────────────────────────────────────────────────────────────────── // ────────────────────────────────────────────────────────────────────────
// Widgets // Widgets
@@ -23,7 +23,7 @@ QtObject {
// ──────────────────────────────────────────────────────────────────────── // ────────────────────────────────────────────────────────────────────────
// ── Position & Dimensions ───────────────────────────────────────────────── // ── Position & Dimensions ─────────────────────────────────────────────────
property string barPosition: "top" property string barPosition: "bottom"
property int barHeight: 35 property int barHeight: 35
property int margin: 15 property int margin: 15
property int radius: 20 property int radius: 20
@@ -48,6 +48,7 @@ QtObject {
property int popupRadius: 18 property int popupRadius: 18
property int popupBorderWidth: 1 property int popupBorderWidth: 1
property int popupAnimDuration: 250 property int popupAnimDuration: 250
property string popupAnimType: "slide" // "bubbleslide" or "slide"
// ── Clock Module ───────────────────────────────────────────────────────── // ── Clock Module ─────────────────────────────────────────────────────────
property bool clockExtendEnabled: true // seconds extension on hover for clock property bool clockExtendEnabled: true // seconds extension on hover for clock

View File

@@ -179,6 +179,8 @@ QtObject {
readonly property color wsActiveText: "#ff0b3333" readonly property color wsActiveText: "#ff0b3333"
readonly property color wsInactiveText: textMain readonly property color wsInactiveText: textMain
readonly property color wsHoverText: "#ffffffff" readonly property color wsHoverText: "#ffffffff"
readonly property color wsMagicActiveBg: "#ff9b6df5"
readonly property color wsMagicActiveText: "#ff0c0e12"
// ── Tray Module ──────────────────────────────────────────────────────────── // ── Tray Module ────────────────────────────────────────────────────────────
readonly property color trayBg: bgPanel readonly property color trayBg: bgPanel

View File

@@ -179,6 +179,8 @@ QtObject {
readonly property color wsActiveText: "#ff050a14" readonly property color wsActiveText: "#ff050a14"
readonly property color wsInactiveText: textMain readonly property color wsInactiveText: textMain
readonly property color wsHoverText: "#ffffffff" readonly property color wsHoverText: "#ffffffff"
readonly property color wsMagicActiveBg: "#ff9b6df5"
readonly property color wsMagicActiveText: "#ff0c0e12"
// ── Tray Module ──────────────────────────────────────────────────────────── // ── Tray Module ────────────────────────────────────────────────────────────
readonly property color trayBg: bgPanel readonly property color trayBg: bgPanel

View File

@@ -187,6 +187,8 @@ QtObject {
readonly property color wsActiveText: "#ff0c0e12" readonly property color wsActiveText: "#ff0c0e12"
readonly property color wsInactiveText: textMain readonly property color wsInactiveText: textMain
readonly property color wsHoverText: "#fff8e7c9" readonly property color wsHoverText: "#fff8e7c9"
readonly property color wsMagicActiveBg: "#ff9b6df5"
readonly property color wsMagicActiveText: "#ff0c0e12"
// ── Tray Module ──────────────────────────────────────────────────────────── // ── Tray Module ────────────────────────────────────────────────────────────
readonly property color trayBg: bgPanel readonly property color trayBg: bgPanel

View File

@@ -179,6 +179,8 @@ QtObject {
readonly property color wsActiveText: "#ff1a212e" readonly property color wsActiveText: "#ff1a212e"
readonly property color wsInactiveText: textMain readonly property color wsInactiveText: textMain
readonly property color wsHoverText: "#ffffffff" readonly property color wsHoverText: "#ffffffff"
readonly property color wsMagicActiveBg: "#ff9b6df5"
readonly property color wsMagicActiveText: "#ff0c0e12"
// ── Tray Module ──────────────────────────────────────────────────────────── // ── Tray Module ────────────────────────────────────────────────────────────
readonly property color trayBg: bgPanel readonly property color trayBg: bgPanel

View File

@@ -187,6 +187,8 @@ QtObject {
readonly property color wsActiveText: "#ff0e0a0d" readonly property color wsActiveText: "#ff0e0a0d"
readonly property color wsInactiveText: textMain readonly property color wsInactiveText: textMain
readonly property color wsHoverText: "#ffffffff" readonly property color wsHoverText: "#ffffffff"
readonly property color wsMagicActiveBg: "#ff9b6df5"
readonly property color wsMagicActiveText: "#ff0c0e12"
// ── Tray Module ──────────────────────────────────────────────────────────── // ── Tray Module ────────────────────────────────────────────────────────────
readonly property color trayBg: bgPanel readonly property color trayBg: bgPanel

View File

@@ -179,6 +179,8 @@ QtObject {
readonly property color wsActiveText: "#ff1c2433" // Dark text on pink readonly property color wsActiveText: "#ff1c2433" // Dark text on pink
readonly property color wsInactiveText: textMain readonly property color wsInactiveText: textMain
readonly property color wsHoverText: "#ffffffff" readonly property color wsHoverText: "#ffffffff"
readonly property color wsMagicActiveBg: "#ff9b6df5"
readonly property color wsMagicActiveText: "#ff0c0e12"
// ── Tray Module ──────────────────────────────────────────────────────────── // ── Tray Module ────────────────────────────────────────────────────────────
readonly property color trayBg: bgPanel readonly property color trayBg: bgPanel

View File

@@ -179,6 +179,8 @@ QtObject {
readonly property color wsActiveText: "#ff0d1326" readonly property color wsActiveText: "#ff0d1326"
readonly property color wsInactiveText: textMain readonly property color wsInactiveText: textMain
readonly property color wsHoverText: "#ffffffff" readonly property color wsHoverText: "#ffffffff"
readonly property color wsMagicActiveBg: "#ff9b6df5"
readonly property color wsMagicActiveText: "#ff0c0e12"
// ── Tray Module ──────────────────────────────────────────────────────────── // ── Tray Module ────────────────────────────────────────────────────────────
readonly property color trayBg: bgPanel readonly property color trayBg: bgPanel

View File

@@ -190,6 +190,8 @@ QtObject {
readonly property color wsActiveText: "#ff070e08" readonly property color wsActiveText: "#ff070e08"
readonly property color wsInactiveText: textMain readonly property color wsInactiveText: textMain
readonly property color wsHoverText: "#ffffffff" readonly property color wsHoverText: "#ffffffff"
readonly property color wsMagicActiveBg: "#ff9b6df5"
readonly property color wsMagicActiveText: "#ff0c0e12"
// ── Tray Module ──────────────────────────────────────────────────────────── // ── Tray Module ────────────────────────────────────────────────────────────
readonly property color trayBg: bgPanel readonly property color trayBg: bgPanel

View File

@@ -187,6 +187,8 @@ QtObject {
readonly property color wsActiveText: "#ff0c0e12" readonly property color wsActiveText: "#ff0c0e12"
readonly property color wsInactiveText: textMain readonly property color wsInactiveText: textMain
readonly property color wsHoverText: "#ffffffff" readonly property color wsHoverText: "#ffffffff"
readonly property color wsMagicActiveBg: "#ff9b6df5"
readonly property color wsMagicActiveText: wsActiveText
// ── Tray Module ──────────────────────────────────────────────────────────── // ── Tray Module ────────────────────────────────────────────────────────────
readonly property color trayBg: bgPanel readonly property color trayBg: bgPanel

View File

@@ -187,6 +187,8 @@ QtObject {
readonly property color wsActiveText: "#ff0d140d" readonly property color wsActiveText: "#ff0d140d"
readonly property color wsInactiveText: textMain readonly property color wsInactiveText: textMain
readonly property color wsHoverText: "#ffffffff" readonly property color wsHoverText: "#ffffffff"
readonly property color wsMagicActiveBg: "#ff9b6df5"
readonly property color wsMagicActiveText: "#ff0c0e12"
// ── Tray Module ──────────────────────────────────────────────────────────── // ── Tray Module ────────────────────────────────────────────────────────────
readonly property color trayBg: bgPanel readonly property color trayBg: bgPanel

View File

@@ -190,6 +190,8 @@ QtObject {
readonly property color wsActiveText: "#ff07091c" readonly property color wsActiveText: "#ff07091c"
readonly property color wsInactiveText: textMain readonly property color wsInactiveText: textMain
readonly property color wsHoverText: "#ffffffff" readonly property color wsHoverText: "#ffffffff"
readonly property color wsMagicActiveBg: "#ff9b6df5"
readonly property color wsMagicActiveText: "#ff0c0e12"
// ── Tray Module ──────────────────────────────────────────────────────────── // ── Tray Module ────────────────────────────────────────────────────────────
readonly property color trayBg: bgPanel readonly property color trayBg: bgPanel

View File

@@ -180,6 +180,8 @@ QtObject {
readonly property color wsActiveText: "#ff0d1117" readonly property color wsActiveText: "#ff0d1117"
readonly property color wsInactiveText: textMain readonly property color wsInactiveText: textMain
readonly property color wsHoverText: "#ffffffff" readonly property color wsHoverText: "#ffffffff"
readonly property color wsMagicActiveBg: "#ff9b6df5"
readonly property color wsMagicActiveText: "#ff0c0e12"
// ── Tray Module ──────────────────────────────────────────────────────────── // ── Tray Module ────────────────────────────────────────────────────────────
readonly property color trayBg: bgPanel readonly property color trayBg: bgPanel

View File

@@ -179,6 +179,8 @@ QtObject {
readonly property color wsActiveText: "#ff0d0b1c" readonly property color wsActiveText: "#ff0d0b1c"
readonly property color wsInactiveText: textMain readonly property color wsInactiveText: textMain
readonly property color wsHoverText: "#ffffffff" readonly property color wsHoverText: "#ffffffff"
readonly property color wsMagicActiveBg: "#ff9b6df5"
readonly property color wsMagicActiveText: "#ff0c0e12"
// ── Tray Module ──────────────────────────────────────────────────────────── // ── Tray Module ────────────────────────────────────────────────────────────
readonly property color trayBg: bgPanel readonly property color trayBg: bgPanel

View File

@@ -190,6 +190,8 @@ QtObject {
readonly property color wsActiveText: "#ff0d0b1c" readonly property color wsActiveText: "#ff0d0b1c"
readonly property color wsInactiveText: textMain readonly property color wsInactiveText: textMain
readonly property color wsHoverText: "#ffffffff" readonly property color wsHoverText: "#ffffffff"
readonly property color wsMagicActiveBg: "#ff9b6df5"
readonly property color wsMagicActiveText: "#ff0c0e12"
// ── Tray Module ──────────────────────────────────────────────────────────── // ── Tray Module ────────────────────────────────────────────────────────────
readonly property color trayBg: bgPanel readonly property color trayBg: bgPanel

View File

@@ -179,6 +179,8 @@ QtObject {
readonly property color wsActiveText: "#ff2d1621" // Dark contrast readonly property color wsActiveText: "#ff2d1621" // Dark contrast
readonly property color wsInactiveText: textMain readonly property color wsInactiveText: textMain
readonly property color wsHoverText: "#ffffffff" readonly property color wsHoverText: "#ffffffff"
readonly property color wsMagicActiveBg: "#ff9b6df5"
readonly property color wsMagicActiveText: "#ff0c0e12"
// ── Tray Module ──────────────────────────────────────────────────────────── // ── Tray Module ────────────────────────────────────────────────────────────
readonly property color trayBg: bgPanel readonly property color trayBg: bgPanel

View File

@@ -188,6 +188,8 @@ QtObject {
readonly property color wsActiveText: "#ff0c0e12" readonly property color wsActiveText: "#ff0c0e12"
readonly property color wsInactiveText: textMain readonly property color wsInactiveText: textMain
readonly property color wsHoverText: "#ffccd1d4" readonly property color wsHoverText: "#ffccd1d4"
readonly property color wsMagicActiveBg: "#ff9b6df5"
readonly property color wsMagicActiveText: "#ff0c0e12"
// ── Tray Module ──────────────────────────────────────────────────────────── // ── Tray Module ────────────────────────────────────────────────────────────
readonly property color trayBg: bgPanel readonly property color trayBg: bgPanel

View File

@@ -42,9 +42,17 @@ PanelWindow {
return allItems.filter(i => i.name.toLowerCase().includes(q)) return allItems.filter(i => i.name.toLowerCase().includes(q))
} }
function toggle() { _isOpen ? close() : open() } function toggle() {
if (!_isOpen) {
var fm = Hyprland.focusedMonitor
if (!fm || fm.name !== screen.name) return
}
_isOpen ? close() : open()
}
function open() { function open() {
var fm = Hyprland.focusedMonitor
if (!fm || fm.name !== screen.name) return
closeTimer.stop() closeTimer.stop()
visible = true visible = true
_isOpen = true _isOpen = true