%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} module Main() where \end{code} \begin{code} import Graphics.UI.Gtk( initGUI, mainGUI, on ) import Graphics.UI.Gtk.Gdk.Events( TimeStamp ) import Graphics.UI.Gtk.General.Enums( MouseButton ) import Graphics.UI.Gtk.Display.StatusIcon ( statusIconNewFromFile, statusIconActivate, statusIconPopupMenu ) import Graphics.UI.Gtk.ActionMenuToolbar.Action( actionNew, actionActivated ) import Graphics.UI.Gtk.ActionMenuToolbar.ActionGroup ( actionGroupNew, actionGroupAddAction ) import Graphics.UI.Gtk.ActionMenuToolbar.UIManager ( uiManagerNew, uiManagerAddUiFromString, uiManagerGetWidget , uiManagerInsertActionGroup ) import Graphics.UI.Gtk.MenuComboToolbar.Menu( Menu, castToMenu, menuPopup ) import Paths_traypoweroff( getDataFileName ) import Data.Maybe( fromJust ) import System.Cmd( system ) import System.Exit( ExitCode(..) ) \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} main :: IO() main = do initGUI 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 uiman <- uiManagerNew uiManagerAddUiFromString uiman uiDecl uiManagerInsertActionGroup uiman group 0 pop <- fmap (castToMenu . fromJust) $ uiManagerGetWidget uiman "/popup" on icon statusIconActivate $ menuActivate pop on icon statusIconPopupMenu $ menuPopUp pop mainGUI \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} menuPopUp :: Menu -> Maybe MouseButton -> TimeStamp -> IO () menuPopUp menu _ _ = do menuPopup menu Nothing \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} menuActivate :: Menu -> IO () menuActivate menu = do menuPopup menu Nothing \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} uiDecl :: [Char] uiDecl = "\ \ \ \ \ \ " \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} powerOffAction :: IO () powerOffAction = do err <- system "sudo /sbin/poweroff" case err of ExitFailure n -> putStrLn $ "Error code: " ++ show n ExitSuccess -> return () \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{code} rebootAction :: IO () rebootAction = do err <- system "sudo /sbin/reboot" case err of ExitFailure n -> putStrLn $ "Error code: " ++ show n ExitSuccess -> return () \end{code} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%