packages feed

leksah-0.8.0.4: src/IDE/OSX.hs

{-# INCLUDE <igemacintegration/ige-mac-menu.h> #-}
{-# LANGUAGE ForeignFunctionInterface #-}
-----------------------------------------------------------------------------
--
-- Module      :  IDE.OSX
-- Copyright   :  (c) Juergen Nicklisch-Franken, Hamish Mackenzie
-- License     :  GNU-GPL
--
-- Maintainer  :  <maintainer at leksah.org>
-- Stability   :  provisional
-- Portability :  portable
--
--
--  Support for OSX
--
---------------------------------------------------------------------------------

module IDE.OSX (
    updateMenu
) where

import Graphics.UI.Gtk
import Foreign (nullPtr, withForeignPtr, Ptr(..))
import System.Glib (GObject(..))
import System.Glib.Types (toGObject)

foreign import ccall unsafe "ige_mac_menu_set_menu_bar" ige_mac_menu_set_menu_bar :: Ptr GObject -> IO ()
foreign import ccall unsafe "ige_mac_menu_set_quit_menu_item" ige_mac_menu_set_quit_menu_item :: Ptr GObject -> IO ()
foreign import ccall unsafe "ige_mac_menu_add_app_menu_group" ige_mac_menu_add_app_menu_group :: IO (Ptr GObject)
foreign import ccall unsafe "ige_mac_menu_add_app_menu_item" ige_mac_menu_add_app_menu_item :: Ptr GObject -> Ptr GObject -> Ptr GObject -> IO ()

updateMenu :: UIManager -> IO ()
updateMenu uiManager = do
    mbMenu   <- uiManagerGetWidget uiManager "/ui/menubar"
    case mbMenu of
        Just menu -> do
            widgetHide menu
            let (GObject p) = toGObject menu
            withForeignPtr p ige_mac_menu_set_menu_bar
        Nothing   -> return ()

    mbQuit   <- uiManagerGetWidget uiManager "/ui/menubar/_File/_Quit"
    case mbQuit of
        Just quit -> do
            let (GObject p) = toGObject quit
            withForeignPtr p ige_mac_menu_set_quit_menu_item
        Nothing   -> return ()

    mbAbout   <- uiManagerGetWidget uiManager "/ui/menubar/_Help/_About"
    case mbAbout of
        Just about -> do
            let (GObject p) = toGObject about
            group <- ige_mac_menu_add_app_menu_group
            withForeignPtr p (\ptr -> ige_mac_menu_add_app_menu_item group ptr nullPtr)
        Nothing   -> return ()

    mbPrefs   <- uiManagerGetWidget uiManager "/ui/menubar/_Configuration/Edit general Preferences"
    case mbPrefs of
        Just prefs -> do
            let (GObject p) = toGObject prefs
            group <- ige_mac_menu_add_app_menu_group
            withForeignPtr p (\ptr -> ige_mac_menu_add_app_menu_item group ptr nullPtr)
        Nothing   -> return ()