corrade-vassal – Rev 1

Subversion Repositories:
Rev:
using System;
using System.Collections;
using System.Runtime.InteropServices;

namespace IgeMacIntegration
{

    public class IgeMacMenu
    {

        [DllImport("libigemacintegration.dylib")]
        static extern void ige_mac_menu_connect_window_key_handler(IntPtr window);

        public static void ConnectWindowKeyHandler(Gtk.Window window)
        {
            ige_mac_menu_connect_window_key_handler(window.Handle);
        }

        [DllImport("libigemacintegration.dylib")]
        static extern void ige_mac_menu_set_global_key_handler_enabled(bool enabled);

        public static bool GlobalKeyHandlerEnabled
        {
            set
            {
                ige_mac_menu_set_global_key_handler_enabled(value);
            }
        }

        [DllImport("libigemacintegration.dylib")]
        static extern void ige_mac_menu_set_menu_bar(IntPtr menu_shell);

        public static Gtk.MenuShell MenuBar
        {
            set
            {
                ige_mac_menu_set_menu_bar(value == null ? IntPtr.Zero : value.Handle);
            }
        }

        [DllImport("libigemacintegration.dylib")]
        static extern void ige_mac_menu_set_quit_menu_item(IntPtr quit_item);

        public static Gtk.MenuItem QuitMenuItem
        {
            set
            {
                ige_mac_menu_set_quit_menu_item(value == null ? IntPtr.Zero : value.Handle);
            }
        }

        [DllImport("libigemacintegration.dylib")]
        static extern IntPtr ige_mac_menu_add_app_menu_group();

        public static IgeMacIntegration.IgeMacMenuGroup AddAppMenuGroup()
        {
            IntPtr raw_ret = ige_mac_menu_add_app_menu_group();
            IgeMacIntegration.IgeMacMenuGroup ret = raw_ret == IntPtr.Zero ? null : (IgeMacIntegration.IgeMacMenuGroup)GLib.Opaque.GetOpaque(raw_ret, typeof(IgeMacIntegration.IgeMacMenuGroup), false);
            return ret;
        }
    }

    public class IgeMacMenuGroup : GLib.Opaque
    {

        [DllImport("libigemacintegration.dylib")]
        static extern void ige_mac_menu_add_app_menu_item(IntPtr raw, IntPtr menu_item, IntPtr label);

        public void AddMenuItem(Gtk.MenuItem menu_item, string label)
        {
            IntPtr native_label = GLib.Marshaller.StringToPtrGStrdup(label);
            ige_mac_menu_add_app_menu_item(Handle, menu_item == null ? IntPtr.Zero : menu_item.Handle, native_label);
            GLib.Marshaller.Free(native_label);
        }

        public IgeMacMenuGroup(IntPtr raw) : base(raw) { }
    }
}