1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2025-12-08 06:25:37 -05:00

dwl: tag changes

This commit is contained in:
bbedward
2025-10-29 23:39:12 -04:00
parent 76637fab33
commit 19b13a1e81
2 changed files with 48 additions and 19 deletions

View File

@@ -36,12 +36,19 @@ Item {
} else if (CompositorService.isHyprland) {
return getHyprlandActiveWorkspace()
} else if (CompositorService.isDwl) {
return getDwlActiveTag()
const activeTags = getDwlActiveTags()
return activeTags.length > 0 ? activeTags[0] : 0
} else if (CompositorService.isSway) {
return getSwayActiveWorkspace()
}
return 1
}
property var dwlActiveTags: {
if (CompositorService.isDwl) {
return getDwlActiveTags()
}
return []
}
property var workspaceList: {
if (CompositorService.isNiri) {
const baseList = getNiriWorkspaces()
@@ -297,18 +304,13 @@ Item {
})
}
function getDwlActiveTag() {
function getDwlActiveTags() {
if (!DwlService.dwlAvailable) {
return 0
return [0]
}
const output = DwlService.getOutputState(root.screenName)
if (!output || !output.tags) {
return 0
}
const activeTag = output.tags.find(tag => tag.state === 1)
return activeTag ? activeTag.tag : 0
const activeTags = DwlService.getActiveTags(root.screenName)
return activeTags.length > 0 ? activeTags : [0]
}
readonly property real padding: Math.max(Theme.spacingXS, Theme.spacingS * (widgetHeight / 30))
@@ -438,7 +440,7 @@ Item {
if (CompositorService.isHyprland) {
return modelData && modelData.id === root.currentWorkspace
} else if (CompositorService.isDwl) {
return modelData && modelData.tag === root.currentWorkspace
return modelData && root.dwlActiveTags.includes(modelData.tag)
} else if (CompositorService.isSway) {
return modelData && modelData.num === root.currentWorkspace
}
@@ -508,7 +510,7 @@ Item {
hoverEnabled: !isPlaceholder
cursorShape: isPlaceholder ? Qt.ArrowCursor : Qt.PointingHandCursor
enabled: !isPlaceholder
onClicked: {
onClicked: mouse => {
if (isPlaceholder) {
return
}
@@ -518,7 +520,14 @@ Item {
} else if (CompositorService.isHyprland && modelData?.id) {
Hyprland.dispatch(`workspace ${modelData.id}`)
} else if (CompositorService.isDwl && modelData?.tag !== undefined) {
console.log("DWL tag clicked:", modelData.tag, "modifiers:", mouse.modifiers, "ctrl:", (mouse.modifiers & Qt.ControlModifier))
if (mouse.modifiers & Qt.ControlModifier) {
console.log("Using toggleTag for tag", modelData.tag)
DwlService.toggleTag(root.screenName, modelData.tag)
} else {
console.log("Using switchToTag for tag", modelData.tag)
DwlService.switchToTag(root.screenName, modelData.tag)
}
} else if (CompositorService.isSway && modelData?.num) {
try { I3.dispatch(`workspace number ${modelData.num}`) } catch(_){}
}
@@ -585,8 +594,16 @@ Item {
radius: Theme.cornerRadius
color: isActive ? Theme.primary : isUrgent ? Theme.error : isPlaceholder ? Theme.surfaceTextLight : isHovered ? Theme.outlineButton : Theme.surfaceTextAlpha
border.width: isUrgent && !isActive ? 2 : 0
border.color: isUrgent && !isActive ? Theme.error : Theme.withAlpha(Theme.error, 0)
border.width: {
if (isUrgent && !isActive) return 2
if (CompositorService.isDwl && isActive && root.dwlActiveTags.length > 1) return 2
return 0
}
border.color: {
if (isUrgent && !isActive) return Theme.error
if (CompositorService.isDwl && isActive && root.dwlActiveTags.length > 1) return Qt.lighter(Theme.primary, 1.3)
return Theme.withAlpha(Theme.error, 0)
}
Behavior on width {
enabled: (!SettingsData.showWorkspaceApps || SettingsData.maxWorkspaceIcons <= 3)
@@ -618,6 +635,13 @@ Item {
}
}
Behavior on border.color {
ColorAnimation {
duration: Theme.shortDuration
easing.type: Theme.emphasizedEasing
}
}
Loader {
id: appIconsLoader
anchors.fill: parent

View File

@@ -218,17 +218,22 @@ Singleton {
return [0]
}
const activeTags = output.tags
.filter(tag => tag.state === 1)
.map(tag => tag.tag)
const occupiedTags = output.tags
.filter(tag => tag.clients > 0)
.map(tag => tag.tag)
.sort((a, b) => a - b)
if (occupiedTags.length === 0) {
const combinedTags = [...new Set([...activeTags, ...occupiedTags])].sort((a, b) => a - b)
if (combinedTags.length === 0) {
return [0]
}
const minTag = occupiedTags[0]
const maxTag = occupiedTags[occupiedTags.length - 1]
const minTag = combinedTags[0]
const maxTag = combinedTags[combinedTags.length - 1]
const visibleTags = []
for (let i = minTag; i <= maxTag; i++) {