traypoweroff 0.9.0 → 1.0.0
raw patch · 2 files changed
+58/−22 lines, 2 files
Files
- src/TrayPowerOff.lhs +57/−21
- traypoweroff.cabal +1/−1
src/TrayPowerOff.lhs view
@@ -11,7 +11,7 @@ ( statusIconNewFromFile, statusIconActivate, statusIconPopupMenu ) import Graphics.UI.Gtk.ActionMenuToolbar.Action( actionNew, actionActivated ) import Graphics.UI.Gtk.ActionMenuToolbar.ActionGroup- ( actionGroupNew, actionGroupAddAction )+ ( ActionGroup, actionGroupNew, actionGroupAddAction ) import Graphics.UI.Gtk.ActionMenuToolbar.UIManager ( uiManagerNew, uiManagerAddUiFromString, uiManagerGetWidget , uiManagerInsertActionGroup )@@ -20,10 +20,35 @@ import Data.Maybe( fromJust ) import System.Cmd( system ) import System.Exit( ExitCode(..) )+import Control.Monad( mapM_ ) \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code}+data MenuItem = MenuItem { menuId :: String+ , menuText :: String+ , menuAction :: IO () }+\end{code}++%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+\begin{code}+menuXml :: String+menuXml = "<popup>\+\ <menuitem action=\"AOFF\" />\+\ <menuitem action=\"AREB\" />\+\ <menuitem action=\"ASUS\" />\+\ <menuitem action=\"AHIB\" />\+\ </popup>" ++menuItems :: [MenuItem]+menuItems = [ MenuItem "AOFF" "PowerOff" powerOffAction+ , MenuItem "AREB" "Reboot" rebootAction + , MenuItem "ASUS" "Suspend" suspendAction+ , MenuItem "AHIB" "Hibernate" hibernateAction ]+\end{code}++%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+\begin{code} main :: IO() main = do initGUI@@ -31,18 +56,11 @@ iconfile <- getDataFileName "icons/icon64.png" icon <- statusIconNewFromFile iconfile - aoff <- actionNew "AOFF" "PowerOff" Nothing Nothing- on aoff actionActivated powerOffAction- areb <- actionNew "AREB" "Reboot" Nothing Nothing- on areb actionActivated rebootAction- group <- actionGroupNew "AGRP"-- actionGroupAddAction group aoff- actionGroupAddAction group areb+ mapM_ (createMenuItem group) menuItems uiman <- uiManagerNew- uiManagerAddUiFromString uiman uiDecl+ uiManagerAddUiFromString uiman menuXml uiManagerInsertActionGroup uiman group 0 pop <- fmap (castToMenu . fromJust) $ uiManagerGetWidget uiman "/popup"@@ -54,25 +72,23 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code}-menuPopUp :: Menu -> Maybe MouseButton -> TimeStamp -> IO ()-menuPopUp menu _ _ = do- menuPopup menu Nothing+createMenuItem :: ActionGroup -> MenuItem -> IO ()+createMenuItem group item = do+ action <- actionNew (menuId item) (menuText item) Nothing Nothing+ on action actionActivated (menuAction item)+ actionGroupAddAction group action \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code}-menuActivate :: Menu -> IO ()-menuActivate menu = do- menuPopup menu Nothing+menuPopUp :: Menu -> Maybe MouseButton -> TimeStamp -> IO ()+menuPopUp menu _ _ = menuPopup menu Nothing \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code}-uiDecl :: [Char]-uiDecl = "<popup>\-\ <menuitem action=\"AOFF\" />\-\ <menuitem action=\"AREB\" />\-\ </popup>" +menuActivate :: Menu -> IO ()+menuActivate menu = menuPopup menu Nothing \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@ -90,6 +106,26 @@ rebootAction :: IO () rebootAction = do err <- system "sudo /sbin/reboot"+ case err of+ ExitFailure n -> putStrLn $ "Error code: " ++ show n+ ExitSuccess -> return ()+\end{code}++%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+\begin{code}+suspendAction :: IO ()+suspendAction = do+ err <- system "sudo /usr/sbin/pm-suspend"+ case err of+ ExitFailure n -> putStrLn $ "Error code: " ++ show n+ ExitSuccess -> return ()+\end{code}++%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+\begin{code}+hibernateAction :: IO ()+hibernateAction = do+ err <- system "sudo /usr/sbin/pm-hibernate" case err of ExitFailure n -> putStrLn $ "Error code: " ++ show n ExitSuccess -> return ()
traypoweroff.cabal view
@@ -1,5 +1,5 @@ name: traypoweroff-version: 0.9.0+version: 1.0.0 cabal-Version: >= 1.6 description: PowerOff Tray Icon license: BSD3