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 remaining = {}
local target_address = target and target.address
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
end
end
@@ -1218,16 +1219,24 @@ end
local function hydrate_minimized_windows()
local by_address = {}
local current_by_address = {}
local hydrated = {}
for _, window in ipairs(minimized_windows) do
if window and window.address and not by_address[window.address] then
by_address[window.address] = true
hydrated[#hydrated + 1] = window
for _, window in ipairs(hl.get_windows()) do
if window and window.address then
current_by_address[window.address] = window
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
by_address[window.address] = true
hydrated[#hydrated + 1] = window

View File

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

View File

@@ -2,6 +2,7 @@
module TaffybarConfig.Workspaces
( workspaceLabelSetter,
workspaceShowPredicate,
workspaceWindowIconGetter,
)
where
@@ -39,16 +40,31 @@ remapNSP :: String -> String
remapNSP "NSP" = "S"
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 workspace = do
backendType <- asks backend
let identity = WorkspaceModel.workspaceIdentity workspace
fallbackLabel = remapNSP $ T.unpack (WorkspaceModel.workspaceName identity)
case (backendType, WorkspaceModel.workspaceNumericId identity) of
(BackendX11, Just workspaceId) -> do
fullNames <- runX11Def [] x11FullWorkspaceNames
return $ remapNSP $ fromMaybe fallbackLabel (lookup (WorkspaceId workspaceId) fullNames)
_ -> return fallbackLabel
if workspaceIsMinimizedBucket workspace
then return "M"
else case (backendType, WorkspaceModel.workspaceNumericId identity) of
(BackendX11, Just workspaceId) -> do
fullNames <- runX11Def [] x11FullWorkspaceNames
return $ remapNSP $ fromMaybe fallbackLabel (lookup (WorkspaceId workspaceId) fullNames)
_ -> return fallbackLabel
iconRemap :: [(Text, [Text])]
iconRemap =

View File

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