mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-08-11 02:02:11 -07:00
Add restoreHiddenWindow function to XMonad.Layout.Hidden, restoring a specific window
This commit is contained in:
committed by
Leon Kowarschick
parent
8ba646aec6
commit
65036457cc
@@ -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
|
||||||
|
|
||||||
|
@@ -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 })
|
|
||||||
|
Reference in New Issue
Block a user