bluetile 0.5 → 0.5.1
raw patch · 10 files changed
+98/−33 lines, 10 filessetup-changed
Files
- Setup.lhs +9/−9
- bluetile.cabal +3/−2
- bluetiledock/BluetileDock.hs +1/−1
- src/Config.hs +5/−4
- src/XMonad/Actions/WindowMenu.hs +1/−1
- src/XMonad/Hooks/CurrentWorkspaceOnTop.hs +10/−3
- src/XMonad/Hooks/Minimize.hs +53/−0
- src/XMonad/Layout/DecorationAddons.hs +1/−1
- src/XMonad/Layout/ImageButtonDecoration.hs +1/−1
- src/XMonad/Layout/Minimize.hs +14/−11
Setup.lhs view
@@ -13,15 +13,16 @@ > > myPostCopy :: Args -> CopyFlags -> PackageDescription -> LocalBuildInfo -> IO () > myPostCopy _ copyflags pkgdesc lbi = do-> let dirs = absoluteInstallDirs pkgdesc lbi (fromFlag $ copyDest copyflags)-> libExecHook dirs-> insertPath dirs+> let copyDirs = absoluteInstallDirs pkgdesc lbi (fromFlag $ copyDest copyflags)+> libExecHook copyDirs+> let installDirs = absoluteInstallDirs pkgdesc lbi NoCopyDest+> insertPath copyDirs installDirs > > myPostInst :: Args -> InstallFlags -> PackageDescription -> LocalBuildInfo -> IO () > myPostInst _ _ pkgdesc lbi = do > let dirs = absoluteInstallDirs pkgdesc lbi NoCopyDest > libExecHook dirs-> insertPath dirs+> insertPath dirs dirs > > -- hook to move helper binaries to the libexec directory > libExecHook :: InstallDirs String -> IO ()@@ -33,11 +34,10 @@ > renameFile (bdir </> binary) (lexecdir </> binary) > > -- hook to insert path to system wide configuration-> insertPath :: InstallDirs String -> IO ()-> insertPath dirs = do-> let ddir = datadir dirs-> let userConfigTemplate = ddir </> "etc" </> "bluetilerc_user_template"-> let pathToSystemConfig = ddir </> "etc" </> "bluetilerc"+> insertPath :: InstallDirs String -> InstallDirs String -> IO ()+> insertPath copyDirs installDirs = do+> let userConfigTemplate = datadir copyDirs </> "etc" </> "bluetilerc_user_template"+> let pathToSystemConfig = datadir installDirs </> "etc" </> "bluetilerc" > contents <- readFileStrict userConfigTemplate > let contentsPatched = subRegex (mkRegex "__PATH_TO_BLUETILERC__") contents pathToSystemConfig > writeFile userConfigTemplate contentsPatched
bluetile.cabal view
@@ -1,5 +1,5 @@ Name: bluetile-Version: 0.5+Version: 0.5.1 homepage: http://www.bluetile.org/ synopsis: full-featured tiling for the GNOME desktop environment description:@@ -22,6 +22,7 @@ src/XMonad/Actions/WindowMenu.hs, src/XMonad/Hooks/CurrentWorkspaceOnTop.hs, src/XMonad/Hooks/EwmhDesktops.hs,+ src/XMonad/Hooks/Minimize.hs src/XMonad/Hooks/PositionStoreHooks.hs, src/XMonad/Layout/BorderResize.hs, src/XMonad/Layout/ButtonDecoration.hs,@@ -71,7 +72,7 @@ Ghc-Options: -fno-warn-unused-do-bind Executable gnome-bluetile-session- Buildable: False+ Buildable: True Hs-Source-Dirs: gnome-bluetile-session Main-is: GnomeBluetileSession.hs Build-Depends: base>=3, base<5, filepath, unix
bluetiledock/BluetileDock.hs view
@@ -147,7 +147,7 @@ onClicked configBtn $ do home <- getEnv "HOME" let userConfig = home </> ".bluetilerc"- spawnPipe $ "gedit " ++ userConfig+ spawnPipe $ "gnome-open " ++ userConfig return () -- quit button
src/Config.hs view
@@ -44,8 +44,9 @@ import XMonad.Hooks.ManageDocks import XMonad.Hooks.ManageHelpers import XMonad.Hooks.PositionStoreHooks-import XMonad.Hooks.RestoreMinimized+import XMonad.Hooks.Minimize import XMonad.Hooks.ServerMode+import XMonad.Hooks.SetWMName import XMonad.Hooks.WorkspaceByPos import XMonad.Config.Gnome@@ -123,7 +124,7 @@ -- maximizing and minimizing , ("key_maximize_window" , withFocused (sendMessage . maximizeRestore))- , ("key_minimize_window" , withFocused (\f -> sendMessage (MinimizeWin f)))+ , ("key_minimize_window" , withFocused minimizeWindow) , ("key_restore_minimized_window" , sendMessage RestoreNextMinimizedWin) ] ++@@ -189,13 +190,13 @@ createXMonadConfig bluetilerc = defaultConfig { modMask = defaultModifierBRC bluetilerc,- startupHook = ewmhDesktopsStartup,+ startupHook = ewmhDesktopsStartup >> setWMName "LG3D", manageHook = bluetileManageHook, layoutHook = bluetileLayoutHook, logHook = currentWorkspaceOnTop >> ewmhDesktopsLogHook, handleEventHook = ewmhDesktopsEventHook `mappend` fullscreenEventHook- `mappend` restoreMinimizedEventHook+ `mappend` minimizeEventHook `mappend` serverModeEventHook' bluetileCommands `mappend` positionStoreEventHook, workspaces = bluetileWorkspaces,
src/XMonad/Actions/WindowMenu.hs view
@@ -62,7 +62,7 @@ actions = [ ("Cancel menu", return ()) , ("Close" , kill) , ("Maximize" , sendMessage $ maximizeRestore w)- , ("Minimize" , sendMessage $ MinimizeWin w)+ , ("Minimize" , minimizeWindow w) ] ++ [ ("Move to " ++ tag, windows $ W.shift tag) | tag <- tags ]
src/XMonad/Hooks/CurrentWorkspaceOnTop.hs view
@@ -26,6 +26,7 @@ import qualified XMonad.StackSet as S import Control.Monad(when) import System.Posix.Env+import qualified Data.Map as M -- $usage -- You can use this module with the following in your @~\/.xmonad\/xmonad.hs@:@@ -48,12 +49,18 @@ let (CWOTS lastTag) = maybe (CWOTS "") read cwotsEnvM let curTag = S.tag . S.workspace . S.current $ ws when (curTag /= lastTag) $ do+ -- the following is more or less a reimplementation of what's happening in "XMonad.Operation" let s = S.current ws wsp = S.workspace s viewrect = screenRect $ S.screenDetail s- tmpStack = S.stack . S.workspace $ s- (rs, _) <- runLayout wsp { S.stack = tmpStack } viewrect- let wins = map fst rs+ tmpStack = (S.stack wsp) >>= S.filter (`M.notMember` S.floating ws)+ (rs, ml') <- runLayout wsp { S.stack = tmpStack } viewrect+ updateLayout curTag ml'+ let this = S.view curTag ws+ fltWins = filter (flip M.member (S.floating ws)) $ S.index this+ wins = fltWins ++ (map fst rs) -- order: first all floating windows, then the order the layout returned+ -- end of reimplementation+ when (not . null $ wins) $ do io $ raiseWindow d (head wins) -- raise first window of current workspace to the very top, io $ restackWindows d wins -- then use restackWindows to let all other windows from the workspace follow
+ src/XMonad/Hooks/Minimize.hs view
@@ -0,0 +1,53 @@+----------------------------------------------------------------------------+-- |+-- Module : XMonad.Hooks.Minimize+-- Copyright : (c) Justin Bogner 2010+-- License : BSD3-style (see LICENSE)+--+-- Maintainer : Justin Bogner <mail@justinbogner.com>+-- Stability : unstable+-- Portability : not portable+--+-- Handles window manager hints to minimize and restore windows. Use+-- this with XMonad.Layout.Minimize.+--+-----------------------------------------------------------------------------++module XMonad.Hooks.Minimize+ ( -- * Usage+ -- $usage+ minimizeEventHook+ ) where++import Data.Monoid+import Control.Monad(when)++import XMonad+import XMonad.Layout.Minimize++-- $usage+-- You can use this module with the following in your @~\/.xmonad\/xmonad.hs@:+--+-- > import XMonad.Hooks.Minimize+-- > import XMonad.Layout.Minimize+-- >+-- > myHandleEventHook = minimizeEventHook+-- > myLayout = minimize (Tall 1 (3/100) (1/2)) ||| Full ||| etc..+-- > main = xmonad defaultConfig { layoutHook = myLayout+-- > , handleEventHook = myHandleEventHook }++minimizeEventHook :: Event -> X All+minimizeEventHook (ClientMessageEvent {ev_window = w,+ ev_message_type = mt,+ ev_data = dt}) = do+ a_aw <- getAtom "_NET_ACTIVE_WINDOW"+ a_cs <- getAtom "WM_CHANGE_STATE"++ when (mt == a_aw) $ sendMessage (RestoreMinimizedWin w)+ when (mt == a_cs) $ do+ let message = fromIntegral . head $ dt+ when (message == normalState) $ sendMessage (RestoreMinimizedWin w)+ when (message == iconicState) $ minimizeWindow w++ return (All True)+minimizeEventHook _ = return (All True)
src/XMonad/Layout/DecorationAddons.hs view
@@ -62,7 +62,7 @@ then focus mainw >> sendMessage (maximizeRestore mainw) >> return True else if (fi distFromRight >= minimizeButtonOffset && fi distFromRight <= minimizeButtonOffset + buttonSize)- then focus mainw >> sendMessage (MinimizeWin mainw) >> return True+ then focus mainw >> minimizeWindow mainw >> return True else return False action
src/XMonad/Layout/ImageButtonDecoration.hs view
@@ -158,7 +158,7 @@ then focus mainw >> sendMessage (maximizeRestore mainw) >> return True else if (fi distFromRight >= minimizeButtonOffset && fi distFromRight <= minimizeButtonOffset + buttonSize)- then focus mainw >> sendMessage (MinimizeWin mainw) >> return True+ then focus mainw >> minimizeWindow mainw >> return True else return False action
src/XMonad/Layout/Minimize.hs view
@@ -18,7 +18,8 @@ -- * Usage -- $usage minimize,- MinimizeMsg(..)+ minimizeWindow,+ MinimizeMsg(RestoreMinimizedWin,RestoreNextMinimizedWin) ) where import XMonad@@ -47,7 +48,7 @@ -- -- In the key-bindings, do something like: ----- > , ((modm, xK_m ), withFocused (\f -> sendMessage (MinimizeWin f)))+-- > , ((modm, xK_m ), withFocused minimizeWindow) -- > , ((modm .|. shiftMask, xK_m ), sendMessage RestoreNextMinimizedWin) -- -- The first action will minimize the focused window, while the second one will restore@@ -62,8 +63,8 @@ -- the keyboard. Include 'BW.boringWindows' in your layout hook and see the -- documentation of "XMonad.Layout.BoringWindows" on how to modify your keybindings. ----- Also see "XMonad.Hooks.RestoreMinimized" if you want to be able to restore--- minimized windows from your taskbar.+-- Also see "XMonad.Hooks.Minimize" if you want to be able to minimize+-- and restore windows from your taskbar. data Minimize a = Minimize [Window] (M.Map Window W.RationalRect) deriving ( Read, Show ) minimize :: LayoutClass l Window => l Window -> ModifiedLayout Minimize l Window@@ -75,6 +76,8 @@ deriving (Typeable, Eq) instance Message MinimizeMsg +minimizeWindow :: Window -> X ()+minimizeWindow w = sendMessage (MinimizeWin w) >> BW.focusDown setMinimizedState :: Window -> Int -> (CLong -> [CLong] -> [CLong]) -> X () setMinimizedState win st f = do@@ -103,34 +106,34 @@ handleMess (Minimize minimized unfloated) m | Just (MinimizeWin w) <- fromMessage m, not (w `elem` minimized) = do- BW.focusDown setMinimized w ws <- gets windowset case M.lookup w (W.floating ws) of Nothing -> return $ Just $ Minimize (w:minimized) unfloated Just r -> do- (windows . W.sink) w+ modify (\s -> s { windowset = W.sink w ws}) return $ Just $ Minimize (w:minimized) (M.insert w r unfloated) | Just (RestoreMinimizedWin w) <- fromMessage m = do setNotMinimized w case M.lookup w unfloated of Nothing -> return $ Just $ Minimize (minimized \\ [w]) unfloated Just r -> do- (windows . (W.float w)) r+ ws <- gets windowset+ modify (\s -> s { windowset = W.float w r ws}) return $ Just $ Minimize (minimized \\ [w]) (M.delete w unfloated)- | Just RestoreNextMinimizedWin <- fromMessage m =+ | Just RestoreNextMinimizedWin <- fromMessage m = do+ ws <- gets windowset if not (null minimized) then case M.lookup (head minimized) unfloated of Nothing -> do let w = head minimized setNotMinimized w- focus w+ modify (\s -> s { windowset = W.focusWindow w ws}) return $ Just $ Minimize (tail minimized) unfloated Just r -> do let w = head minimized setNotMinimized w- (windows . (W.float w)) r- focus w+ modify (\s -> s { windowset = (W.focusWindow w . W.float w r) ws}) return $ Just $ Minimize (tail minimized) (M.delete w unfloated) else return Nothing | Just BW.UpdateBoring <- fromMessage m = do