1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2025-12-11 07:52:50 -05:00

dock: re-work to separate pins from all open windows

This commit is contained in:
bbedward
2025-08-18 14:57:30 -04:00
parent b75342bf93
commit 525ea5ce1c
6 changed files with 506 additions and 613 deletions

View File

@@ -1,116 +0,0 @@
pragma Singleton
pragma ComponentBehavior
import QtQuick
import Quickshell
import Quickshell.Io
Singleton {
id: root
property bool niriAvailable: false
property string focusedAppId: ""
property string focusedAppName: ""
property string focusedWindowTitle: ""
property int focusedWindowId: -1
function updateFromNiriData() {
if (!root.niriAvailable) {
clearFocusedWindow()
return
}
let focusedWindow = NiriService.windows.find(w => w.is_focused)
if (focusedWindow) {
root.focusedAppId = focusedWindow.app_id || ""
root.focusedWindowTitle = focusedWindow.title || ""
root.focusedAppName = getDisplayName(focusedWindow.app_id || "")
root.focusedWindowId = parseInt(focusedWindow.id) || -1
} else {
setWorkspaceFallback()
}
}
function clearFocusedWindow() {
root.focusedAppId = ""
root.focusedAppName = ""
root.focusedWindowTitle = ""
root.focusedWindowId = -1
}
function setWorkspaceFallback() {
if (NiriService.focusedWorkspaceIndex >= 0 && NiriService.allWorkspaces.length > 0) {
const workspace = NiriService.allWorkspaces[NiriService.focusedWorkspaceIndex]
if (workspace) {
root.focusedAppId = "niri"
root.focusedAppName = "niri"
if (workspace.name && workspace.name.length > 0) {
root.focusedWindowTitle = workspace.name
} else {
root.focusedWindowTitle = "workspace " + workspace.idx
}
root.focusedWindowId = -1
} else {
clearFocusedWindow()
}
} else {
clearFocusedWindow()
}
}
function getDisplayName(appId) {
if (!appId)
return ""
const desktopEntry = DesktopEntries.byId(appId)
return desktopEntry && desktopEntry.name ? desktopEntry.name : ""
}
Component.onCompleted: {
root.niriAvailable = NiriService.niriAvailable
NiriService.onNiriAvailableChanged.connect(() => {
root.niriAvailable = NiriService.niriAvailable
if (root.niriAvailable)
updateFromNiriData()
})
if (root.niriAvailable)
updateFromNiriData()
}
Connections {
function onFocusedWindowIdChanged() {
const focusedWindowId = NiriService.focusedWindowId
if (!focusedWindowId) {
setWorkspaceFallback()
return
}
const focusedWindow = NiriService.windows.find(
w => w.id == focusedWindowId)
if (focusedWindow) {
root.focusedAppId = focusedWindow.app_id || ""
root.focusedWindowTitle = focusedWindow.title || ""
root.focusedAppName = getDisplayName(focusedWindow.app_id || "")
root.focusedWindowId = parseInt(focusedWindow.id) || -1
} else {
setWorkspaceFallback()
}
}
function onWindowsChanged() {
updateFromNiriData()
}
function onWindowOpenedOrChanged(windowData) {
if (windowData.is_focused) {
root.focusedAppId = windowData.app_id || ""
root.focusedWindowTitle = windowData.title || ""
root.focusedAppName = getDisplayName(windowData.app_id || "")
root.focusedWindowId = parseInt(windowData.id) || -1
}
}
target: NiriService
}
}

View File

@@ -307,6 +307,17 @@ Singleton {
function handleWindowsChanged(data) {
windows = sortWindowsByLayout(data.windows)
// Extract focused window from initial state
var focusedWindow = windows.find(w => w.is_focused)
if (focusedWindow) {
focusedWindowId = String(focusedWindow.id)
focusedWindowIndex = windows.findIndex(w => w.id === focusedWindow.id)
} else {
focusedWindowId = ""
focusedWindowIndex = -1
}
updateFocusedWindow()
}