new versions with slight API renaming and new generalized API for adding

2007-09-24  Michael Natterer  <mitch@gimp.org>

	* app/gui/ige-mac-menu.[ch]: new versions with slight API renaming
	and new generalized API for adding application menu items.

	* app/gui/gui.c (gui_restore_after_callback): follow API changes
	and add "Preferences", "Keyboard Shortcuts" and "Units" to the
	application menu's preferences section.


svn path=/trunk/; revision=23639
This commit is contained in:
Michael Natterer 2007-09-24 13:33:47 +00:00 committed by Michael Natterer
parent f8699d68bc
commit 51f2f0c65f
4 changed files with 115 additions and 58 deletions

View File

@ -1,3 +1,12 @@
2007-09-24 Michael Natterer <mitch@gimp.org>
* app/gui/ige-mac-menu.[ch]: new versions with slight API renaming
and new generalized API for adding application menu items.
* app/gui/gui.c (gui_restore_after_callback): follow API changes
and add "Preferences", "Keyboard Shortcuts" and "Units" to the
application menu's preferences section.
2007-09-24 Simon Budig <simon@gimp.org>
* app/xcf/xcf-load.c: use the correct default values for the

View File

@ -464,6 +464,7 @@ gui_restore_after_callback (Gimp *gimp,
#ifdef GDK_WINDOWING_QUARTZ
{
IgeMacMenuGroup *group;
GtkWidget *menu;
GtkWidget *item;
@ -473,22 +474,38 @@ gui_restore_after_callback (Gimp *gimp,
if (GTK_IS_MENU_ITEM (menu))
menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (menu));
ige_mac_menu_set_menubar (GTK_MENU_SHELL (menu));
ige_mac_menu_set_menu_bar (GTK_MENU_SHELL (menu));
item = gtk_ui_manager_get_widget (GTK_UI_MANAGER (image_ui_manager),
"/dummy-menubar/image-popup/File/file-quit");
if (GTK_IS_MENU_ITEM (item))
ige_mac_menu_set_quit_item (GTK_MENU_ITEM (item));
ige_mac_menu_set_quit_menu_item (GTK_MENU_ITEM (item));
/* the about group */
group = ige_mac_menu_add_app_menu_group ();
item = gtk_ui_manager_get_widget (GTK_UI_MANAGER (image_ui_manager),
"/dummy-menubar/image-popup/Help/dialogs-about");
if (GTK_IS_MENU_ITEM (item))
ige_mac_menu_set_about_item (GTK_MENU_ITEM (item), _("About GIMP"));
ige_mac_menu_add_app_menu_item (group, GTK_MENU_ITEM (item), _("About GIMP"));
/* the preferences group */
group = ige_mac_menu_add_app_menu_group ();
item = gtk_ui_manager_get_widget (GTK_UI_MANAGER (image_ui_manager),
"/dummy-menubar/image-popup/Edit/dialogs-preferences");
"/dummy-menubar/image-popup/Edit/Preferences/dialogs-preferences");
if (GTK_IS_MENU_ITEM (item))
ige_mac_menu_set_prefs_item (GTK_MENU_ITEM (item), _("Preferences"));
ige_mac_menu_add_app_menu_item (group, GTK_MENU_ITEM (item), _("Preferences"));
item = gtk_ui_manager_get_widget (GTK_UI_MANAGER (image_ui_manager),
"/dummy-menubar/image-popup/Edit/Preferences/dialogs-keyboard-shortcuts");
if (GTK_IS_MENU_ITEM (item))
ige_mac_menu_add_app_menu_item (group, GTK_MENU_ITEM (item), _("Keyboard Shortcuts"));
item = gtk_ui_manager_get_widget (GTK_UI_MANAGER (image_ui_manager),
"/dummy-menubar/image-popup/Edit/Preferences/plug-in-unit-editor");
if (GTK_IS_MENU_ITEM (item))
ige_mac_menu_add_app_menu_item (group, GTK_MENU_ITEM (item), _("Units"));
}
#endif /* GDK_WINDOWING_QUARTZ */

View File

@ -683,7 +683,7 @@ sync_menu_shell (GtkMenuShell *menu_shell,
}
void
ige_mac_menu_set_menubar (GtkMenuShell *menu_shell)
ige_mac_menu_set_menu_bar (GtkMenuShell *menu_shell)
{
MenuRef carbon_menubar;
@ -704,7 +704,7 @@ ige_mac_menu_set_menubar (GtkMenuShell *menu_shell)
}
void
ige_mac_menu_set_quit_item (GtkMenuItem *menu_item)
ige_mac_menu_set_quit_menu_item (GtkMenuItem *menu_item)
{
MenuRef appmenu;
MenuItemIndex index;
@ -724,57 +724,76 @@ ige_mac_menu_set_quit_item (GtkMenuItem *menu_item)
}
}
struct _IgeMacMenuGroup
{
GList *items;
};
static GList *app_menu_groups = NULL;
IgeMacMenuGroup *
ige_mac_menu_add_app_menu_group (void)
{
IgeMacMenuGroup *group = g_slice_new0 (IgeMacMenuGroup);
app_menu_groups = g_list_append (app_menu_groups, group);
return group;
}
void
ige_mac_menu_set_about_item (GtkMenuItem *menu_item,
ige_mac_menu_add_app_menu_item (IgeMacMenuGroup *group,
GtkMenuItem *menu_item,
const gchar *label)
{
MenuRef appmenu;
GList *list;
gint index = 0;
g_return_if_fail (group != NULL);
g_return_if_fail (GTK_IS_MENU_ITEM (menu_item));
g_return_if_fail (label != NULL);
if (GetIndMenuItemWithCommandID (NULL, kHICommandHide, 1,
&appmenu, NULL) == noErr)
&appmenu, NULL) != noErr)
{
g_warning ("%s: retrieving app menu failed",
G_STRFUNC);
return;
}
for (list = app_menu_groups; list; list = g_list_next (list))
{
IgeMacMenuGroup *list_group = list->data;
index += g_list_length (list_group->items);
/* adjust index for the separator between groups, but not
* before the first group
*/
if (list_group->items && list->prev)
index++;
if (group == list_group)
{
CFStringRef cfstr;
cfstr = CFStringCreateWithCString (NULL, label,
kCFStringEncodingUTF8);
InsertMenuItemTextWithCFString (appmenu, cfstr, 0, 0, 0);
SetMenuItemProperty (appmenu, 1,
IGE_QUARTZ_MENU_CREATOR,
IGE_QUARTZ_ITEM_WIDGET,
sizeof (menu_item), &menu_item);
CFRelease (cfstr);
gtk_widget_hide (GTK_WIDGET (menu_item));
}
}
void
ige_mac_menu_set_prefs_item (GtkMenuItem *menu_item,
const gchar *label)
/* add a separator before adding the first item, but not
* for the first group
*/
if (!group->items && list->prev)
{
MenuRef appmenu;
g_return_if_fail (GTK_IS_MENU_ITEM (menu_item));
g_return_if_fail (label != NULL);
if (GetIndMenuItemWithCommandID (NULL, kHICommandHide, 1,
&appmenu, NULL) == noErr)
{
CFStringRef cfstr;
InsertMenuItemTextWithCFString (appmenu, NULL, 1,
InsertMenuItemTextWithCFString (appmenu, NULL, index,
kMenuItemAttrSeparator, 0);
index++;
}
cfstr = CFStringCreateWithCString (NULL, label,
kCFStringEncodingUTF8);
InsertMenuItemTextWithCFString (appmenu, cfstr, 2, 0, 0);
SetMenuItemProperty (appmenu, 3,
InsertMenuItemTextWithCFString (appmenu, cfstr, index, 0, 0);
SetMenuItemProperty (appmenu, index + 1,
IGE_QUARTZ_MENU_CREATOR,
IGE_QUARTZ_ITEM_WIDGET,
sizeof (menu_item), &menu_item);
@ -782,7 +801,16 @@ ige_mac_menu_set_prefs_item (GtkMenuItem *menu_item,
CFRelease (cfstr);
gtk_widget_hide (GTK_WIDGET (menu_item));
group->items = g_list_append (group->items, menu_item);
return;
}
}
if (!list)
g_warning ("%s: app menu group %p does not exist",
G_STRFUNC, group);
}
#endif /* GDK_WINDOWING_QUARTZ */

View File

@ -28,11 +28,14 @@
G_BEGIN_DECLS
void ige_mac_menu_set_menubar (GtkMenuShell *menu_shell);
void ige_mac_menu_set_quit_item (GtkMenuItem *menu_item);
void ige_mac_menu_set_about_item (GtkMenuItem *menu_item,
const gchar *label);
void ige_mac_menu_set_prefs_item (GtkMenuItem *menu_item,
typedef struct _IgeMacMenuGroup IgeMacMenuGroup;
void ige_mac_menu_set_menu_bar (GtkMenuShell *menu_shell);
void ige_mac_menu_set_quit_menu_item (GtkMenuItem *menu_item);
IgeMacMenuGroup * ige_mac_menu_add_app_menu_group (void);
void ige_mac_menu_add_app_menu_item (IgeMacMenuGroup *group,
GtkMenuItem *menu_item,
const gchar *label);
G_END_DECLS