aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--XMonad/Hooks/ICCCMFocus.hs57
-rw-r--r--xmonad-contrib.cabal1
2 files changed, 58 insertions, 0 deletions
diff --git a/XMonad/Hooks/ICCCMFocus.hs b/XMonad/Hooks/ICCCMFocus.hs
new file mode 100644
index 0000000..c059ad2
--- /dev/null
+++ b/XMonad/Hooks/ICCCMFocus.hs
@@ -0,0 +1,57 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module : XMonad.Hooks.ICCCMFocus
+-- License : BSD
+--
+-- Maintainer : Tony Morris <haskell@tmorris.net>
+--
+-- Implemented in your @logHook@, Java swing applications will not misbehave
+-- when it comes to taking and losing focus.
+--
+-- This has been done by taking the patch in <http://code.google.com/p/xmonad/issues/detail?id=177> and refactoring it so that it can be included in @~\/.xmonad\/xmonad.hs@.
+--
+-- @
+-- conf' =
+-- conf {
+-- logHook = takeTopFocus
+-- }
+-- @
+-----------------------------------------------------------------------------
+module XMonad.Hooks.ICCCMFocus
+(
+ atom_WM_TAKE_FOCUS
+, takeFocusX
+, takeTopFocus
+) where
+
+import XMonad
+import XMonad.Hooks.SetWMName
+import qualified XMonad.StackSet as W
+import Control.Monad
+
+atom_WM_TAKE_FOCUS ::
+ X Atom
+atom_WM_TAKE_FOCUS =
+ getAtom "WM_TAKE_FOCUS"
+
+takeFocusX ::
+ Window
+ -> X ()
+takeFocusX w =
+ withWindowSet . const $ do
+ dpy <- asks display
+ wmtakef <- atom_WM_TAKE_FOCUS
+ wmprot <- atom_WM_PROTOCOLS
+ protocols <- io $ getWMProtocols dpy w
+ when (wmtakef `elem` protocols) $
+ io . allocaXEvent $ \ev -> do
+ setEventType ev clientMessage
+ setClientMessageEvent ev w wmprot 32 wmtakef currentTime
+ sendEvent dpy w False noEventMask ev
+
+-- | The value to add to your log hook configuration.
+takeTopFocus ::
+ X ()
+takeTopFocus =
+ (withWindowSet $ maybe (setFocusX =<< asks theRoot) takeFocusX . W.peek) >> setWMName "LG3D"
+
diff --git a/xmonad-contrib.cabal b/xmonad-contrib.cabal
index 8c59e65..4ab0882 100644
--- a/xmonad-contrib.cabal
+++ b/xmonad-contrib.cabal
@@ -142,6 +142,7 @@ library
XMonad.Hooks.EwmhDesktops
XMonad.Hooks.FadeInactive
XMonad.Hooks.FloatNext
+ XMonad.Hooks.ICCCMFocus
XMonad.Hooks.InsertPosition
XMonad.Hooks.ManageDocks
XMonad.Hooks.ManageHelpers