1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-01-30 00:12:50 -05:00

support for Hyprland workspaces

This commit is contained in:
bbedward
2025-11-12 16:05:50 -05:00
parent b79e9f72ce
commit fd3e7470f4
2 changed files with 56 additions and 19 deletions

View File

@@ -33,17 +33,21 @@ Item {
} }
property var currentWorkspace: { property var currentWorkspace: {
if (useExtWorkspace) { if (useExtWorkspace) return getExtWorkspaceActiveWorkspace()
return getExtWorkspaceActiveWorkspace()
} else if (CompositorService.isNiri) { switch (CompositorService.compositor) {
case "niri":
return getNiriActiveWorkspace() return getNiriActiveWorkspace()
} else if (CompositorService.isDwl) { case "hyprland":
return getHyprlandActiveWorkspace()
case "dwl":
const activeTags = getDwlActiveTags() const activeTags = getDwlActiveTags()
return activeTags.length > 0 ? activeTags[0] : -1 return activeTags.length > 0 ? activeTags[0] : -1
} else if (CompositorService.isSway) { case "sway":
return getSwayActiveWorkspace() return getSwayActiveWorkspace()
default:
return 1
} }
return 1
} }
property var dwlActiveTags: { property var dwlActiveTags: {
if (CompositorService.isDwl) { if (CompositorService.isDwl) {
@@ -56,19 +60,25 @@ Item {
const baseList = getExtWorkspaceWorkspaces() const baseList = getExtWorkspaceWorkspaces()
return SettingsData.showWorkspacePadding ? padWorkspaces(baseList) : baseList return SettingsData.showWorkspacePadding ? padWorkspaces(baseList) : baseList
} }
if (CompositorService.isNiri) {
const baseList = getNiriWorkspaces() let baseList
return SettingsData.showWorkspacePadding ? padWorkspaces(baseList) : baseList switch (CompositorService.compositor) {
case "niri":
baseList = getNiriWorkspaces()
break
case "hyprland":
baseList = getHyprlandWorkspaces()
break
case "dwl":
baseList = getDwlTags()
break
case "sway":
baseList = getSwayWorkspaces()
break
default:
return [1]
} }
if (CompositorService.isDwl) { return SettingsData.showWorkspacePadding ? padWorkspaces(baseList) : baseList
const baseList = getDwlTags()
return SettingsData.showWorkspacePadding ? padWorkspaces(baseList) : baseList
}
if (CompositorService.isSway) {
const baseList = getSwayWorkspaces()
return SettingsData.showWorkspacePadding ? padWorkspaces(baseList) : baseList
}
return [1]
} }
function getSwayWorkspaces() { function getSwayWorkspaces() {
@@ -93,6 +103,27 @@ Item {
return focusedWs ? focusedWs.num : 1 return focusedWs ? focusedWs.num : 1
} }
function getHyprlandWorkspaces() {
const workspaces = Hyprland.workspaces?.values || []
if (workspaces.length === 0) return [{id: 1}]
if (!root.screenName || !SettingsData.workspacesPerMonitor) {
return workspaces.slice().sort((a, b) => a.id - b.id)
}
const monitorWorkspaces = workspaces.filter(ws => ws.monitor?.name === root.screenName)
return monitorWorkspaces.length > 0 ? monitorWorkspaces.sort((a, b) => a.id - b.id) : [{id: 1}]
}
function getHyprlandActiveWorkspace() {
if (!root.screenName || !SettingsData.workspacesPerMonitor) {
return Hyprland.focusedWorkspace?.id || 1
}
const monitor = Hyprland.monitors?.values?.find(m => m.name === root.screenName)
return monitor?.activeWorkspace?.id || 1
}
function getWorkspaceIcons(ws) { function getWorkspaceIcons(ws) {
_desktopEntriesUpdateTrigger _desktopEntriesUpdateTrigger
if (!SettingsData.showWorkspaceApps || !ws) { if (!SettingsData.showWorkspaceApps || !ws) {
@@ -892,6 +923,11 @@ Item {
enabled: CompositorService.isDwl enabled: CompositorService.isDwl
function onStateChanged() { delegateRoot.updateAllData() } function onStateChanged() { delegateRoot.updateAllData() }
} }
Connections {
target: Hyprland.workspaces
enabled: CompositorService.isHyprland
function onValuesChanged() { delegateRoot.updateAllData() }
}
Connections { Connections {
target: I3.workspaces target: I3.workspaces
enabled: CompositorService.isSway enabled: CompositorService.isSway

View File

@@ -347,7 +347,8 @@ Singleton {
} }
function detectCompositor() { function detectCompositor() {
if (hyprlandSignature && hyprlandSignature.length > 0) { if (hyprlandSignature && hyprlandSignature.length > 0 &&
!niriSocket && !swaySocket && !labwcPid) {
isHyprland = true isHyprland = true
isNiri = false isNiri = false
isDwl = false isDwl = false