Show Hyprland minimized windows in taffybar

This commit is contained in:
2026-05-07 02:48:54 -07:00
parent a58b8fb6aa
commit 58ad1bc679
5 changed files with 42 additions and 21 deletions

View File

@@ -1199,8 +1199,9 @@ end
local function remove_minimized_window(target) local function remove_minimized_window(target)
local remaining = {} local remaining = {}
local target_address = target and target.address
for _, window in ipairs(minimized_windows) do for _, window in ipairs(minimized_windows) do
if window and window ~= target then if window and window.address ~= target_address then
remaining[#remaining + 1] = window remaining[#remaining + 1] = window
end end
end end
@@ -1218,16 +1219,24 @@ end
local function hydrate_minimized_windows() local function hydrate_minimized_windows()
local by_address = {} local by_address = {}
local current_by_address = {}
local hydrated = {} local hydrated = {}
for _, window in ipairs(minimized_windows) do for _, window in ipairs(hl.get_windows()) do
if window and window.address and not by_address[window.address] then if window and window.address then
by_address[window.address] = true current_by_address[window.address] = window
hydrated[#hydrated + 1] = window
end end
end end
for _, window in ipairs(hl.get_windows()) do for _, window in ipairs(minimized_windows) do
local current = window and window.address and current_by_address[window.address]
if current and is_minimized_window(current) and not by_address[current.address] then
by_address[current.address] = true
hydrated[#hydrated + 1] = current
end
end
for _, window in pairs(current_by_address) do
if window and window.address and is_minimized_window(window) and not by_address[window.address] then if window and window.address and is_minimized_window(window) and not by_address[window.address] then
by_address[window.address] = true by_address[window.address] = true
hydrated[#hydrated + 1] = window hydrated[#hydrated + 1] = window

View File

@@ -26,7 +26,7 @@ import TaffybarConfig.WidgetUtil
stackInPill, stackInPill,
usageLogoWidget, usageLogoWidget,
) )
import TaffybarConfig.Workspaces (workspaceLabelSetter, workspaceWindowIconGetter) import TaffybarConfig.Workspaces (workspaceLabelSetter, workspaceShowPredicate, workspaceWindowIconGetter)
import System.Environment (lookupEnv) import System.Environment (lookupEnv)
import System.Environment.XDG.BaseDir (getUserConfigFile) import System.Environment.XDG.BaseDir (getUserConfigFile)
import System.Taffybar.Context import System.Taffybar.Context
@@ -34,7 +34,6 @@ import System.Taffybar.Context
TaffyIO, TaffyIO,
) )
import System.Taffybar.Information.Memory (MemoryInfo (..), parseMeminfo) import System.Taffybar.Information.Memory (MemoryInfo (..), parseMeminfo)
import qualified System.Taffybar.Information.Workspaces.Model as WorkspaceModel
import System.Taffybar.Util (postGUIASync) import System.Taffybar.Util (postGUIASync)
import System.Taffybar.Widget import System.Taffybar.Widget
import qualified System.Taffybar.Widget.ASUS as ASUS import qualified System.Taffybar.Widget.ASUS as ASUS
@@ -110,10 +109,7 @@ workspacesWidget =
Workspaces.minIcons = 1, Workspaces.minIcons = 1,
Workspaces.getWindowIconPixbuf = workspaceWindowIconGetter, Workspaces.getWindowIconPixbuf = workspaceWindowIconGetter,
Workspaces.labelSetter = workspaceLabelSetter, Workspaces.labelSetter = workspaceLabelSetter,
Workspaces.showWorkspaceFn = Workspaces.showWorkspaceFn = workspaceShowPredicate
\workspace ->
Workspaces.hideEmpty workspace
&& not (WorkspaceModel.workspaceIsSpecial workspace)
} }
clockWidget :: TaffyIO Gtk.Widget clockWidget :: TaffyIO Gtk.Widget

View File

@@ -2,6 +2,7 @@
module TaffybarConfig.Workspaces module TaffybarConfig.Workspaces
( workspaceLabelSetter, ( workspaceLabelSetter,
workspaceShowPredicate,
workspaceWindowIconGetter, workspaceWindowIconGetter,
) )
where where
@@ -39,12 +40,27 @@ remapNSP :: String -> String
remapNSP "NSP" = "S" remapNSP "NSP" = "S"
remapNSP n = n remapNSP n = n
workspaceIsMinimizedBucket :: WorkspaceModel.WorkspaceInfo -> Bool
workspaceIsMinimizedBucket workspace =
let name =
T.toLower $
WorkspaceModel.workspaceName $
WorkspaceModel.workspaceIdentity workspace
in name == "minimized" || name == "special:minimized"
workspaceShowPredicate :: WorkspaceModel.WorkspaceInfo -> Bool
workspaceShowPredicate workspace =
Workspaces.hideEmpty workspace
&& (not (WorkspaceModel.workspaceIsSpecial workspace) || workspaceIsMinimizedBucket workspace)
workspaceLabelSetter :: WorkspaceModel.WorkspaceInfo -> TaffyIO String workspaceLabelSetter :: WorkspaceModel.WorkspaceInfo -> TaffyIO String
workspaceLabelSetter workspace = do workspaceLabelSetter workspace = do
backendType <- asks backend backendType <- asks backend
let identity = WorkspaceModel.workspaceIdentity workspace let identity = WorkspaceModel.workspaceIdentity workspace
fallbackLabel = remapNSP $ T.unpack (WorkspaceModel.workspaceName identity) fallbackLabel = remapNSP $ T.unpack (WorkspaceModel.workspaceName identity)
case (backendType, WorkspaceModel.workspaceNumericId identity) of if workspaceIsMinimizedBucket workspace
then return "M"
else case (backendType, WorkspaceModel.workspaceNumericId identity) of
(BackendX11, Just workspaceId) -> do (BackendX11, Just workspaceId) -> do
fullNames <- runX11Def [] x11FullWorkspaceNames fullNames <- runX11Def [] x11FullWorkspaceNames
return $ remapNSP $ fromMaybe fallbackLabel (lookup (WorkspaceId workspaceId) fullNames) return $ remapNSP $ fromMaybe fallbackLabel (lookup (WorkspaceId workspaceId) fullNames)

View File

@@ -136,11 +136,11 @@
"xmonad-contrib": "xmonad-contrib" "xmonad-contrib": "xmonad-contrib"
}, },
"locked": { "locked": {
"lastModified": 1777963658, "lastModified": 1778147268,
"narHash": "sha256-ZmIB9XreL99khpPXCYB+LP24/ovMRSQ5DMtJj0ySO4Y=", "narHash": "sha256-q/1DIMXQEU4y95gAFacnrHwqxYbkpqwtpmVGTFmmTMo=",
"owner": "taffybar", "owner": "taffybar",
"repo": "taffybar", "repo": "taffybar",
"rev": "b078f1d47fbb71d03843d7c3d9320c128b6bc5a1", "rev": "e52f00e8d6a0fe903dada5001778808d093eafb6",
"type": "github" "type": "github"
}, },
"original": { "original": {