1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-01-29 16:02:51 -05:00

Hyprland: fix focused app logic for empty workspaces

This commit is contained in:
bbedward
2025-09-24 15:08:22 -04:00
parent 3c42a618d4
commit 14e648911d

View File

@@ -1,6 +1,7 @@
import QtQuick import QtQuick
import Quickshell import Quickshell
import Quickshell.Wayland import Quickshell.Wayland
import Quickshell.Hyprland
import qs.Common import qs.Common
import qs.Services import qs.Services
import qs.Widgets import qs.Widgets
@@ -17,25 +18,40 @@ Rectangle {
readonly property int maxCompactWidth: 288 readonly property int maxCompactWidth: 288
readonly property Toplevel activeWindow: ToplevelManager.activeToplevel readonly property Toplevel activeWindow: ToplevelManager.activeToplevel
readonly property bool hasWindowsOnCurrentWorkspace: { readonly property bool hasWindowsOnCurrentWorkspace: {
if (!CompositorService.isNiri) { if (CompositorService.isNiri) {
return activeWindow && activeWindow.title let currentWorkspaceId = null
} for (var i = 0; i < NiriService.allWorkspaces.length; i++) {
const ws = NiriService.allWorkspaces[i]
let currentWorkspaceId = null if (ws.is_focused) {
for (var i = 0; i < NiriService.allWorkspaces.length; i++) { currentWorkspaceId = ws.id
const ws = NiriService.allWorkspaces[i] break
if (ws.is_focused) { }
currentWorkspaceId = ws.id
break
} }
if (!currentWorkspaceId) {
return false
}
const workspaceWindows = NiriService.windows.filter(w => w.workspace_id === currentWorkspaceId)
return workspaceWindows.length > 0 && activeWindow && activeWindow.title
} }
if (!currentWorkspaceId) { if (CompositorService.isHyprland) {
return false if (!Hyprland.focusedWorkspace || !activeWindow || !activeWindow.title) {
return false
}
const hyprlandToplevels = Array.from(Hyprland.toplevels.values)
const activeHyprToplevel = hyprlandToplevels.find(t => t.wayland === activeWindow)
if (!activeHyprToplevel || !activeHyprToplevel.workspace) {
return false
}
return activeHyprToplevel.workspace.id === Hyprland.focusedWorkspace.id
} }
const workspaceWindows = NiriService.windows.filter(w => w.workspace_id === currentWorkspaceId) return activeWindow && activeWindow.title
return workspaceWindows.length > 0 && activeWindow && activeWindow.title
} }
width: !hasWindowsOnCurrentWorkspace ? 0 : (compactMode ? Math.min(baseWidth, maxCompactWidth) : Math.min(baseWidth, maxNormalWidth)) width: !hasWindowsOnCurrentWorkspace ? 0 : (compactMode ? Math.min(baseWidth, maxCompactWidth) : Math.min(baseWidth, maxNormalWidth))