Added javaHack

Fixes Java applications that don't work well with xmonad, by setting @_JAVA_AWT_WM_NONREPARENTING=1@
This commit is contained in:
Yecine Megdiche 2021-02-08 17:00:09 +01:00
parent 747202a214
commit c3e5c1a9aa
2 changed files with 23 additions and 1 deletions

View File

@ -52,6 +52,8 @@
Serves as a collection of hacks and fixes that should be easily acessible to users. Serves as a collection of hacks and fixes that should be easily acessible to users.
The first element of this module is windowedFullscreenFix, which fixes fullscreen behaviour The first element of this module is windowedFullscreenFix, which fixes fullscreen behaviour
of chromium based applications when using windowed fullscreen. of chromium based applications when using windowed fullscreen.
A second entry is `javaHack`, which helps when dealing with Java applications that might
not work well with xmonad.
* `XMonad.Util.ActionCycle` * `XMonad.Util.ActionCycle`

View File

@ -23,12 +23,16 @@ module XMonad.Util.Hacks
( -- * Windowed fullscreen ( -- * Windowed fullscreen
-- $windowedFullscreenFix -- $windowedFullscreenFix
windowedFullscreenFixEventHook windowedFullscreenFixEventHook
-- * Java Hack
-- $java
, javaHack
) where ) where
import XMonad import XMonad
import Data.Monoid (All(All)) import Data.Monoid (All(All))
import Control.Monad (when) import Control.Monad (when)
import System.Posix.Env (putEnv)
-- $windowedFullscreenFix -- $windowedFullscreenFix
@ -65,10 +69,26 @@ windowedFullscreenFixEventHook :: Event -> X All
windowedFullscreenFixEventHook (ClientMessageEvent _ _ _ dpy win typ (_:dats)) = do windowedFullscreenFixEventHook (ClientMessageEvent _ _ _ dpy win typ (_:dats)) = do
wmstate <- getAtom "_NET_WM_STATE" wmstate <- getAtom "_NET_WM_STATE"
fullscreen <- getAtom "_NET_WM_STATE_FULLSCREEN" fullscreen <- getAtom "_NET_WM_STATE_FULLSCREEN"
when (typ == wmstate && fromIntegral fullscreen `elem` dats) $ do when (typ == wmstate && fromIntegral fullscreen `elem` dats) $
withWindowAttributes dpy win $ \attrs -> withWindowAttributes dpy win $ \attrs ->
liftIO $ do liftIO $ do
resizeWindow dpy win (fromIntegral $ wa_width attrs - 1) (fromIntegral $ wa_height attrs) resizeWindow dpy win (fromIntegral $ wa_width attrs - 1) (fromIntegral $ wa_height attrs)
resizeWindow dpy win (fromIntegral $ wa_width attrs) (fromIntegral $ wa_height attrs) resizeWindow dpy win (fromIntegral $ wa_width attrs) (fromIntegral $ wa_height attrs)
return $ All True return $ All True
windowedFullscreenFixEventHook _ = return $ All True windowedFullscreenFixEventHook _ = return $ All True
-- $java
-- | Some java Applications might not work with xmonad. A common workaround would be to set the environment
-- variable @_JAVA_AWT_WM_NONREPARENTING@ to 1. The function 'javaHack' does exactly that.
-- Example usage:
--
-- > main = xmonad $ Hacks.javaHack (def {...})
--
-- | Fixes Java applications that don't work well with xmonad, by setting @_JAVA_AWT_WM_NONREPARENTING=1@
javaHack :: XConfig l -> XConfig l
javaHack conf = conf
{ startupHook = startupHook conf
*> io (putEnv "_JAVA_AWT_WM_NONREPARENTING=1")
}