From 75e04137de3f023f6a4925e6b64b3b483b7577a5 Mon Sep 17 00:00:00 2001 From: bbedward Date: Sat, 23 Aug 2025 13:37:54 -0400 Subject: [PATCH] fix some dock behaviors on hyprland --- Modules/Dock/DockAppButton.qml | 42 ++++++++++++++++++++++++++++++---- Modules/Dock/DockApps.qml | 8 +++---- 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/Modules/Dock/DockAppButton.qml b/Modules/Dock/DockAppButton.qml index e4054ea0..e9dc64be 100644 --- a/Modules/Dock/DockAppButton.qml +++ b/Modules/Dock/DockAppButton.qml @@ -25,10 +25,14 @@ Item { property bool isHovered: mouseArea.containsMouse && !dragging property bool showTooltip: mouseArea.containsMouse && !dragging property bool isWindowFocused: { - if (!appData || appData.type !== "window" || !appData.toplevelObject) { + if (!appData || appData.type !== "window") { return false } - return appData.toplevelObject.activated + var toplevel = getToplevelObject() + if (!toplevel) { + return false + } + return toplevel.activated } property string tooltipText: { if (!appData) @@ -52,6 +56,35 @@ Item { width: 40 height: 40 + + function getToplevelObject() { + if (!appData || appData.type !== "window") { + return null + } + + var sortedToplevels = CompositorService.sortedToplevels + if (!sortedToplevels) { + return null + } + + if (appData.uniqueId) { + for (var i = 0; i < sortedToplevels.length; i++) { + var toplevel = sortedToplevels[i] + var checkId = toplevel.title + "|" + (toplevel.appId || "") + "|" + i + if (checkId === appData.uniqueId) { + return toplevel + } + } + } + + if (appData.windowId !== undefined && appData.windowId !== null && appData.windowId >= 0) { + if (appData.windowId < sortedToplevels.length) { + return sortedToplevels[appData.windowId] + } + } + + return null + } onIsHoveredChanged: { if (isHovered) { exitAnimation.stop() @@ -208,8 +241,9 @@ Item { desktopEntry.execute() } } else if (appData.type === "window") { - if (appData.toplevelObject) { - appData.toplevelObject.activate() + var toplevel = getToplevelObject() + if (toplevel) { + toplevel.activate() } } } else if (mouse.button === Qt.MiddleButton) { diff --git a/Modules/Dock/DockApps.qml b/Modules/Dock/DockApps.qml index 1e9359f3..77da0477 100644 --- a/Modules/Dock/DockApps.qml +++ b/Modules/Dock/DockApps.qml @@ -88,22 +88,22 @@ Item { } // Second section: Running windows (sorted using Theme.sortToplevels) - sortedToplevels.forEach(toplevel => { + sortedToplevels.forEach((toplevel, index) => { // Limit window title length for tooltip var title = toplevel.title || "(Unnamed)" if (title.length > 50) { title = title.substring(0, 47) + "..." } - + var uniqueId = toplevel.title + "|" + (toplevel.appId || "") + "|" + index items.push({ "type": "window", "appId": toplevel.appId || "", - "windowId": -1, // Toplevel doesn't have numeric ID + "windowId": index, "windowTitle": title, "workspaceId": -1, // Will be handled by sorting "isPinned": false, "isRunning": true, - "toplevelObject": toplevel + "uniqueId": uniqueId }) })