mirror of
https://github.com/xmonad/xmonad.git
synced 2025-05-19 08:30:21 -07:00
Handle several more events, should fix several issues.
This commit is contained in:
parent
e069b349b8
commit
96184564d6
33
Main.hs
33
Main.hs
@ -78,8 +78,12 @@ handle :: Event -> W ()
|
||||
handle (MapRequestEvent {window = w}) = manage w
|
||||
|
||||
handle (DestroyWindowEvent {window = w}) = do
|
||||
modifyWindows (filter (/= w))
|
||||
refresh
|
||||
ws <- getWindows
|
||||
when (elem w ws) (unmanage w)
|
||||
|
||||
handle (UnmapEvent {window = w}) = do
|
||||
ws <- getWindows
|
||||
when (elem w ws) (unmanage w)
|
||||
|
||||
handle (KeyEvent {event_type = t, state = mod, keycode = code})
|
||||
| t == keyPress = do
|
||||
@ -89,6 +93,20 @@ handle (KeyEvent {event_type = t, state = mod, keycode = code})
|
||||
[] -> return ()
|
||||
((_, _, act):_) -> act
|
||||
|
||||
handle e@(ConfigureRequestEvent {}) = do
|
||||
dpy <- getDisplay
|
||||
io $ configureWindow dpy (window e) (value_mask e) $
|
||||
WindowChanges
|
||||
{ wcX = x e
|
||||
, wcY = y e
|
||||
, wcWidth = width e
|
||||
, wcHeight = height e
|
||||
, wcBorderWidth = border_width e
|
||||
, wcSibling = above e
|
||||
, wcStackMode = detail e
|
||||
}
|
||||
io $ sync dpy False
|
||||
|
||||
handle _ = return ()
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
@ -130,6 +148,17 @@ manage w = do
|
||||
withWindows $ \ws -> if w `elem` ws then ws else w:ws -- a set
|
||||
io $ mapWindow d w
|
||||
|
||||
--
|
||||
-- | unmanage, a window no longer exists, remove it from the stack
|
||||
--
|
||||
unmanage :: Window -> W ()
|
||||
unmanage w = do
|
||||
dpy <- getDisplay
|
||||
io $ grabServer dpy
|
||||
modifyWindows (filter (/= w))
|
||||
io $ sync dpy False
|
||||
io $ ungrabServer dpy
|
||||
refresh
|
||||
|
||||
--
|
||||
-- | switch. switch focus to next window in list.
|
||||
|
Loading…
x
Reference in New Issue
Block a user