private void ClearMenu() { IntPtr existingMenuList = Gtk.Widget.GetChildren(menuBarHandle); for (uint i = 0; i < GLib.GetListLength(existingMenuList); i++) { var existingMenu = GLib.GetListNthData(existingMenuList, i); Gtk.Widget.Destroy(existingMenu); } GLib.FreeList(existingMenuList); }
private unsafe void SetIcon(AppIcon icon) { if (icon == null || icon.Icons.Length == 0) { Gtk.Window.SetIcon(Handle, IntPtr.Zero); } else { IntPtr iconList = IntPtr.Zero; var icons = new IntPtr[icon.Icons.Length]; try { for (int i = 0; i < icons.Length; i++) { IntPtr iconStream = IntPtr.Zero; try { byte[] data = icon.GetIconData(icon.Icons[i]); fixed(byte *iconDataPtr = data) { iconStream = GLib.CreateStreamFromData((IntPtr)iconDataPtr, data.Length, IntPtr.Zero); icons[i] = Gdk.Pixbuf.NewFromStream(iconStream, IntPtr.Zero, IntPtr.Zero); iconList = GLib.ListPrepend(iconList, icons[i]); } } finally { if (iconStream != IntPtr.Zero) { GLib.UnrefObject(iconStream); } } } Gtk.Window.SetIconList(Handle, iconList); } finally { if (iconList != IntPtr.Zero) { GLib.FreeList(iconList); } foreach (var item in icons) { if (item != IntPtr.Zero) { GLib.UnrefObject(item); } } } } }