notes on the firefox bug

basically we have to set focus ourselves. This means when we start
managing a window, and when an XCrossingEvent occurs (which we don't
handle). 

On Manage/Enter, we set focus. on Leave we set focus to root.
See event.c and focus.c in dwm for more details.
This commit is contained in:
Don Stewart
2007-03-09 16:25:10 +00:00
parent ef8581079d
commit a78c857719

20
Main.hs
View File

@@ -72,9 +72,9 @@ main = do
r <- io $ rootWindow dpy dflt
io $ sync dpy False
io $ selectInput dpy r $ substructureRedirectMask
.|. substructureNotifyMask
.|. enterWindowMask
.|. leaveWindowMask
.|. substructureNotifyMask
.|. enterWindowMask
.|. leaveWindowMask
grabKeys dpy r
@@ -115,6 +115,11 @@ grabKeys dpy r = do
-- [LeaveNotify] = leavenotify,
-- [Expose] = expose,
-- [PropertyNotify] = propertynotify,
--
-- on EnterNotify we should SetFocus to the window we're entering,
-- on LeaveNotify, we set it back to root.
--
-- Needs XCrossing support
--
handle :: Event -> W ()
@@ -199,11 +204,18 @@ windows f = do
-- | manage. Add a new window to be managed in the current workspace. Bring it into focus.
-- If the window is already under management, it is just raised.
--
-- When we start to manage a window, it gains focus.
--
manage :: Window -> W ()
manage w = do
withDisplay $ io . flip mapWindow w
withDisplay $ \d -> io $ do
mapWindow d w
-- setInputFocus d w revertToPointerRoot 0 -- CurrentTime
windows $ W.push w
-- | unmanage. A window no longer exists, remove it from the window
-- list, on whatever workspace it is.
unmanage :: Window -> W ()