Show Hyprland minimized windows in taffybar
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
module TaffybarConfig.Workspaces
|
||||
( workspaceLabelSetter,
|
||||
workspaceShowPredicate,
|
||||
workspaceWindowIconGetter,
|
||||
)
|
||||
where
|
||||
@@ -39,12 +40,27 @@ 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
|
||||
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)
|
||||
|
||||
6
dotfiles/config/taffybar/flake.lock
generated
6
dotfiles/config/taffybar/flake.lock
generated
@@ -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": {
|
||||
|
||||
Submodule dotfiles/config/taffybar/taffybar updated: 242682ac0b...e52f00e8d6
Reference in New Issue
Block a user