Add restoreHiddenWindow function to XMonad.Layout.Hidden, restoring a specific window

This commit is contained in:
Leon Kowarschick
2020-06-13 14:59:28 +02:00
committed by Leon Kowarschick
parent 8ba646aec6
commit 65036457cc
2 changed files with 25 additions and 9 deletions

View File

@@ -108,6 +108,7 @@
* `XMonad.Layout.Hidden` * `XMonad.Layout.Hidden`
- Export `HiddenWindows` type constructor. - Export `HiddenWindows` type constructor.
- Export `popHiddenWindow` function restoring a specific window.
## 0.16 ## 0.16

View File

@@ -26,6 +26,7 @@ module XMonad.Layout.Hidden
, hideWindow , hideWindow
, popOldestHiddenWindow , popOldestHiddenWindow
, popNewestHiddenWindow , popNewestHiddenWindow
, popHiddenWindow
) where ) where
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
@@ -63,9 +64,10 @@ data HiddenWindows a = HiddenWindows [Window] deriving (Show, Read)
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- | Messages for the @HiddenWindows@ layout modifier. -- | Messages for the @HiddenWindows@ layout modifier.
data HiddenMsg = HideWindow Window -- ^ Hide a window. data HiddenMsg = HideWindow Window -- ^ Hide a window.
| PopNewestHiddenWindow -- ^ Restore window (FILO). | PopNewestHiddenWindow -- ^ Restore window (FILO).
| PopOldestHiddenWindow -- ^ Restore window (FIFO). | PopOldestHiddenWindow -- ^ Restore window (FIFO).
| PopSpecificHiddenWindow Window -- ^ Restore specific window.
deriving (Typeable, Eq) deriving (Typeable, Eq)
instance Message HiddenMsg instance Message HiddenMsg
@@ -73,10 +75,11 @@ instance Message HiddenMsg
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
instance LayoutModifier HiddenWindows Window where instance LayoutModifier HiddenWindows Window where
handleMess h@(HiddenWindows hidden) mess handleMess h@(HiddenWindows hidden) mess
| Just (HideWindow win) <- fromMessage mess = hideWindowMsg h win | Just (HideWindow win) <- fromMessage mess = hideWindowMsg h win
| Just (PopNewestHiddenWindow) <- fromMessage mess = popNewestMsg h | Just (PopNewestHiddenWindow) <- fromMessage mess = popNewestMsg h
| Just (PopOldestHiddenWindow) <- fromMessage mess = popOldestMsg h | Just (PopOldestHiddenWindow) <- fromMessage mess = popOldestMsg h
| Just ReleaseResources <- fromMessage mess = doUnhook | Just (PopSpecificHiddenWindow win) <- fromMessage mess = popSpecificMsg win h
| Just ReleaseResources <- fromMessage mess = doUnhook
| otherwise = return Nothing | otherwise = return Nothing
where doUnhook = do mapM_ restoreWindow hidden where doUnhook = do mapM_ restoreWindow hidden
return Nothing return Nothing
@@ -108,6 +111,9 @@ popOldestHiddenWindow = sendMessage PopOldestHiddenWindow
popNewestHiddenWindow :: X () popNewestHiddenWindow :: X ()
popNewestHiddenWindow = sendMessage PopNewestHiddenWindow popNewestHiddenWindow = sendMessage PopNewestHiddenWindow
popHiddenWindow :: Window -> X ()
popHiddenWindow = sendMessage . PopSpecificHiddenWindow
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
hideWindowMsg :: HiddenWindows a -> Window -> X (Maybe (HiddenWindows a)) hideWindowMsg :: HiddenWindows a -> Window -> X (Maybe (HiddenWindows a))
hideWindowMsg (HiddenWindows hidden) win = do hideWindowMsg (HiddenWindows hidden) win = do
@@ -129,7 +135,16 @@ popOldestMsg (HiddenWindows (win:rest)) = do
restoreWindow win restoreWindow win
return . Just . HiddenWindows $ rest return . Just . HiddenWindows $ rest
--------------------------------------------------------------------------------
popSpecificMsg :: Window -> HiddenWindows a -> X (Maybe (HiddenWindows a))
popSpecificMsg _ (HiddenWindows []) = return Nothing
popSpecificMsg win (HiddenWindows hiddenWins) = if win `elem` hiddenWins
then do
restoreWindow win
return . Just . HiddenWindows $ filter (/= win) hiddenWins
else
return . Just . HiddenWindows $ hiddenWins
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
restoreWindow :: Window -> X () restoreWindow :: Window -> X ()
restoreWindow win = restoreWindow = windows . W.insertUp
modify (\s -> s { windowset = W.insertUp win $ windowset s })