{-# LANGUAGE FlexibleContexts, FlexibleInstances, MultiParamTypeClasses #-}
{-# LANGUAGE PatternGuards #-}
{-# OPTIONS_GHC -Wno-dodgy-imports #-}
module XMonad.Layout.NoBorders (
noBorders
, smartBorders
, withBorder
, lessBorders
, hasBorder
, SetsAmbiguous(..)
, Ambiguity(..)
, With(..)
, BorderMessage (..), borderEventHook
, SmartBorder, WithBorder, ConfigurableBorder
) where
import XMonad
import XMonad.Prelude hiding (singleton)
import XMonad.Layout.LayoutModifier
import qualified XMonad.StackSet as W
import qualified XMonad.Util.Rectangle as R
import qualified Data.Map as M
data WithBorder a = WithBorder Dimension [a] deriving ( ReadPrec [WithBorder a]
ReadPrec (WithBorder a)
ReadS [WithBorder a]
forall a. Read a => ReadPrec [WithBorder a]
forall a. Read a => ReadPrec (WithBorder a)
forall a. Read a => Int -> ReadS (WithBorder a)
forall a. Read a => ReadS [WithBorder a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [WithBorder a]
$creadListPrec :: forall a. Read a => ReadPrec [WithBorder a]
readPrec :: ReadPrec (WithBorder a)
$creadPrec :: forall a. Read a => ReadPrec (WithBorder a)
readList :: ReadS [WithBorder a]
$creadList :: forall a. Read a => ReadS [WithBorder a]
readsPrec :: Int -> ReadS (WithBorder a)
$creadsPrec :: forall a. Read a => Int -> ReadS (WithBorder a)
Read, Int -> WithBorder a -> ShowS
forall a. Show a => Int -> WithBorder a -> ShowS
forall a. Show a => [WithBorder a] -> ShowS
forall a. Show a => WithBorder a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [WithBorder a] -> ShowS
$cshowList :: forall a. Show a => [WithBorder a] -> ShowS
show :: WithBorder a -> String
$cshow :: forall a. Show a => WithBorder a -> String
showsPrec :: Int -> WithBorder a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> WithBorder a -> ShowS
Show )
instance LayoutModifier WithBorder Window where
unhook :: WithBorder Window -> X ()
unhook (WithBorder Dimension
_ [Window]
s) = forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks (forall (l :: * -> *). XConfig l -> Dimension
borderWidth forall b c a. (b -> c) -> (a -> b) -> a -> c
. XConf -> XConfig Layout
config) forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= [Window] -> Dimension -> X ()
setBorders [Window]
s
redoLayout :: WithBorder Window
-> Rectangle
-> Maybe (Stack Window)
-> [(Window, Rectangle)]
-> X ([(Window, Rectangle)], Maybe (WithBorder Window))
redoLayout (WithBorder Dimension
n [Window]
s) Rectangle
_ Maybe (Stack Window)
_ [(Window, Rectangle)]
wrs = do
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks (forall (l :: * -> *). XConfig l -> Dimension
borderWidth forall b c a. (b -> c) -> (a -> b) -> a -> c
. XConf -> XConfig Layout
config) forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= [Window] -> Dimension -> X ()
setBorders ([Window]
s forall a. Eq a => [a] -> [a] -> [a]
\\ [Window]
ws)
[Window] -> Dimension -> X ()
setBorders [Window]
ws Dimension
n
forall (m :: * -> *) a. Monad m => a -> m a
return ([(Window, Rectangle)]
wrs, forall a. a -> Maybe a
Just forall a b. (a -> b) -> a -> b
$ forall a. Dimension -> [a] -> WithBorder a
WithBorder Dimension
n [Window]
ws)
where
ws :: [Window]
ws = forall a b. (a -> b) -> [a] -> [b]
map forall a b. (a, b) -> a
fst [(Window, Rectangle)]
wrs
noBorders :: LayoutClass l Window => l Window -> ModifiedLayout WithBorder l Window
noBorders :: forall (l :: * -> *).
LayoutClass l Window =>
l Window -> ModifiedLayout WithBorder l Window
noBorders = forall (l :: * -> *) a.
LayoutClass l a =>
Dimension -> l a -> ModifiedLayout WithBorder l a
withBorder Dimension
0
withBorder :: LayoutClass l a => Dimension -> l a -> ModifiedLayout WithBorder l a
withBorder :: forall (l :: * -> *) a.
LayoutClass l a =>
Dimension -> l a -> ModifiedLayout WithBorder l a
withBorder Dimension
b = forall (m :: * -> *) (l :: * -> *) a.
m a -> l a -> ModifiedLayout m l a
ModifiedLayout forall a b. (a -> b) -> a -> b
$ forall a. Dimension -> [a] -> WithBorder a
WithBorder Dimension
b []
setBorders :: [Window] -> Dimension -> X ()
setBorders :: [Window] -> Dimension -> X ()
setBorders [Window]
ws Dimension
bw = forall a. (Display -> X a) -> X a
withDisplay forall a b. (a -> b) -> a -> b
$ \Display
d -> forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (\Window
w -> forall (m :: * -> *) a. MonadIO m => IO a -> m a
io forall a b. (a -> b) -> a -> b
$ Display -> Window -> Dimension -> IO ()
setWindowBorderWidth Display
d Window
w Dimension
bw) [Window]
ws
singleton :: [a] -> Bool
singleton :: forall a. [a] -> Bool
singleton = forall (t :: * -> *) a. Foldable t => t a -> Bool
null forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Int -> [a] -> [a]
drop Int
1
type SmartBorder = ConfigurableBorder Ambiguity
smartBorders :: LayoutClass l a => l a -> ModifiedLayout SmartBorder l a
smartBorders :: forall (l :: * -> *) a.
LayoutClass l a =>
l a -> ModifiedLayout SmartBorder l a
smartBorders = forall p (l :: * -> *) a.
(SetsAmbiguous p, Read p, Show p, LayoutClass l a) =>
p -> l a -> ModifiedLayout (ConfigurableBorder p) l a
lessBorders Ambiguity
Never
lessBorders :: (SetsAmbiguous p, Read p, Show p, LayoutClass l a) =>
p -> l a -> ModifiedLayout (ConfigurableBorder p) l a
lessBorders :: forall p (l :: * -> *) a.
(SetsAmbiguous p, Read p, Show p, LayoutClass l a) =>
p -> l a -> ModifiedLayout (ConfigurableBorder p) l a
lessBorders p
amb = forall (m :: * -> *) (l :: * -> *) a.
m a -> l a -> ModifiedLayout m l a
ModifiedLayout (forall p w. p -> [w] -> [w] -> [w] -> ConfigurableBorder p w
ConfigurableBorder p
amb [] [] [])
hasBorder :: Bool -> ManageHook
hasBorder :: Bool -> Query (Endo WindowSet)
hasBorder Bool
b = forall r (m :: * -> *). MonadReader r m => m r
ask forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Window
w -> forall a. X a -> Query a
liftX (forall a. Message a => a -> X ()
broadcastMessage forall a b. (a -> b) -> a -> b
$ Bool -> Window -> BorderMessage
HasBorder Bool
b Window
w) forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall m. Monoid m => m
idHook
data BorderMessage
= HasBorder Bool Window
| ResetBorder Window
instance Message BorderMessage
data ConfigurableBorder p w = ConfigurableBorder
{ forall p w. ConfigurableBorder p w -> p
_generateHidden :: p
, forall p w. ConfigurableBorder p w -> [w]
alwaysHidden :: [w]
, forall p w. ConfigurableBorder p w -> [w]
neverHidden :: [w]
, forall p w. ConfigurableBorder p w -> [w]
currentHidden :: [w]
} deriving (ReadPrec [ConfigurableBorder p w]
ReadPrec (ConfigurableBorder p w)
ReadS [ConfigurableBorder p w]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
forall p w. (Read p, Read w) => ReadPrec [ConfigurableBorder p w]
forall p w. (Read p, Read w) => ReadPrec (ConfigurableBorder p w)
forall p w.
(Read p, Read w) =>
Int -> ReadS (ConfigurableBorder p w)
forall p w. (Read p, Read w) => ReadS [ConfigurableBorder p w]
readListPrec :: ReadPrec [ConfigurableBorder p w]
$creadListPrec :: forall p w. (Read p, Read w) => ReadPrec [ConfigurableBorder p w]
readPrec :: ReadPrec (ConfigurableBorder p w)
$creadPrec :: forall p w. (Read p, Read w) => ReadPrec (ConfigurableBorder p w)
readList :: ReadS [ConfigurableBorder p w]
$creadList :: forall p w. (Read p, Read w) => ReadS [ConfigurableBorder p w]
readsPrec :: Int -> ReadS (ConfigurableBorder p w)
$creadsPrec :: forall p w.
(Read p, Read w) =>
Int -> ReadS (ConfigurableBorder p w)
Read, Int -> ConfigurableBorder p w -> ShowS
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall p w.
(Show p, Show w) =>
Int -> ConfigurableBorder p w -> ShowS
forall p w. (Show p, Show w) => [ConfigurableBorder p w] -> ShowS
forall p w. (Show p, Show w) => ConfigurableBorder p w -> String
showList :: [ConfigurableBorder p w] -> ShowS
$cshowList :: forall p w. (Show p, Show w) => [ConfigurableBorder p w] -> ShowS
show :: ConfigurableBorder p w -> String
$cshow :: forall p w. (Show p, Show w) => ConfigurableBorder p w -> String
showsPrec :: Int -> ConfigurableBorder p w -> ShowS
$cshowsPrec :: forall p w.
(Show p, Show w) =>
Int -> ConfigurableBorder p w -> ShowS
Show)
{-# DEPRECATED borderEventHook "No longer needed." #-}
borderEventHook :: Event -> X All
borderEventHook :: Event -> X All
borderEventHook Event
_ = forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ Bool -> All
All Bool
True
instance (Read p, Show p, SetsAmbiguous p) => LayoutModifier (ConfigurableBorder p) Window where
unhook :: ConfigurableBorder p Window -> X ()
unhook (ConfigurableBorder p
_ [Window]
_ [Window]
_ [Window]
ch) = forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks (forall (l :: * -> *). XConfig l -> Dimension
borderWidth forall b c a. (b -> c) -> (a -> b) -> a -> c
. XConf -> XConfig Layout
config) forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= [Window] -> Dimension -> X ()
setBorders [Window]
ch
redoLayout :: ConfigurableBorder p Window
-> Rectangle
-> Maybe (Stack Window)
-> [(Window, Rectangle)]
-> X ([(Window, Rectangle)], Maybe (ConfigurableBorder p Window))
redoLayout cb :: ConfigurableBorder p Window
cb@(ConfigurableBorder p
gh [Window]
ah [Window]
nh [Window]
ch) Rectangle
lr Maybe (Stack Window)
mst [(Window, Rectangle)]
wrs = do
let gh' :: WindowSet -> m [Window]
gh' WindowSet
wset = let lh :: [Window]
lh = forall p.
SetsAmbiguous p =>
p
-> WindowSet
-> Rectangle
-> Maybe (Stack Window)
-> [(Window, Rectangle)]
-> [Window]
hiddens p
gh WindowSet
wset Rectangle
lr Maybe (Stack Window)
mst [(Window, Rectangle)]
wrs
in forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ ([Window]
ah forall a. Eq a => [a] -> [a] -> [a]
`union` [Window]
lh) forall a. Eq a => [a] -> [a] -> [a]
\\ [Window]
nh
[Window]
ch' <- forall a. (WindowSet -> X a) -> X a
withWindowSet forall {m :: * -> *}. Monad m => WindowSet -> m [Window]
gh'
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks (forall (l :: * -> *). XConfig l -> Dimension
borderWidth forall b c a. (b -> c) -> (a -> b) -> a -> c
. XConf -> XConfig Layout
config) forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= [Window] -> Dimension -> X ()
setBorders ([Window]
ch forall a. Eq a => [a] -> [a] -> [a]
\\ [Window]
ch')
[Window] -> Dimension -> X ()
setBorders [Window]
ch' Dimension
0
forall (m :: * -> *) a. Monad m => a -> m a
return ([(Window, Rectangle)]
wrs, forall a. a -> Maybe a
Just forall a b. (a -> b) -> a -> b
$ ConfigurableBorder p Window
cb { currentHidden :: [Window]
currentHidden = [Window]
ch' })
pureMess :: ConfigurableBorder p Window
-> SomeMessage -> Maybe (ConfigurableBorder p Window)
pureMess cb :: ConfigurableBorder p Window
cb@(ConfigurableBorder p
gh [Window]
ah [Window]
nh [Window]
ch) SomeMessage
m
| Just (HasBorder Bool
b Window
w) <- forall m. Message m => SomeMessage -> Maybe m
fromMessage SomeMessage
m =
let consNewIf :: [Window] -> Bool -> Maybe [Window]
consNewIf [Window]
l Bool
True = if Window
w forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [Window]
l then forall a. Maybe a
Nothing else forall a. a -> Maybe a
Just (Window
wforall a. a -> [a] -> [a]
:[Window]
l)
consNewIf [Window]
l Bool
False = forall a. a -> Maybe a
Just [Window]
l
in forall p w. p -> [w] -> [w] -> [w] -> ConfigurableBorder p w
ConfigurableBorder p
gh forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Window] -> Bool -> Maybe [Window]
consNewIf [Window]
ah (Bool -> Bool
not Bool
b)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Window] -> Bool -> Maybe [Window]
consNewIf [Window]
nh Bool
b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall (f :: * -> *) a. Applicative f => a -> f a
pure [Window]
ch
| Just (ResetBorder Window
w) <- forall m. Message m => SomeMessage -> Maybe m
fromMessage SomeMessage
m = Window -> Maybe (ConfigurableBorder p Window)
resetBorder Window
w
| Just DestroyWindowEvent { ev_window :: Event -> Window
ev_window = Window
w } <- forall m. Message m => SomeMessage -> Maybe m
fromMessage SomeMessage
m = Window -> Maybe (ConfigurableBorder p Window)
resetBorder Window
w
| Bool
otherwise = forall a. Maybe a
Nothing
where
resetBorder :: Window -> Maybe (ConfigurableBorder p Window)
resetBorder Window
w =
let delete' :: a -> [a] -> (Bool, [a])
delete' a
e [a]
l = if a
e forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [a]
l then (Bool
True,forall a. Eq a => a -> [a] -> [a]
delete a
e [a]
l) else (Bool
False,[a]
l)
(Bool
da,[Window]
ah') = forall {a}. Eq a => a -> [a] -> (Bool, [a])
delete' Window
w [Window]
ah
(Bool
dn,[Window]
nh') = forall {a}. Eq a => a -> [a] -> (Bool, [a])
delete' Window
w [Window]
nh
in if Bool
da Bool -> Bool -> Bool
|| Bool
dn
then forall a. a -> Maybe a
Just ConfigurableBorder p Window
cb { alwaysHidden :: [Window]
alwaysHidden = [Window]
ah', neverHidden :: [Window]
neverHidden = [Window]
nh' }
else forall a. Maybe a
Nothing
class SetsAmbiguous p where
hiddens :: p -> WindowSet -> Rectangle -> Maybe (W.Stack Window) -> [(Window, Rectangle)] -> [Window]
instance SetsAmbiguous Ambiguity where
hiddens :: Ambiguity
-> WindowSet
-> Rectangle
-> Maybe (Stack Window)
-> [(Window, Rectangle)]
-> [Window]
hiddens Ambiguity
amb WindowSet
wset Rectangle
lr Maybe (Stack Window)
mst [(Window, Rectangle)]
wrs
| Combine With
Union Ambiguity
a Ambiguity
b <- Ambiguity
amb = forall b c a. (b -> b -> c) -> (a -> b) -> a -> a -> c
on forall a. Eq a => [a] -> [a] -> [a]
union forall {p}. SetsAmbiguous p => p -> [Window]
next Ambiguity
a Ambiguity
b
| Combine With
Difference Ambiguity
a Ambiguity
b <- Ambiguity
amb = forall b c a. (b -> b -> c) -> (a -> b) -> a -> a -> c
on forall a. Eq a => [a] -> [a] -> [a]
(\\) forall {p}. SetsAmbiguous p => p -> [Window]
next Ambiguity
a Ambiguity
b
| Combine With
Intersection Ambiguity
a Ambiguity
b <- Ambiguity
amb = forall b c a. (b -> b -> c) -> (a -> b) -> a -> a -> c
on forall a. Eq a => [a] -> [a] -> [a]
intersect forall {p}. SetsAmbiguous p => p -> [Window]
next Ambiguity
a Ambiguity
b
| Bool
otherwise = forall {a}. [a] -> [a]
tiled [Window]
ms forall a. [a] -> [a] -> [a]
++ [Window]
floating
where next :: p -> [Window]
next p
p = forall p.
SetsAmbiguous p =>
p
-> WindowSet
-> Rectangle
-> Maybe (Stack Window)
-> [(Window, Rectangle)]
-> [Window]
hiddens p
p WindowSet
wset Rectangle
lr Maybe (Stack Window)
mst [(Window, Rectangle)]
wrs
screens :: [Screen String (Layout Window) Window ScreenId ScreenDetail]
screens = [ Screen String (Layout Window) Window ScreenId ScreenDetail
scr | Screen String (Layout Window) Window ScreenId ScreenDetail
scr <- forall i l a s sd. StackSet i l a s sd -> [Screen i l a s sd]
W.screens WindowSet
wset
, case Ambiguity
amb of
Ambiguity
Never -> Bool
True
Ambiguity
_ -> Bool -> Bool
not forall a b. (a -> b) -> a -> b
$ forall (t :: * -> *) a. Foldable t => t a -> Bool
null forall a b. (a -> b) -> a -> b
$ forall {i} {l} {a} {sid} {sd}. Screen i l a sid sd -> [a]
integrate Screen String (Layout Window) Window ScreenId ScreenDetail
scr
, Bool -> Bool
not forall b c a. (b -> c) -> (a -> b) -> a -> c
. Rectangle -> Bool
R.empty forall b c a. (b -> c) -> (a -> b) -> a -> c
. ScreenDetail -> Rectangle
screenRect
forall a b. (a -> b) -> a -> b
$ forall i l a sid sd. Screen i l a sid sd -> sd
W.screenDetail Screen String (Layout Window) Window ScreenId ScreenDetail
scr
]
thisScreen :: [Screen String (Layout Window) Window ScreenId ScreenDetail]
thisScreen = [ Screen String (Layout Window) Window ScreenId ScreenDetail
scr | Screen String (Layout Window) Window ScreenId ScreenDetail
scr <- forall i l a s sd. StackSet i l a s sd -> [Screen i l a s sd]
W.screens WindowSet
wset
, ScreenDetail -> Rectangle
screenRect (forall i l a sid sd. Screen i l a sid sd -> sd
W.screenDetail Screen String (Layout Window) Window ScreenId ScreenDetail
scr) Rectangle -> Rectangle -> Bool
`R.supersetOf` Rectangle
lr ]
floating :: [Window]
floating = do
Screen String (Layout Window) Window ScreenId ScreenDetail
scr <- [Screen String (Layout Window) Window ScreenId ScreenDetail]
thisScreen
let wz :: Integer -> (Window,Rectangle)
-> (Integer,Window,Rectangle)
wz :: Integer -> (Window, Rectangle) -> (Integer, Window, Rectangle)
wz Integer
i (Window
w,Rectangle
wr) = (Integer
i,Window
w,Rectangle
wr)
ts :: [(Integer, Window, Rectangle)]
ts = forall {a}. [a] -> [a]
reverse forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith Integer -> (Window, Rectangle) -> (Integer, Window, Rectangle)
wz [-Integer
1,-Integer
2..] forall a b. (a -> b) -> a -> b
$ [(Window, Rectangle)]
wrs
fs :: [(Integer, Window, Rectangle)]
fs = forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith Integer -> (Window, Rectangle) -> (Integer, Window, Rectangle)
wz [Integer
0..] forall a b. (a -> b) -> a -> b
$ do
Window
w <- forall {a}. [a] -> [a]
reverse forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Maybe (Stack a) -> [a]
W.integrate' forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall i l a. Workspace i l a -> Maybe (Stack a)
W.stack forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall i l a sid sd. Screen i l a sid sd -> Workspace i l a
W.workspace forall a b. (a -> b) -> a -> b
$ Screen String (Layout Window) Window ScreenId ScreenDetail
scr
Just RationalRect
wr <- [forall k a. Ord k => k -> Map k a -> Maybe a
M.lookup Window
w (forall i l a sid sd. StackSet i l a sid sd -> Map a RationalRect
W.floating WindowSet
wset)]
forall (m :: * -> *) a. Monad m => a -> m a
return (Window
w,Rectangle -> RationalRect -> Rectangle
scaleRationalRect Rectangle
sr RationalRect
wr)
sr :: Rectangle
sr = ScreenDetail -> Rectangle
screenRect forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall i l a sid sd. Screen i l a sid sd -> sd
W.screenDetail forall a b. (a -> b) -> a -> b
$ Screen String (Layout Window) Window ScreenId ScreenDetail
scr
(Integer
i1,Window
w1,Rectangle
wr1) <- [(Integer, Window, Rectangle)]
fs
forall (f :: * -> *). Alternative f => Bool -> f ()
guard forall a b. (a -> b) -> a -> b
$ case Ambiguity
amb of
Ambiguity
OnlyLayoutFloatBelow ->
let vu :: [Bool]
vu = do
Rectangle
gr <- Rectangle
sr Rectangle -> Rectangle -> [Rectangle]
`R.difference` Rectangle
lr
(Integer
i2,Window
_w2,Rectangle
wr2) <- [(Integer, Window, Rectangle)]
ts forall a. [a] -> [a] -> [a]
++ [(Integer, Window, Rectangle)]
fs
forall (f :: * -> *). Alternative f => Bool -> f ()
guard forall a b. (a -> b) -> a -> b
$ Integer
i2 forall a. Ord a => a -> a -> Bool
< Integer
i1
[Rectangle
wr2 Rectangle -> Rectangle -> Bool
`R.intersects` Rectangle
gr]
in Rectangle
lr forall a. Eq a => a -> a -> Bool
== Rectangle
wr1 Bool -> Bool -> Bool
&& (Bool -> Bool
not forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (t :: * -> *). Foldable t => t Bool -> Bool
or) [Bool]
vu
Ambiguity
OnlyLayoutFloat ->
Rectangle
lr forall a. Eq a => a -> a -> Bool
== Rectangle
wr1
Ambiguity
OnlyFloat ->
Bool
True
Ambiguity
_ ->
Rectangle
wr1 Rectangle -> Rectangle -> Bool
`R.supersetOf` Rectangle
sr
forall (m :: * -> *) a. Monad m => a -> m a
return Window
w1
ms :: [Window]
ms = forall a. (a -> Bool) -> [a] -> [a]
filter (forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` forall a. Maybe (Stack a) -> [a]
W.integrate' Maybe (Stack Window)
mst) forall a b. (a -> b) -> a -> b
$ forall a b. (a -> b) -> [a] -> [b]
map forall a b. (a, b) -> a
fst [(Window, Rectangle)]
wrs
tiled :: [a] -> [a]
tiled [a
w]
| Ambiguity
Screen <- Ambiguity
amb = [a
w]
| Ambiguity
OnlyScreenFloat <- Ambiguity
amb = []
| Ambiguity
OnlyLayoutFloat <- Ambiguity
amb = []
| Ambiguity
OnlyFloat <- Ambiguity
amb = []
| Ambiguity
OnlyLayoutFloatBelow <- Ambiguity
amb = []
| Ambiguity
OtherIndicated <- Ambiguity
amb
, let nonF :: [[Window]]
nonF = forall a b. (a -> b) -> [a] -> [b]
map forall {i} {l} {a} {sid} {sd}. Screen i l a sid sd -> [a]
integrate forall a b. (a -> b) -> a -> b
$ forall i l a sid sd. StackSet i l a sid sd -> Screen i l a sid sd
W.current WindowSet
wset forall a. a -> [a] -> [a]
: forall i l a s sd. StackSet i l a s sd -> [Screen i l a s sd]
W.visible WindowSet
wset
, forall (t :: * -> *) a. Foldable t => t a -> Int
length (forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[Window]]
nonF) forall a. Ord a => a -> a -> Bool
> forall (t :: * -> *) a. Foldable t => t a -> Int
length [(Window, Rectangle)]
wrs
, forall a. [a] -> Bool
singleton forall a b. (a -> b) -> a -> b
$ forall a. (a -> Bool) -> [a] -> [a]
filter (Int
1forall a. Eq a => a -> a -> Bool
==) forall a b. (a -> b) -> a -> b
$ forall a b. (a -> b) -> [a] -> [b]
map forall (t :: * -> *) a. Foldable t => t a -> Int
length [[Window]]
nonF = [a
w]
| forall a. [a] -> Bool
singleton [Screen String (Layout Window) Window ScreenId ScreenDetail]
screens = [a
w]
tiled [a]
_ = []
integrate :: Screen i l a sid sd -> [a]
integrate Screen i l a sid sd
y = forall a. Maybe (Stack a) -> [a]
W.integrate' forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall i l a. Workspace i l a -> Maybe (Stack a)
W.stack forall a b. (a -> b) -> a -> b
$ forall i l a sid sd. Screen i l a sid sd -> Workspace i l a
W.workspace Screen i l a sid sd
y
data Ambiguity
= Combine With Ambiguity Ambiguity
| OnlyLayoutFloatBelow
| OnlyLayoutFloat
| OnlyScreenFloat
| Never
| EmptyScreen
| OtherIndicated
| OnlyFloat
| Screen
deriving (ReadPrec [Ambiguity]
ReadPrec Ambiguity
Int -> ReadS Ambiguity
ReadS [Ambiguity]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Ambiguity]
$creadListPrec :: ReadPrec [Ambiguity]
readPrec :: ReadPrec Ambiguity
$creadPrec :: ReadPrec Ambiguity
readList :: ReadS [Ambiguity]
$creadList :: ReadS [Ambiguity]
readsPrec :: Int -> ReadS Ambiguity
$creadsPrec :: Int -> ReadS Ambiguity
Read, Int -> Ambiguity -> ShowS
[Ambiguity] -> ShowS
Ambiguity -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Ambiguity] -> ShowS
$cshowList :: [Ambiguity] -> ShowS
show :: Ambiguity -> String
$cshow :: Ambiguity -> String
showsPrec :: Int -> Ambiguity -> ShowS
$cshowsPrec :: Int -> Ambiguity -> ShowS
Show)
data With = Union
| Difference
| Intersection
deriving (ReadPrec [With]
ReadPrec With
Int -> ReadS With
ReadS [With]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [With]
$creadListPrec :: ReadPrec [With]
readPrec :: ReadPrec With
$creadPrec :: ReadPrec With
readList :: ReadS [With]
$creadList :: ReadS [With]
readsPrec :: Int -> ReadS With
$creadsPrec :: Int -> ReadS With
Read, Int -> With -> ShowS
[With] -> ShowS
With -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [With] -> ShowS
$cshowList :: [With] -> ShowS
show :: With -> String
$cshow :: With -> String
showsPrec :: Int -> With -> ShowS
$cshowsPrec :: Int -> With -> ShowS
Show)