[XMonad] Scratchpads restore shape when summoned, spotify scratchpad works

This commit is contained in:
Ivan Malison 2021-08-12 00:36:58 -06:00
parent 2d99e5337f
commit d0474a4d35
No known key found for this signature in database
GPG Key ID: 62530EFBE99DC2F8

View File

@ -54,6 +54,7 @@ import XMonad.Actions.WindowGo
import XMonad.Actions.WorkspaceNames
import XMonad.Config ()
import XMonad.Core (getDirectories)
import XMonad.Hooks.DynamicProperty
import XMonad.Hooks.EwmhDesktops
import XMonad.Hooks.FadeInactive
import XMonad.Hooks.ManageDocks
@ -86,7 +87,7 @@ import XMonad.Util.CustomKeys
import qualified XMonad.Util.Dmenu as DM
import qualified XMonad.Util.ExtensibleState as XS
import XMonad.Util.Minimize
import XMonad.Util.NamedScratchpad
import XMonad.Util.NamedScratchpad as NS
import XMonad.Util.NamedWindows (getName)
import XMonad.Util.Run
import XMonad.Util.Themes
@ -101,12 +102,18 @@ myConfig = def
, borderWidth = 0
, normalBorderColor = "#0096ff"
, focusedBorderColor = "#ffff00"
, logHook =
updatePointer (0.5, 0.5) (0, 0) <>
toggleFadeInactiveLogHook 0.9 <> workspaceHistoryHook <>
setWorkspaceNames <> activateLogHook (reader W.focusWindow >>= doF) <+> logHook def
, handleEventHook =
followIfNoMagicFocus <> minimizeEventHook <> restartEventHook
, logHook
= updatePointer (0.5, 0.5) (0, 0)
<> toggleFadeInactiveLogHook 0.9
<> workspaceHistoryHook
<> setWorkspaceNames
<> activateLogHook (reader W.focusWindow >>= doF)
<> logHook def
, handleEventHook
= followIfNoMagicFocus
<> minimizeEventHook
<> restartEventHook
<> myScratchPadEventHook
, startupHook = myStartup
, keys = customKeys (const []) addKeys
}
@ -780,9 +787,29 @@ scratchpads =
, NS "volume" volumeCommand volumeSelector nearFullFloat
]
myScratchPadManageHook = namedScratchpadManageHook scratchpads
-- We need this event hook because some scratchpad applications (Spotify) don't
-- actually properly set their class at startup.
myScratchPadEventHook
= dynamicPropertyChange "WM_CLASS" myScratchPadManageHook
<> dynamicPropertyChange "WM_NAME" myScratchPadManageHook
runScratchPadManageHookOnCurrent =
join (withFocusedD (Endo id) $ runQuery myScratchPadManageHook) >>= windows . appEndo
scratchPadIsDisplayed name = join $ withFocusedD False query
where
query = maybe (const $ return False) (runQuery . NS.query) scratchpadInfo
scratchpadInfo = find ((name ==) . NS.name) scratchpads
manageIfScratchPadIsDisplayed name =
scratchPadIsDisplayed name >>= (`when` runScratchPadManageHookOnCurrent)
-- TODO: This doesnt work well with minimized windows
doScratchpad =
maybeUnminimizeAfter . deactivateFullAnd . namedScratchpadAction scratchpads
doScratchpad name = do
maybeUnminimizeAfter $ deactivateFullAnd $ namedScratchpadAction scratchpads name
manageIfScratchPadIsDisplayed name
-- Raise or spawn