Show Hyprland minimized windows in taffybar
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
module TaffybarConfig.Workspaces
|
module TaffybarConfig.Workspaces
|
||||||
( workspaceLabelSetter,
|
( workspaceLabelSetter,
|
||||||
|
workspaceShowPredicate,
|
||||||
workspaceWindowIconGetter,
|
workspaceWindowIconGetter,
|
||||||
)
|
)
|
||||||
where
|
where
|
||||||
@@ -39,16 +40,31 @@ 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
|
||||||
(BackendX11, Just workspaceId) -> do
|
then return "M"
|
||||||
fullNames <- runX11Def [] x11FullWorkspaceNames
|
else case (backendType, WorkspaceModel.workspaceNumericId identity) of
|
||||||
return $ remapNSP $ fromMaybe fallbackLabel (lookup (WorkspaceId workspaceId) fullNames)
|
(BackendX11, Just workspaceId) -> do
|
||||||
_ -> return fallbackLabel
|
fullNames <- runX11Def [] x11FullWorkspaceNames
|
||||||
|
return $ remapNSP $ fromMaybe fallbackLabel (lookup (WorkspaceId workspaceId) fullNames)
|
||||||
|
_ -> return fallbackLabel
|
||||||
|
|
||||||
iconRemap :: [(Text, [Text])]
|
iconRemap :: [(Text, [Text])]
|
||||||
iconRemap =
|
iconRemap =
|
||||||
|
|||||||
6
dotfiles/config/taffybar/flake.lock
generated
6
dotfiles/config/taffybar/flake.lock
generated
@@ -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": {
|
||||||
|
|||||||
Submodule dotfiles/config/taffybar/taffybar updated: 242682ac0b...e52f00e8d6
Reference in New Issue
Block a user