use GtkAccelLabel when creating a menuitems label seperatedly.

Sun Jun  7 11:04:38 1998  Tim Janik  <timj@gtk.org>

        * app/gradient.c (cpopup_create_menu_item_with_label): use GtkAccelLabel
        when creating a menuitems label seperatedly.

        * app/commands.h:
        * app/commands.c:
        (tips_dialog_cmd_callback):
        (filters_repeat_cmd_callback):
        (tools_select_cmd_callback): make use of the callback_action argument.

        * app/main.c (main): removed gtk_accelerator_table_set_mod_mask(),
        since gtk provides decent default values now.

        * app/layers_dialog.c:
        * app/interface.c:
        * app/indexed_palette.c:
        * app/channels_dialog.c:
        * app/buildmenu.c:
        conversions for use of GtkAccelGroup.

        * app/buildmenu.c:
        * app/gradient.c:
        installed accelerators are locked, because these code portions don't
        support accelerator saving.

        * ChangeLog:
        * ChangeLog.pre-1-0: ChangeLog split up.
This commit is contained in:
Tim Janik 1998-06-07 13:55:36 +00:00 committed by Tim Janik
parent 0a2b3a44aa
commit 11269e1e69
33 changed files with 1627 additions and 5101 deletions

3354
ChangeLog

File diff suppressed because it is too large Load Diff

View File

@ -373,7 +373,6 @@ file_new_resolution_callback (GtkWidget *widget,
gchar *newvalue; gchar *newvalue;
NewImageValues *vals; NewImageValues *vals;
float new_resolution;
float temp_units; float temp_units;
float temp_pixels; float temp_pixels;
char buffer[12]; char buffer[12];
@ -406,8 +405,9 @@ file_new_resolution_callback (GtkWidget *widget,
} }
void void
file_new_cmd_callback (GtkWidget *widget, file_new_cmd_callback (GtkWidget *widget,
gpointer client_data) gpointer callback_data,
guint callback_action)
{ {
GDisplay *gdisp; GDisplay *gdisp;
NewImageValues *vals; NewImageValues *vals;
@ -418,7 +418,6 @@ file_new_cmd_callback (GtkWidget *widget,
GtkWidget *table; GtkWidget *table;
GtkWidget *frame; GtkWidget *frame;
GtkWidget *radio_box; GtkWidget *radio_box;
GtkWidget *units_box;
GtkWidget *menu; GtkWidget *menu;
GtkWidget *menuitem; GtkWidget *menuitem;
GtkWidget *optionmenu; GtkWidget *optionmenu;
@ -439,7 +438,7 @@ file_new_cmd_callback (GtkWidget *widget,
/* Before we try to determine the responsible gdisplay, /* Before we try to determine the responsible gdisplay,
* make sure this wasn't called from the toolbox * make sure this wasn't called from the toolbox
*/ */
if ((long) client_data) if (callback_action)
gdisp = gdisplay_active (); gdisp = gdisplay_active ();
else else
gdisp = NULL; gdisp = NULL;
@ -2621,13 +2620,14 @@ tools_swap_colors_cmd_callback (GtkWidget *widget,
} }
void void
tools_select_cmd_callback (GtkWidget *widget, tools_select_cmd_callback (GtkWidget *widget,
gpointer client_data) gpointer callback_data,
guint callback_action)
{ {
GDisplay * gdisp; GDisplay * gdisp;
/* Activate the approriate widget */ /* Activate the approriate widget */
gtk_widget_activate (tool_widgets[tool_info[(long) client_data].toolbar_position]); gtk_widget_activate (tool_widgets[tool_info[callback_action].toolbar_position]);
gdisp = gdisplay_active (); gdisp = gdisplay_active ();
@ -2635,10 +2635,11 @@ tools_select_cmd_callback (GtkWidget *widget,
} }
void void
filters_repeat_cmd_callback (GtkWidget *widget, filters_repeat_cmd_callback (GtkWidget *widget,
gpointer client_data) gpointer callback_data,
guint callback_action)
{ {
plug_in_repeat ((long) client_data); plug_in_repeat (callback_action);
} }
void void

View File

@ -4,7 +4,9 @@
#include "gtk/gtk.h" #include "gtk/gtk.h"
void file_new_cmd_callback (GtkWidget *, gpointer); void file_new_cmd_callback (GtkWidget *widget,
gpointer callback_data,
guint callback_action);
void file_open_cmd_callback (GtkWidget *, gpointer); void file_open_cmd_callback (GtkWidget *, gpointer);
void file_save_cmd_callback (GtkWidget *, gpointer); void file_save_cmd_callback (GtkWidget *, gpointer);
void file_save_as_cmd_callback (GtkWidget *, gpointer); void file_save_as_cmd_callback (GtkWidget *, gpointer);
@ -80,8 +82,12 @@ void layers_mask_select_cmd_callback (GtkWidget *, gpointer);
void layers_add_alpha_channel_cmd_callback (GtkWidget *, gpointer); void layers_add_alpha_channel_cmd_callback (GtkWidget *, gpointer);
void tools_default_colors_cmd_callback (GtkWidget *, gpointer); void tools_default_colors_cmd_callback (GtkWidget *, gpointer);
void tools_swap_colors_cmd_callback (GtkWidget *, gpointer); void tools_swap_colors_cmd_callback (GtkWidget *, gpointer);
void tools_select_cmd_callback (GtkWidget *, gpointer); void tools_select_cmd_callback (GtkWidget *widget,
void filters_repeat_cmd_callback (GtkWidget *, gpointer); gpointer callback_data,
guint callback_action);
void filters_repeat_cmd_callback (GtkWidget *widget,
gpointer callback_data,
guint callback_action);
void dialogs_brushes_cmd_callback (GtkWidget *, gpointer); void dialogs_brushes_cmd_callback (GtkWidget *, gpointer);
void dialogs_patterns_cmd_callback (GtkWidget *, gpointer); void dialogs_patterns_cmd_callback (GtkWidget *, gpointer);
void dialogs_palette_cmd_callback (GtkWidget *, gpointer); void dialogs_palette_cmd_callback (GtkWidget *, gpointer);

View File

@ -21,13 +21,13 @@
GtkWidget * GtkWidget *
build_menu (MenuItem *items, build_menu (MenuItem *items,
GtkAcceleratorTable *table) GtkAccelGroup *accel_group)
{ {
GtkWidget *menu; GtkWidget *menu;
GtkWidget *menu_item; GtkWidget *menu_item;
menu = gtk_menu_new (); menu = gtk_menu_new ();
gtk_menu_set_accelerator_table (GTK_MENU (menu), table); gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
while (items->label) while (items->label)
{ {
@ -41,12 +41,13 @@ build_menu (MenuItem *items,
menu_item = gtk_menu_item_new_with_label (items->label); menu_item = gtk_menu_item_new_with_label (items->label);
gtk_container_add (GTK_CONTAINER (menu), menu_item); gtk_container_add (GTK_CONTAINER (menu), menu_item);
if (items->accelerator_key && table) if (items->accelerator_key && accel_group)
gtk_widget_install_accelerator (menu_item, gtk_widget_add_accelerator (menu_item,
table, "activate",
"activate", accel_group,
items->accelerator_key, items->accelerator_key,
items->accelerator_mods); items->accelerator_mods,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
} }
if (items->callback) if (items->callback)
@ -55,7 +56,7 @@ build_menu (MenuItem *items,
items->user_data); items->user_data);
if (items->subitems) if (items->subitems)
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_item), build_menu (items->subitems, table)); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_item), build_menu (items->subitems, accel_group));
gtk_widget_show (menu_item); gtk_widget_show (menu_item);
items->widget = menu_item; items->widget = menu_item;

View File

@ -31,9 +31,9 @@ typedef void (*MenuItemCallback) (GtkWidget *widget,
struct _MenuItem struct _MenuItem
{ {
char *label; gchar *label;
char accelerator_key; guint accelerator_key;
int accelerator_mods; guint accelerator_mods;
MenuItemCallback callback; MenuItemCallback callback;
gpointer user_data; gpointer user_data;
MenuItem *subitems; MenuItem *subitems;
@ -42,6 +42,6 @@ struct _MenuItem
/* Function declarations */ /* Function declarations */
GtkWidget * build_menu (MenuItem *, GtkAcceleratorTable *); GtkWidget * build_menu (MenuItem *, GtkAccelGroup *);
#endif /* BUILDMENU_H */ #endif /* BUILDMENU_H */

View File

@ -92,7 +92,7 @@ struct _ChannelsDialog {
GtkWidget *channel_list; GtkWidget *channel_list;
GtkWidget *preview; GtkWidget *preview;
GtkWidget *ops_menu; GtkWidget *ops_menu;
GtkAcceleratorTable *accel_table; GtkAccelGroup *accel_group;
int num_components; int num_components;
int base_type; int base_type;
@ -204,7 +204,7 @@ channels_dialog_create ()
channelsD->active_channel = NULL; channelsD->active_channel = NULL;
channelsD->floating_sel = NULL; channelsD->floating_sel = NULL;
channelsD->channel_widgets = NULL; channelsD->channel_widgets = NULL;
channelsD->accel_table = gtk_accelerator_table_new (); channelsD->accel_group = gtk_accel_group_new ();
if (preview_size) if (preview_size)
{ {
@ -217,7 +217,7 @@ channels_dialog_create ()
gtk_container_border_width (GTK_CONTAINER (vbox), 2); gtk_container_border_width (GTK_CONTAINER (vbox), 2);
/* The layers commands pulldown menu */ /* The layers commands pulldown menu */
channelsD->ops_menu = build_menu (channels_ops, channelsD->accel_table); channelsD->ops_menu = build_menu (channels_ops, channelsD->accel_group);
/* The channels listbox */ /* The channels listbox */
listbox = gtk_scrolled_window_new (NULL, NULL); listbox = gtk_scrolled_window_new (NULL, NULL);
@ -830,8 +830,8 @@ channels_dialog_map_callback (GtkWidget *w,
if (!channelsD) if (!channelsD)
return; return;
gtk_window_add_accelerator_table (GTK_WINDOW (lc_shell), gtk_window_add_accel_group (GTK_WINDOW (lc_shell),
channelsD->accel_table); channelsD->accel_group);
} }
static void static void
@ -841,8 +841,8 @@ channels_dialog_unmap_callback (GtkWidget *w,
if (!channelsD) if (!channelsD)
return; return;
gtk_window_remove_accelerator_table (GTK_WINDOW (lc_shell), gtk_window_remove_accel_group (GTK_WINDOW (lc_shell),
channelsD->accel_table); channelsD->accel_group);
} }
static void static void

View File

@ -373,7 +373,6 @@ file_new_resolution_callback (GtkWidget *widget,
gchar *newvalue; gchar *newvalue;
NewImageValues *vals; NewImageValues *vals;
float new_resolution;
float temp_units; float temp_units;
float temp_pixels; float temp_pixels;
char buffer[12]; char buffer[12];
@ -406,8 +405,9 @@ file_new_resolution_callback (GtkWidget *widget,
} }
void void
file_new_cmd_callback (GtkWidget *widget, file_new_cmd_callback (GtkWidget *widget,
gpointer client_data) gpointer callback_data,
guint callback_action)
{ {
GDisplay *gdisp; GDisplay *gdisp;
NewImageValues *vals; NewImageValues *vals;
@ -418,7 +418,6 @@ file_new_cmd_callback (GtkWidget *widget,
GtkWidget *table; GtkWidget *table;
GtkWidget *frame; GtkWidget *frame;
GtkWidget *radio_box; GtkWidget *radio_box;
GtkWidget *units_box;
GtkWidget *menu; GtkWidget *menu;
GtkWidget *menuitem; GtkWidget *menuitem;
GtkWidget *optionmenu; GtkWidget *optionmenu;
@ -439,7 +438,7 @@ file_new_cmd_callback (GtkWidget *widget,
/* Before we try to determine the responsible gdisplay, /* Before we try to determine the responsible gdisplay,
* make sure this wasn't called from the toolbox * make sure this wasn't called from the toolbox
*/ */
if ((long) client_data) if (callback_action)
gdisp = gdisplay_active (); gdisp = gdisplay_active ();
else else
gdisp = NULL; gdisp = NULL;
@ -2621,13 +2620,14 @@ tools_swap_colors_cmd_callback (GtkWidget *widget,
} }
void void
tools_select_cmd_callback (GtkWidget *widget, tools_select_cmd_callback (GtkWidget *widget,
gpointer client_data) gpointer callback_data,
guint callback_action)
{ {
GDisplay * gdisp; GDisplay * gdisp;
/* Activate the approriate widget */ /* Activate the approriate widget */
gtk_widget_activate (tool_widgets[tool_info[(long) client_data].toolbar_position]); gtk_widget_activate (tool_widgets[tool_info[callback_action].toolbar_position]);
gdisp = gdisplay_active (); gdisp = gdisplay_active ();
@ -2635,10 +2635,11 @@ tools_select_cmd_callback (GtkWidget *widget,
} }
void void
filters_repeat_cmd_callback (GtkWidget *widget, filters_repeat_cmd_callback (GtkWidget *widget,
gpointer client_data) gpointer callback_data,
guint callback_action)
{ {
plug_in_repeat ((long) client_data); plug_in_repeat (callback_action);
} }
void void

View File

@ -4,7 +4,9 @@
#include "gtk/gtk.h" #include "gtk/gtk.h"
void file_new_cmd_callback (GtkWidget *, gpointer); void file_new_cmd_callback (GtkWidget *widget,
gpointer callback_data,
guint callback_action);
void file_open_cmd_callback (GtkWidget *, gpointer); void file_open_cmd_callback (GtkWidget *, gpointer);
void file_save_cmd_callback (GtkWidget *, gpointer); void file_save_cmd_callback (GtkWidget *, gpointer);
void file_save_as_cmd_callback (GtkWidget *, gpointer); void file_save_as_cmd_callback (GtkWidget *, gpointer);
@ -80,8 +82,12 @@ void layers_mask_select_cmd_callback (GtkWidget *, gpointer);
void layers_add_alpha_channel_cmd_callback (GtkWidget *, gpointer); void layers_add_alpha_channel_cmd_callback (GtkWidget *, gpointer);
void tools_default_colors_cmd_callback (GtkWidget *, gpointer); void tools_default_colors_cmd_callback (GtkWidget *, gpointer);
void tools_swap_colors_cmd_callback (GtkWidget *, gpointer); void tools_swap_colors_cmd_callback (GtkWidget *, gpointer);
void tools_select_cmd_callback (GtkWidget *, gpointer); void tools_select_cmd_callback (GtkWidget *widget,
void filters_repeat_cmd_callback (GtkWidget *, gpointer); gpointer callback_data,
guint callback_action);
void filters_repeat_cmd_callback (GtkWidget *widget,
gpointer callback_data,
guint callback_action);
void dialogs_brushes_cmd_callback (GtkWidget *, gpointer); void dialogs_brushes_cmd_callback (GtkWidget *, gpointer);
void dialogs_patterns_cmd_callback (GtkWidget *, gpointer); void dialogs_patterns_cmd_callback (GtkWidget *, gpointer);
void dialogs_palette_cmd_callback (GtkWidget *, gpointer); void dialogs_palette_cmd_callback (GtkWidget *, gpointer);

View File

@ -565,7 +565,7 @@ create_toolbox ()
GtkWidget *vbox; GtkWidget *vbox;
GtkWidget *menubar; GtkWidget *menubar;
GList *device_list; GList *device_list;
GtkAcceleratorTable *table; GtkAccelGroup *table;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL); window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_wmclass (GTK_WINDOW (window), "toolbox", "Gimp"); gtk_window_set_wmclass (GTK_WINDOW (window), "toolbox", "Gimp");
@ -626,7 +626,7 @@ create_toolbox ()
gtk_widget_show (menubar); gtk_widget_show (menubar);
/* Install the accelerator table in the main window */ /* Install the accelerator table in the main window */
gtk_window_add_accelerator_table (GTK_WINDOW (window), table); gtk_window_add_accel_group (GTK_WINDOW (window), table);
vbox = gtk_vbox_new (FALSE, 1); vbox = gtk_vbox_new (FALSE, 1);
gtk_box_pack_start (GTK_BOX (main_vbox), vbox, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (main_vbox), vbox, TRUE, TRUE, 0);
@ -673,7 +673,7 @@ create_display_shell (int gdisp_id,
int type) int type)
{ {
static GtkWidget *image_popup_menu = NULL; static GtkWidget *image_popup_menu = NULL;
static GtkAcceleratorTable *image_accelerator_table = NULL; static GtkAccelGroup *image_accel_group = NULL;
GDisplay *gdisp; GDisplay *gdisp;
GtkWidget *table; GtkWidget *table;
int n_width, n_height; int n_width, n_height;
@ -798,13 +798,13 @@ create_display_shell (int gdisp_id,
GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
if (! image_popup_menu) if (! image_popup_menu)
menus_get_image_menu (&image_popup_menu, &image_accelerator_table); menus_get_image_menu (&image_popup_menu, &image_accel_group);
/* the popup menu */ /* the popup menu */
gdisp->popup = image_popup_menu; gdisp->popup = image_popup_menu;
/* the accelerator table for images */ /* the accelerator table for images */
gtk_window_add_accelerator_table (GTK_WINDOW (gdisp->shell), image_accelerator_table); gtk_window_add_accel_group (GTK_WINDOW (gdisp->shell), image_accel_group);
gtk_widget_show (gdisp->hsb); gtk_widget_show (gdisp->hsb);
gtk_widget_show (gdisp->vsb); gtk_widget_show (gdisp->vsb);

View File

@ -565,7 +565,7 @@ create_toolbox ()
GtkWidget *vbox; GtkWidget *vbox;
GtkWidget *menubar; GtkWidget *menubar;
GList *device_list; GList *device_list;
GtkAcceleratorTable *table; GtkAccelGroup *table;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL); window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_wmclass (GTK_WINDOW (window), "toolbox", "Gimp"); gtk_window_set_wmclass (GTK_WINDOW (window), "toolbox", "Gimp");
@ -626,7 +626,7 @@ create_toolbox ()
gtk_widget_show (menubar); gtk_widget_show (menubar);
/* Install the accelerator table in the main window */ /* Install the accelerator table in the main window */
gtk_window_add_accelerator_table (GTK_WINDOW (window), table); gtk_window_add_accel_group (GTK_WINDOW (window), table);
vbox = gtk_vbox_new (FALSE, 1); vbox = gtk_vbox_new (FALSE, 1);
gtk_box_pack_start (GTK_BOX (main_vbox), vbox, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (main_vbox), vbox, TRUE, TRUE, 0);
@ -673,7 +673,7 @@ create_display_shell (int gdisp_id,
int type) int type)
{ {
static GtkWidget *image_popup_menu = NULL; static GtkWidget *image_popup_menu = NULL;
static GtkAcceleratorTable *image_accelerator_table = NULL; static GtkAccelGroup *image_accel_group = NULL;
GDisplay *gdisp; GDisplay *gdisp;
GtkWidget *table; GtkWidget *table;
int n_width, n_height; int n_width, n_height;
@ -798,13 +798,13 @@ create_display_shell (int gdisp_id,
GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
if (! image_popup_menu) if (! image_popup_menu)
menus_get_image_menu (&image_popup_menu, &image_accelerator_table); menus_get_image_menu (&image_popup_menu, &image_accel_group);
/* the popup menu */ /* the popup menu */
gdisp->popup = image_popup_menu; gdisp->popup = image_popup_menu;
/* the accelerator table for images */ /* the accelerator table for images */
gtk_window_add_accelerator_table (GTK_WINDOW (gdisp->shell), image_accelerator_table); gtk_window_add_accel_group (GTK_WINDOW (gdisp->shell), image_accel_group);
gtk_widget_show (gdisp->hsb); gtk_widget_show (gdisp->hsb);
gtk_widget_show (gdisp->vsb); gtk_widget_show (gdisp->vsb);

View File

@ -1339,7 +1339,7 @@ parse_menu_path (gpointer val1p,
goto error; goto error;
token = get_next_token (); token = get_next_token ();
menus_add_path (menu_path, accelerator); // FIXME menus_add_path (menu_path, accelerator);
return OK; return OK;

View File

@ -320,7 +320,7 @@ typedef struct {
GtkWidget *control_coloring_popup; /* Coloring type menu */ GtkWidget *control_coloring_popup; /* Coloring type menu */
GtkWidget *control_sel_ops_popup; /* Selection ops menu */ GtkWidget *control_sel_ops_popup; /* Selection ops menu */
GtkAcceleratorTable *accelerator_table; GtkAccelGroup *accel_group;
/* Blending and coloring menus */ /* Blending and coloring menus */
@ -1015,7 +1015,7 @@ grad_create_gradient_editor(void)
g_editor->control_coloring_popup = NULL; g_editor->control_coloring_popup = NULL;
g_editor->control_sel_ops_popup = NULL; g_editor->control_sel_ops_popup = NULL;
g_editor->accelerator_table = NULL; g_editor->accel_group = NULL;
for (i = 0; for (i = 0;
i < (sizeof(g_editor->control_blending_items) / sizeof(g_editor->control_blending_items[0])); i < (sizeof(g_editor->control_blending_items) / sizeof(g_editor->control_blending_items[0]));
@ -2871,16 +2871,15 @@ cpopup_create_main_menu(void)
GtkWidget *menu; GtkWidget *menu;
GtkWidget *menuitem; GtkWidget *menuitem;
GtkWidget *label; GtkWidget *label;
GtkAcceleratorTable *acc_table; GtkAccelGroup *accel_group;
menu = gtk_menu_new(); menu = gtk_menu_new();
acc_table = gtk_accelerator_table_new(); accel_group = gtk_accel_group_new();
g_editor->accelerator_table = acc_table; g_editor->accel_group = accel_group;
gtk_menu_set_accelerator_table(GTK_MENU(menu), acc_table); gtk_menu_set_accel_group (GTK_MENU(menu), accel_group);
gtk_window_add_accelerator_table(GTK_WINDOW(g_editor->shell), acc_table); gtk_window_add_accel_group (GTK_WINDOW (g_editor->shell), accel_group);
gtk_window_add_accelerator_table(GTK_WINDOW(g_editor->shell), acc_table);
/* Left endpoint */ /* Left endpoint */
@ -2891,7 +2890,11 @@ cpopup_create_main_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'L', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'L', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menuitem = gtk_menu_item_new_with_label("Load from"); menuitem = gtk_menu_item_new_with_label("Load from");
g_editor->control_left_load_popup = cpopup_create_load_menu(g_editor->left_load_color_boxes, g_editor->control_left_load_popup = cpopup_create_load_menu(g_editor->left_load_color_boxes,
@ -2929,7 +2932,11 @@ cpopup_create_main_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'R', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'R', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menuitem = gtk_menu_item_new_with_label("Load from"); menuitem = gtk_menu_item_new_with_label("Load from");
g_editor->control_right_load_popup = cpopup_create_load_menu(g_editor->right_load_color_boxes, g_editor->control_right_load_popup = cpopup_create_load_menu(g_editor->right_load_color_boxes,
@ -2988,7 +2995,11 @@ cpopup_create_main_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'S', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'S', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Split uniformly */ /* Split uniformly */
@ -2998,7 +3009,11 @@ cpopup_create_main_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'U', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'U', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Delete */ /* Delete */
@ -3009,7 +3024,11 @@ cpopup_create_main_menu(void)
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
g_editor->control_delete_menu_item = menuitem; g_editor->control_delete_menu_item = menuitem;
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'D', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'D', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Recenter */ /* Recenter */
@ -3019,7 +3038,11 @@ cpopup_create_main_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'C', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'C', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Redistribute */ /* Redistribute */
@ -3029,7 +3052,11 @@ cpopup_create_main_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'C', GDK_CONTROL_MASK); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'C', GDK_CONTROL_MASK,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Selection ops */ /* Selection ops */
@ -3376,17 +3403,18 @@ static GtkWidget *
cpopup_create_menu_item_with_label(char *str, GtkWidget **label) cpopup_create_menu_item_with_label(char *str, GtkWidget **label)
{ {
GtkWidget *menuitem; GtkWidget *menuitem;
GtkWidget *wlabel; GtkWidget *accel_label;
menuitem = gtk_menu_item_new(); menuitem = gtk_menu_item_new();
wlabel = gtk_label_new(str); accel_label = gtk_accel_label_new(str);
gtk_misc_set_alignment(GTK_MISC(wlabel), 0.0, 0.5); gtk_misc_set_alignment(GTK_MISC(accel_label), 0.0, 0.5);
gtk_container_add(GTK_CONTAINER(menuitem), wlabel); gtk_container_add(GTK_CONTAINER(menuitem), accel_label);
gtk_widget_show(wlabel); gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (accel_label), menuitem);
gtk_widget_show(accel_label);
if (label) if (label)
*label = wlabel; *label = accel_label;
return menuitem; return menuitem;
} /* cpopup_create_menu_item_with_label */ } /* cpopup_create_menu_item_with_label */
@ -3476,13 +3504,13 @@ cpopup_create_load_menu(GtkWidget **color_boxes, GtkWidget **labels,
{ {
GtkWidget *menu; GtkWidget *menu;
GtkWidget *menuitem; GtkWidget *menuitem;
GtkAcceleratorTable *acc_table; GtkAccelGroup *accel_group;
int i; int i;
menu = gtk_menu_new(); menu = gtk_menu_new();
acc_table = g_editor->accelerator_table; accel_group = g_editor->accel_group;
gtk_menu_set_accelerator_table(GTK_MENU(menu), acc_table); gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
/* Create items */ /* Create items */
@ -3502,23 +3530,32 @@ cpopup_create_load_menu(GtkWidget **color_boxes, GtkWidget **labels,
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
switch (i) { switch (i) {
case 0: case 0:
gtk_widget_install_accelerator(menuitem, acc_table, "activate", gtk_widget_add_accelerator(menuitem,
accel_key_0, accel_mods_0); "activate",
break; accel_group,
accel_key_0, accel_mods_0,
case 1: GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", break;
accel_key_1, accel_mods_1);
break; case 1:
gtk_widget_add_accelerator(menuitem,
case 2: "activate",
gtk_widget_install_accelerator(menuitem, acc_table, "activate", accel_group,
accel_key_2, accel_mods_2); accel_key_1, accel_mods_1,
break; GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
break;
default:
break; case 2:
gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
accel_key_2, accel_mods_2,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
break;
default:
break;
} /* switch */ } /* switch */
} /* for */ } /* for */
@ -3886,12 +3923,12 @@ cpopup_create_sel_ops_menu(void)
{ {
GtkWidget *menu; GtkWidget *menu;
GtkWidget *menuitem; GtkWidget *menuitem;
GtkAcceleratorTable *acc_table; GtkAccelGroup *accel_group;
menu = gtk_menu_new(); menu = gtk_menu_new();
acc_table = g_editor->accelerator_table; accel_group = g_editor->accel_group;
gtk_menu_set_accelerator_table(GTK_MENU(menu), acc_table); gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
/* Flip */ /* Flip */
@ -3901,7 +3938,11 @@ cpopup_create_sel_ops_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'F', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'F', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Replicate */ /* Replicate */
@ -3911,7 +3952,11 @@ cpopup_create_sel_ops_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'M', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'M', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Blend colors / opacity */ /* Blend colors / opacity */
@ -3926,7 +3971,11 @@ cpopup_create_sel_ops_menu(void)
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
g_editor->control_blend_colors_menu_item = menuitem; g_editor->control_blend_colors_menu_item = menuitem;
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'B', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'B', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menuitem = gtk_menu_item_new_with_label("Blend endpoints' opacity"); menuitem = gtk_menu_item_new_with_label("Blend endpoints' opacity");
gtk_signal_connect(GTK_OBJECT(menuitem), "activate", gtk_signal_connect(GTK_OBJECT(menuitem), "activate",
@ -3934,7 +3983,11 @@ cpopup_create_sel_ops_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'B', GDK_CONTROL_MASK); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'B', GDK_CONTROL_MASK,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
g_editor->control_blend_opacity_menu_item = menuitem; g_editor->control_blend_opacity_menu_item = menuitem;
return menu; return menu;

View File

@ -320,7 +320,7 @@ typedef struct {
GtkWidget *control_coloring_popup; /* Coloring type menu */ GtkWidget *control_coloring_popup; /* Coloring type menu */
GtkWidget *control_sel_ops_popup; /* Selection ops menu */ GtkWidget *control_sel_ops_popup; /* Selection ops menu */
GtkAcceleratorTable *accelerator_table; GtkAccelGroup *accel_group;
/* Blending and coloring menus */ /* Blending and coloring menus */
@ -1015,7 +1015,7 @@ grad_create_gradient_editor(void)
g_editor->control_coloring_popup = NULL; g_editor->control_coloring_popup = NULL;
g_editor->control_sel_ops_popup = NULL; g_editor->control_sel_ops_popup = NULL;
g_editor->accelerator_table = NULL; g_editor->accel_group = NULL;
for (i = 0; for (i = 0;
i < (sizeof(g_editor->control_blending_items) / sizeof(g_editor->control_blending_items[0])); i < (sizeof(g_editor->control_blending_items) / sizeof(g_editor->control_blending_items[0]));
@ -2871,16 +2871,15 @@ cpopup_create_main_menu(void)
GtkWidget *menu; GtkWidget *menu;
GtkWidget *menuitem; GtkWidget *menuitem;
GtkWidget *label; GtkWidget *label;
GtkAcceleratorTable *acc_table; GtkAccelGroup *accel_group;
menu = gtk_menu_new(); menu = gtk_menu_new();
acc_table = gtk_accelerator_table_new(); accel_group = gtk_accel_group_new();
g_editor->accelerator_table = acc_table; g_editor->accel_group = accel_group;
gtk_menu_set_accelerator_table(GTK_MENU(menu), acc_table); gtk_menu_set_accel_group (GTK_MENU(menu), accel_group);
gtk_window_add_accelerator_table(GTK_WINDOW(g_editor->shell), acc_table); gtk_window_add_accel_group (GTK_WINDOW (g_editor->shell), accel_group);
gtk_window_add_accelerator_table(GTK_WINDOW(g_editor->shell), acc_table);
/* Left endpoint */ /* Left endpoint */
@ -2891,7 +2890,11 @@ cpopup_create_main_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'L', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'L', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menuitem = gtk_menu_item_new_with_label("Load from"); menuitem = gtk_menu_item_new_with_label("Load from");
g_editor->control_left_load_popup = cpopup_create_load_menu(g_editor->left_load_color_boxes, g_editor->control_left_load_popup = cpopup_create_load_menu(g_editor->left_load_color_boxes,
@ -2929,7 +2932,11 @@ cpopup_create_main_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'R', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'R', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menuitem = gtk_menu_item_new_with_label("Load from"); menuitem = gtk_menu_item_new_with_label("Load from");
g_editor->control_right_load_popup = cpopup_create_load_menu(g_editor->right_load_color_boxes, g_editor->control_right_load_popup = cpopup_create_load_menu(g_editor->right_load_color_boxes,
@ -2988,7 +2995,11 @@ cpopup_create_main_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'S', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'S', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Split uniformly */ /* Split uniformly */
@ -2998,7 +3009,11 @@ cpopup_create_main_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'U', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'U', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Delete */ /* Delete */
@ -3009,7 +3024,11 @@ cpopup_create_main_menu(void)
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
g_editor->control_delete_menu_item = menuitem; g_editor->control_delete_menu_item = menuitem;
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'D', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'D', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Recenter */ /* Recenter */
@ -3019,7 +3038,11 @@ cpopup_create_main_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'C', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'C', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Redistribute */ /* Redistribute */
@ -3029,7 +3052,11 @@ cpopup_create_main_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'C', GDK_CONTROL_MASK); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'C', GDK_CONTROL_MASK,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Selection ops */ /* Selection ops */
@ -3376,17 +3403,18 @@ static GtkWidget *
cpopup_create_menu_item_with_label(char *str, GtkWidget **label) cpopup_create_menu_item_with_label(char *str, GtkWidget **label)
{ {
GtkWidget *menuitem; GtkWidget *menuitem;
GtkWidget *wlabel; GtkWidget *accel_label;
menuitem = gtk_menu_item_new(); menuitem = gtk_menu_item_new();
wlabel = gtk_label_new(str); accel_label = gtk_accel_label_new(str);
gtk_misc_set_alignment(GTK_MISC(wlabel), 0.0, 0.5); gtk_misc_set_alignment(GTK_MISC(accel_label), 0.0, 0.5);
gtk_container_add(GTK_CONTAINER(menuitem), wlabel); gtk_container_add(GTK_CONTAINER(menuitem), accel_label);
gtk_widget_show(wlabel); gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (accel_label), menuitem);
gtk_widget_show(accel_label);
if (label) if (label)
*label = wlabel; *label = accel_label;
return menuitem; return menuitem;
} /* cpopup_create_menu_item_with_label */ } /* cpopup_create_menu_item_with_label */
@ -3476,13 +3504,13 @@ cpopup_create_load_menu(GtkWidget **color_boxes, GtkWidget **labels,
{ {
GtkWidget *menu; GtkWidget *menu;
GtkWidget *menuitem; GtkWidget *menuitem;
GtkAcceleratorTable *acc_table; GtkAccelGroup *accel_group;
int i; int i;
menu = gtk_menu_new(); menu = gtk_menu_new();
acc_table = g_editor->accelerator_table; accel_group = g_editor->accel_group;
gtk_menu_set_accelerator_table(GTK_MENU(menu), acc_table); gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
/* Create items */ /* Create items */
@ -3502,23 +3530,32 @@ cpopup_create_load_menu(GtkWidget **color_boxes, GtkWidget **labels,
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
switch (i) { switch (i) {
case 0: case 0:
gtk_widget_install_accelerator(menuitem, acc_table, "activate", gtk_widget_add_accelerator(menuitem,
accel_key_0, accel_mods_0); "activate",
break; accel_group,
accel_key_0, accel_mods_0,
case 1: GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", break;
accel_key_1, accel_mods_1);
break; case 1:
gtk_widget_add_accelerator(menuitem,
case 2: "activate",
gtk_widget_install_accelerator(menuitem, acc_table, "activate", accel_group,
accel_key_2, accel_mods_2); accel_key_1, accel_mods_1,
break; GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
break;
default:
break; case 2:
gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
accel_key_2, accel_mods_2,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
break;
default:
break;
} /* switch */ } /* switch */
} /* for */ } /* for */
@ -3886,12 +3923,12 @@ cpopup_create_sel_ops_menu(void)
{ {
GtkWidget *menu; GtkWidget *menu;
GtkWidget *menuitem; GtkWidget *menuitem;
GtkAcceleratorTable *acc_table; GtkAccelGroup *accel_group;
menu = gtk_menu_new(); menu = gtk_menu_new();
acc_table = g_editor->accelerator_table; accel_group = g_editor->accel_group;
gtk_menu_set_accelerator_table(GTK_MENU(menu), acc_table); gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
/* Flip */ /* Flip */
@ -3901,7 +3938,11 @@ cpopup_create_sel_ops_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'F', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'F', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Replicate */ /* Replicate */
@ -3911,7 +3952,11 @@ cpopup_create_sel_ops_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'M', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'M', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Blend colors / opacity */ /* Blend colors / opacity */
@ -3926,7 +3971,11 @@ cpopup_create_sel_ops_menu(void)
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
g_editor->control_blend_colors_menu_item = menuitem; g_editor->control_blend_colors_menu_item = menuitem;
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'B', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'B', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menuitem = gtk_menu_item_new_with_label("Blend endpoints' opacity"); menuitem = gtk_menu_item_new_with_label("Blend endpoints' opacity");
gtk_signal_connect(GTK_OBJECT(menuitem), "activate", gtk_signal_connect(GTK_OBJECT(menuitem), "activate",
@ -3934,7 +3983,11 @@ cpopup_create_sel_ops_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'B', GDK_CONTROL_MASK); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'B', GDK_CONTROL_MASK,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
g_editor->control_blend_opacity_menu_item = menuitem; g_editor->control_blend_opacity_menu_item = menuitem;
return menu; return menu;

View File

@ -92,7 +92,7 @@ struct _ChannelsDialog {
GtkWidget *channel_list; GtkWidget *channel_list;
GtkWidget *preview; GtkWidget *preview;
GtkWidget *ops_menu; GtkWidget *ops_menu;
GtkAcceleratorTable *accel_table; GtkAccelGroup *accel_group;
int num_components; int num_components;
int base_type; int base_type;
@ -204,7 +204,7 @@ channels_dialog_create ()
channelsD->active_channel = NULL; channelsD->active_channel = NULL;
channelsD->floating_sel = NULL; channelsD->floating_sel = NULL;
channelsD->channel_widgets = NULL; channelsD->channel_widgets = NULL;
channelsD->accel_table = gtk_accelerator_table_new (); channelsD->accel_group = gtk_accel_group_new ();
if (preview_size) if (preview_size)
{ {
@ -217,7 +217,7 @@ channels_dialog_create ()
gtk_container_border_width (GTK_CONTAINER (vbox), 2); gtk_container_border_width (GTK_CONTAINER (vbox), 2);
/* The layers commands pulldown menu */ /* The layers commands pulldown menu */
channelsD->ops_menu = build_menu (channels_ops, channelsD->accel_table); channelsD->ops_menu = build_menu (channels_ops, channelsD->accel_group);
/* The channels listbox */ /* The channels listbox */
listbox = gtk_scrolled_window_new (NULL, NULL); listbox = gtk_scrolled_window_new (NULL, NULL);
@ -830,8 +830,8 @@ channels_dialog_map_callback (GtkWidget *w,
if (!channelsD) if (!channelsD)
return; return;
gtk_window_add_accelerator_table (GTK_WINDOW (lc_shell), gtk_window_add_accel_group (GTK_WINDOW (lc_shell),
channelsD->accel_table); channelsD->accel_group);
} }
static void static void
@ -841,8 +841,8 @@ channels_dialog_unmap_callback (GtkWidget *w,
if (!channelsD) if (!channelsD)
return; return;
gtk_window_remove_accelerator_table (GTK_WINDOW (lc_shell), gtk_window_remove_accel_group (GTK_WINDOW (lc_shell),
channelsD->accel_table); channelsD->accel_group);
} }
static void static void

View File

@ -373,7 +373,6 @@ file_new_resolution_callback (GtkWidget *widget,
gchar *newvalue; gchar *newvalue;
NewImageValues *vals; NewImageValues *vals;
float new_resolution;
float temp_units; float temp_units;
float temp_pixels; float temp_pixels;
char buffer[12]; char buffer[12];
@ -406,8 +405,9 @@ file_new_resolution_callback (GtkWidget *widget,
} }
void void
file_new_cmd_callback (GtkWidget *widget, file_new_cmd_callback (GtkWidget *widget,
gpointer client_data) gpointer callback_data,
guint callback_action)
{ {
GDisplay *gdisp; GDisplay *gdisp;
NewImageValues *vals; NewImageValues *vals;
@ -418,7 +418,6 @@ file_new_cmd_callback (GtkWidget *widget,
GtkWidget *table; GtkWidget *table;
GtkWidget *frame; GtkWidget *frame;
GtkWidget *radio_box; GtkWidget *radio_box;
GtkWidget *units_box;
GtkWidget *menu; GtkWidget *menu;
GtkWidget *menuitem; GtkWidget *menuitem;
GtkWidget *optionmenu; GtkWidget *optionmenu;
@ -439,7 +438,7 @@ file_new_cmd_callback (GtkWidget *widget,
/* Before we try to determine the responsible gdisplay, /* Before we try to determine the responsible gdisplay,
* make sure this wasn't called from the toolbox * make sure this wasn't called from the toolbox
*/ */
if ((long) client_data) if (callback_action)
gdisp = gdisplay_active (); gdisp = gdisplay_active ();
else else
gdisp = NULL; gdisp = NULL;
@ -2621,13 +2620,14 @@ tools_swap_colors_cmd_callback (GtkWidget *widget,
} }
void void
tools_select_cmd_callback (GtkWidget *widget, tools_select_cmd_callback (GtkWidget *widget,
gpointer client_data) gpointer callback_data,
guint callback_action)
{ {
GDisplay * gdisp; GDisplay * gdisp;
/* Activate the approriate widget */ /* Activate the approriate widget */
gtk_widget_activate (tool_widgets[tool_info[(long) client_data].toolbar_position]); gtk_widget_activate (tool_widgets[tool_info[callback_action].toolbar_position]);
gdisp = gdisplay_active (); gdisp = gdisplay_active ();
@ -2635,10 +2635,11 @@ tools_select_cmd_callback (GtkWidget *widget,
} }
void void
filters_repeat_cmd_callback (GtkWidget *widget, filters_repeat_cmd_callback (GtkWidget *widget,
gpointer client_data) gpointer callback_data,
guint callback_action)
{ {
plug_in_repeat ((long) client_data); plug_in_repeat (callback_action);
} }
void void

View File

@ -4,7 +4,9 @@
#include "gtk/gtk.h" #include "gtk/gtk.h"
void file_new_cmd_callback (GtkWidget *, gpointer); void file_new_cmd_callback (GtkWidget *widget,
gpointer callback_data,
guint callback_action);
void file_open_cmd_callback (GtkWidget *, gpointer); void file_open_cmd_callback (GtkWidget *, gpointer);
void file_save_cmd_callback (GtkWidget *, gpointer); void file_save_cmd_callback (GtkWidget *, gpointer);
void file_save_as_cmd_callback (GtkWidget *, gpointer); void file_save_as_cmd_callback (GtkWidget *, gpointer);
@ -80,8 +82,12 @@ void layers_mask_select_cmd_callback (GtkWidget *, gpointer);
void layers_add_alpha_channel_cmd_callback (GtkWidget *, gpointer); void layers_add_alpha_channel_cmd_callback (GtkWidget *, gpointer);
void tools_default_colors_cmd_callback (GtkWidget *, gpointer); void tools_default_colors_cmd_callback (GtkWidget *, gpointer);
void tools_swap_colors_cmd_callback (GtkWidget *, gpointer); void tools_swap_colors_cmd_callback (GtkWidget *, gpointer);
void tools_select_cmd_callback (GtkWidget *, gpointer); void tools_select_cmd_callback (GtkWidget *widget,
void filters_repeat_cmd_callback (GtkWidget *, gpointer); gpointer callback_data,
guint callback_action);
void filters_repeat_cmd_callback (GtkWidget *widget,
gpointer callback_data,
guint callback_action);
void dialogs_brushes_cmd_callback (GtkWidget *, gpointer); void dialogs_brushes_cmd_callback (GtkWidget *, gpointer);
void dialogs_patterns_cmd_callback (GtkWidget *, gpointer); void dialogs_patterns_cmd_callback (GtkWidget *, gpointer);
void dialogs_palette_cmd_callback (GtkWidget *, gpointer); void dialogs_palette_cmd_callback (GtkWidget *, gpointer);

View File

@ -320,7 +320,7 @@ typedef struct {
GtkWidget *control_coloring_popup; /* Coloring type menu */ GtkWidget *control_coloring_popup; /* Coloring type menu */
GtkWidget *control_sel_ops_popup; /* Selection ops menu */ GtkWidget *control_sel_ops_popup; /* Selection ops menu */
GtkAcceleratorTable *accelerator_table; GtkAccelGroup *accel_group;
/* Blending and coloring menus */ /* Blending and coloring menus */
@ -1015,7 +1015,7 @@ grad_create_gradient_editor(void)
g_editor->control_coloring_popup = NULL; g_editor->control_coloring_popup = NULL;
g_editor->control_sel_ops_popup = NULL; g_editor->control_sel_ops_popup = NULL;
g_editor->accelerator_table = NULL; g_editor->accel_group = NULL;
for (i = 0; for (i = 0;
i < (sizeof(g_editor->control_blending_items) / sizeof(g_editor->control_blending_items[0])); i < (sizeof(g_editor->control_blending_items) / sizeof(g_editor->control_blending_items[0]));
@ -2871,16 +2871,15 @@ cpopup_create_main_menu(void)
GtkWidget *menu; GtkWidget *menu;
GtkWidget *menuitem; GtkWidget *menuitem;
GtkWidget *label; GtkWidget *label;
GtkAcceleratorTable *acc_table; GtkAccelGroup *accel_group;
menu = gtk_menu_new(); menu = gtk_menu_new();
acc_table = gtk_accelerator_table_new(); accel_group = gtk_accel_group_new();
g_editor->accelerator_table = acc_table; g_editor->accel_group = accel_group;
gtk_menu_set_accelerator_table(GTK_MENU(menu), acc_table); gtk_menu_set_accel_group (GTK_MENU(menu), accel_group);
gtk_window_add_accelerator_table(GTK_WINDOW(g_editor->shell), acc_table); gtk_window_add_accel_group (GTK_WINDOW (g_editor->shell), accel_group);
gtk_window_add_accelerator_table(GTK_WINDOW(g_editor->shell), acc_table);
/* Left endpoint */ /* Left endpoint */
@ -2891,7 +2890,11 @@ cpopup_create_main_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'L', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'L', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menuitem = gtk_menu_item_new_with_label("Load from"); menuitem = gtk_menu_item_new_with_label("Load from");
g_editor->control_left_load_popup = cpopup_create_load_menu(g_editor->left_load_color_boxes, g_editor->control_left_load_popup = cpopup_create_load_menu(g_editor->left_load_color_boxes,
@ -2929,7 +2932,11 @@ cpopup_create_main_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'R', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'R', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menuitem = gtk_menu_item_new_with_label("Load from"); menuitem = gtk_menu_item_new_with_label("Load from");
g_editor->control_right_load_popup = cpopup_create_load_menu(g_editor->right_load_color_boxes, g_editor->control_right_load_popup = cpopup_create_load_menu(g_editor->right_load_color_boxes,
@ -2988,7 +2995,11 @@ cpopup_create_main_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'S', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'S', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Split uniformly */ /* Split uniformly */
@ -2998,7 +3009,11 @@ cpopup_create_main_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'U', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'U', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Delete */ /* Delete */
@ -3009,7 +3024,11 @@ cpopup_create_main_menu(void)
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
g_editor->control_delete_menu_item = menuitem; g_editor->control_delete_menu_item = menuitem;
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'D', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'D', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Recenter */ /* Recenter */
@ -3019,7 +3038,11 @@ cpopup_create_main_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'C', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'C', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Redistribute */ /* Redistribute */
@ -3029,7 +3052,11 @@ cpopup_create_main_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'C', GDK_CONTROL_MASK); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'C', GDK_CONTROL_MASK,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Selection ops */ /* Selection ops */
@ -3376,17 +3403,18 @@ static GtkWidget *
cpopup_create_menu_item_with_label(char *str, GtkWidget **label) cpopup_create_menu_item_with_label(char *str, GtkWidget **label)
{ {
GtkWidget *menuitem; GtkWidget *menuitem;
GtkWidget *wlabel; GtkWidget *accel_label;
menuitem = gtk_menu_item_new(); menuitem = gtk_menu_item_new();
wlabel = gtk_label_new(str); accel_label = gtk_accel_label_new(str);
gtk_misc_set_alignment(GTK_MISC(wlabel), 0.0, 0.5); gtk_misc_set_alignment(GTK_MISC(accel_label), 0.0, 0.5);
gtk_container_add(GTK_CONTAINER(menuitem), wlabel); gtk_container_add(GTK_CONTAINER(menuitem), accel_label);
gtk_widget_show(wlabel); gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (accel_label), menuitem);
gtk_widget_show(accel_label);
if (label) if (label)
*label = wlabel; *label = accel_label;
return menuitem; return menuitem;
} /* cpopup_create_menu_item_with_label */ } /* cpopup_create_menu_item_with_label */
@ -3476,13 +3504,13 @@ cpopup_create_load_menu(GtkWidget **color_boxes, GtkWidget **labels,
{ {
GtkWidget *menu; GtkWidget *menu;
GtkWidget *menuitem; GtkWidget *menuitem;
GtkAcceleratorTable *acc_table; GtkAccelGroup *accel_group;
int i; int i;
menu = gtk_menu_new(); menu = gtk_menu_new();
acc_table = g_editor->accelerator_table; accel_group = g_editor->accel_group;
gtk_menu_set_accelerator_table(GTK_MENU(menu), acc_table); gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
/* Create items */ /* Create items */
@ -3502,23 +3530,32 @@ cpopup_create_load_menu(GtkWidget **color_boxes, GtkWidget **labels,
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
switch (i) { switch (i) {
case 0: case 0:
gtk_widget_install_accelerator(menuitem, acc_table, "activate", gtk_widget_add_accelerator(menuitem,
accel_key_0, accel_mods_0); "activate",
break; accel_group,
accel_key_0, accel_mods_0,
case 1: GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", break;
accel_key_1, accel_mods_1);
break; case 1:
gtk_widget_add_accelerator(menuitem,
case 2: "activate",
gtk_widget_install_accelerator(menuitem, acc_table, "activate", accel_group,
accel_key_2, accel_mods_2); accel_key_1, accel_mods_1,
break; GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
break;
default:
break; case 2:
gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
accel_key_2, accel_mods_2,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
break;
default:
break;
} /* switch */ } /* switch */
} /* for */ } /* for */
@ -3886,12 +3923,12 @@ cpopup_create_sel_ops_menu(void)
{ {
GtkWidget *menu; GtkWidget *menu;
GtkWidget *menuitem; GtkWidget *menuitem;
GtkAcceleratorTable *acc_table; GtkAccelGroup *accel_group;
menu = gtk_menu_new(); menu = gtk_menu_new();
acc_table = g_editor->accelerator_table; accel_group = g_editor->accel_group;
gtk_menu_set_accelerator_table(GTK_MENU(menu), acc_table); gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
/* Flip */ /* Flip */
@ -3901,7 +3938,11 @@ cpopup_create_sel_ops_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'F', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'F', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Replicate */ /* Replicate */
@ -3911,7 +3952,11 @@ cpopup_create_sel_ops_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'M', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'M', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Blend colors / opacity */ /* Blend colors / opacity */
@ -3926,7 +3971,11 @@ cpopup_create_sel_ops_menu(void)
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
g_editor->control_blend_colors_menu_item = menuitem; g_editor->control_blend_colors_menu_item = menuitem;
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'B', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'B', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menuitem = gtk_menu_item_new_with_label("Blend endpoints' opacity"); menuitem = gtk_menu_item_new_with_label("Blend endpoints' opacity");
gtk_signal_connect(GTK_OBJECT(menuitem), "activate", gtk_signal_connect(GTK_OBJECT(menuitem), "activate",
@ -3934,7 +3983,11 @@ cpopup_create_sel_ops_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'B', GDK_CONTROL_MASK); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'B', GDK_CONTROL_MASK,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
g_editor->control_blend_opacity_menu_item = menuitem; g_editor->control_blend_opacity_menu_item = menuitem;
return menu; return menu;

View File

@ -373,7 +373,6 @@ file_new_resolution_callback (GtkWidget *widget,
gchar *newvalue; gchar *newvalue;
NewImageValues *vals; NewImageValues *vals;
float new_resolution;
float temp_units; float temp_units;
float temp_pixels; float temp_pixels;
char buffer[12]; char buffer[12];
@ -406,8 +405,9 @@ file_new_resolution_callback (GtkWidget *widget,
} }
void void
file_new_cmd_callback (GtkWidget *widget, file_new_cmd_callback (GtkWidget *widget,
gpointer client_data) gpointer callback_data,
guint callback_action)
{ {
GDisplay *gdisp; GDisplay *gdisp;
NewImageValues *vals; NewImageValues *vals;
@ -418,7 +418,6 @@ file_new_cmd_callback (GtkWidget *widget,
GtkWidget *table; GtkWidget *table;
GtkWidget *frame; GtkWidget *frame;
GtkWidget *radio_box; GtkWidget *radio_box;
GtkWidget *units_box;
GtkWidget *menu; GtkWidget *menu;
GtkWidget *menuitem; GtkWidget *menuitem;
GtkWidget *optionmenu; GtkWidget *optionmenu;
@ -439,7 +438,7 @@ file_new_cmd_callback (GtkWidget *widget,
/* Before we try to determine the responsible gdisplay, /* Before we try to determine the responsible gdisplay,
* make sure this wasn't called from the toolbox * make sure this wasn't called from the toolbox
*/ */
if ((long) client_data) if (callback_action)
gdisp = gdisplay_active (); gdisp = gdisplay_active ();
else else
gdisp = NULL; gdisp = NULL;
@ -2621,13 +2620,14 @@ tools_swap_colors_cmd_callback (GtkWidget *widget,
} }
void void
tools_select_cmd_callback (GtkWidget *widget, tools_select_cmd_callback (GtkWidget *widget,
gpointer client_data) gpointer callback_data,
guint callback_action)
{ {
GDisplay * gdisp; GDisplay * gdisp;
/* Activate the approriate widget */ /* Activate the approriate widget */
gtk_widget_activate (tool_widgets[tool_info[(long) client_data].toolbar_position]); gtk_widget_activate (tool_widgets[tool_info[callback_action].toolbar_position]);
gdisp = gdisplay_active (); gdisp = gdisplay_active ();
@ -2635,10 +2635,11 @@ tools_select_cmd_callback (GtkWidget *widget,
} }
void void
filters_repeat_cmd_callback (GtkWidget *widget, filters_repeat_cmd_callback (GtkWidget *widget,
gpointer client_data) gpointer callback_data,
guint callback_action)
{ {
plug_in_repeat ((long) client_data); plug_in_repeat (callback_action);
} }
void void

View File

@ -4,7 +4,9 @@
#include "gtk/gtk.h" #include "gtk/gtk.h"
void file_new_cmd_callback (GtkWidget *, gpointer); void file_new_cmd_callback (GtkWidget *widget,
gpointer callback_data,
guint callback_action);
void file_open_cmd_callback (GtkWidget *, gpointer); void file_open_cmd_callback (GtkWidget *, gpointer);
void file_save_cmd_callback (GtkWidget *, gpointer); void file_save_cmd_callback (GtkWidget *, gpointer);
void file_save_as_cmd_callback (GtkWidget *, gpointer); void file_save_as_cmd_callback (GtkWidget *, gpointer);
@ -80,8 +82,12 @@ void layers_mask_select_cmd_callback (GtkWidget *, gpointer);
void layers_add_alpha_channel_cmd_callback (GtkWidget *, gpointer); void layers_add_alpha_channel_cmd_callback (GtkWidget *, gpointer);
void tools_default_colors_cmd_callback (GtkWidget *, gpointer); void tools_default_colors_cmd_callback (GtkWidget *, gpointer);
void tools_swap_colors_cmd_callback (GtkWidget *, gpointer); void tools_swap_colors_cmd_callback (GtkWidget *, gpointer);
void tools_select_cmd_callback (GtkWidget *, gpointer); void tools_select_cmd_callback (GtkWidget *widget,
void filters_repeat_cmd_callback (GtkWidget *, gpointer); gpointer callback_data,
guint callback_action);
void filters_repeat_cmd_callback (GtkWidget *widget,
gpointer callback_data,
guint callback_action);
void dialogs_brushes_cmd_callback (GtkWidget *, gpointer); void dialogs_brushes_cmd_callback (GtkWidget *, gpointer);
void dialogs_patterns_cmd_callback (GtkWidget *, gpointer); void dialogs_patterns_cmd_callback (GtkWidget *, gpointer);
void dialogs_palette_cmd_callback (GtkWidget *, gpointer); void dialogs_palette_cmd_callback (GtkWidget *, gpointer);

View File

@ -87,7 +87,7 @@ struct _LayersDialog {
GtkWidget *mode_box; GtkWidget *mode_box;
GtkWidget *opacity_box; GtkWidget *opacity_box;
GtkWidget *ops_menu; GtkWidget *ops_menu;
GtkAcceleratorTable *accel_table; GtkAccelGroup *accel_group;
GtkAdjustment *opacity_data; GtkAdjustment *opacity_data;
GdkGC *red_gc; /* for non-applied layer masks */ GdkGC *red_gc; /* for non-applied layer masks */
GdkGC *green_gc; /* for visible layer masks */ GdkGC *green_gc; /* for visible layer masks */
@ -629,7 +629,7 @@ layers_dialog_create ()
layersD->active_channel = NULL; layersD->active_channel = NULL;
layersD->floating_sel = NULL; layersD->floating_sel = NULL;
layersD->layer_widgets = NULL; layersD->layer_widgets = NULL;
layersD->accel_table = gtk_accelerator_table_new (); layersD->accel_group = gtk_accel_group_new ();
layersD->green_gc = NULL; layersD->green_gc = NULL;
layersD->red_gc = NULL; layersD->red_gc = NULL;
@ -644,7 +644,7 @@ layers_dialog_create ()
gtk_container_border_width (GTK_CONTAINER (vbox), 2); gtk_container_border_width (GTK_CONTAINER (vbox), 2);
/* The layers commands pulldown menu */ /* The layers commands pulldown menu */
layersD->ops_menu = build_menu (layers_ops, layersD->accel_table); layersD->ops_menu = build_menu (layers_ops, layersD->accel_group);
/* The Mode option menu, and the preserve transparency */ /* The Mode option menu, and the preserve transparency */
layersD->mode_box = util_box = gtk_hbox_new (FALSE, 1); layersD->mode_box = util_box = gtk_hbox_new (FALSE, 1);
@ -1527,9 +1527,9 @@ layers_dialog_map_callback (GtkWidget *w,
{ {
if (!layersD) if (!layersD)
return; return;
gtk_window_add_accelerator_table (GTK_WINDOW (lc_shell), gtk_window_add_accel_group (GTK_WINDOW (lc_shell),
layersD->accel_table); layersD->accel_group);
} }
static void static void
@ -1538,9 +1538,9 @@ layers_dialog_unmap_callback (GtkWidget *w,
{ {
if (!layersD) if (!layersD)
return; return;
gtk_window_remove_accelerator_table (GTK_WINDOW (lc_shell), gtk_window_remove_accel_group (GTK_WINDOW (lc_shell),
layersD->accel_table); layersD->accel_group);
} }
static void static void

View File

@ -32,324 +32,298 @@
#include "gdisplay.h" #include "gdisplay.h"
static void menus_init (void); static void menus_init (void);
static void menus_foreach (gpointer key,
gpointer value,
gpointer user_data);
static gint menus_install_accel (GtkWidget *widget,
gchar *signal_name,
gchar key,
gchar modifiers,
gchar *path);
static void menus_remove_accel (GtkWidget *widget,
gchar *signal_name,
gchar *path);
static GtkMenuEntry menu_items[] = static GtkItemFactoryEntry toolbox_entries[] =
{ {
{ "<Toolbox>/File/New", "<control>N", file_new_cmd_callback, NULL }, { "/File/New", "<control>N", file_new_cmd_callback, 0 },
{ "<Toolbox>/File/Open", "<control>O", file_open_cmd_callback, NULL }, { "/File/Open", "<control>O", file_open_cmd_callback, 0 },
{ "<Toolbox>/File/About...", NULL, about_dialog_cmd_callback, NULL }, { "/File/About...", NULL, about_dialog_cmd_callback, 0 },
{ "<Toolbox>/File/Preferences...", NULL, file_pref_cmd_callback, NULL }, { "/File/Preferences...", NULL, file_pref_cmd_callback, 0 },
{ "<Toolbox>/File/Tip of the day", NULL, tips_dialog_cmd_callback, NULL }, { "/File/Tip of the day", NULL, tips_dialog_cmd_callback, 0 },
{ "<Toolbox>/File/<separator>", NULL, NULL, NULL }, { "/File/---", NULL, NULL, 0, "<Separator>" },
{ "<Toolbox>/File/Dialogs/Brushes...", "<control><shift>B", dialogs_brushes_cmd_callback, NULL }, { "/File/Dialogs/Brushes...", "<control><shift>B", dialogs_brushes_cmd_callback, 0 },
{ "<Toolbox>/File/Dialogs/Patterns...", "<control><shift>P", dialogs_patterns_cmd_callback, NULL }, { "/File/Dialogs/Patterns...", "<control><shift>P", dialogs_patterns_cmd_callback, 0 },
{ "<Toolbox>/File/Dialogs/Palette...", "<control>P", dialogs_palette_cmd_callback, NULL }, { "/File/Dialogs/Palette...", "<control>P", dialogs_palette_cmd_callback, 0 },
{ "<Toolbox>/File/Dialogs/Gradient Editor...", "<control>G", dialogs_gradient_editor_cmd_callback, NULL }, { "/File/Dialogs/Gradient Editor...", "<control>G", dialogs_gradient_editor_cmd_callback, 0 },
{ "<Toolbox>/File/Dialogs/Tool Options...", "<control><shift>T", dialogs_tools_options_cmd_callback, NULL }, { "/File/Dialogs/Tool Options...", "<control><shift>T", dialogs_tools_options_cmd_callback, 0 },
{ "<Toolbox>/File/Dialogs/Input Devices...", NULL, dialogs_input_devices_cmd_callback, NULL }, { "/File/Dialogs/Input Devices...", NULL, dialogs_input_devices_cmd_callback, 0 },
{ "<Toolbox>/File/Dialogs/Device Status...", NULL, dialogs_device_status_cmd_callback, NULL }, { "/File/Dialogs/Device Status...", NULL, dialogs_device_status_cmd_callback, 0 },
{ "/File/---", NULL, NULL, 0, "<Separator>" },
{ "<Toolbox>/File/<separator>",NULL,NULL,NULL}, { "/File/Quit", "<control>Q", file_quit_cmd_callback, 0 },
{ "<Toolbox>/File/Quit", "<control>Q", file_quit_cmd_callback, NULL },
{ "<Image>/File/New", "<control>N", file_new_cmd_callback, (gpointer) 1 },
{ "<Image>/File/Open", "<control>O", file_open_cmd_callback, NULL },
{ "<Image>/File/Save", "<control>S", file_save_cmd_callback, NULL },
{ "<Image>/File/Save as", NULL, file_save_as_cmd_callback, NULL },
{ "<Image>/File/Preferences...", NULL, file_pref_cmd_callback, NULL },
{ "<Image>/File/<separator>", NULL, NULL, NULL },
{ "<Image>/File/Close", "<control>W", file_close_cmd_callback, NULL },
{ "<Image>/File/Quit", "<control>Q", file_quit_cmd_callback, NULL },
{ "<Image>/File/<separator>", NULL, NULL, NULL },
{ "<Image>/Edit/Cut", "<control>X", edit_cut_cmd_callback, NULL },
{ "<Image>/Edit/Copy", "<control>C", edit_copy_cmd_callback, NULL },
{ "<Image>/Edit/Paste", "<control>V", edit_paste_cmd_callback, NULL },
{ "<Image>/Edit/Paste Into", NULL, edit_paste_into_cmd_callback, NULL },
{ "<Image>/Edit/Clear", "<control>K", edit_clear_cmd_callback, NULL },
{ "<Image>/Edit/Fill", "<control>.", edit_fill_cmd_callback, NULL },
{ "<Image>/Edit/Stroke", NULL, edit_stroke_cmd_callback, NULL },
{ "<Image>/Edit/Undo", "<control>Z", edit_undo_cmd_callback, NULL },
{ "<Image>/Edit/Redo", "<control>R", edit_redo_cmd_callback, NULL },
{ "<Image>/Edit/<separator>", NULL, NULL, NULL },
{ "<Image>/Edit/Cut Named", "<control><shift>X", edit_named_cut_cmd_callback, NULL },
{ "<Image>/Edit/Copy Named", "<control><shift>C", edit_named_copy_cmd_callback, NULL },
{ "<Image>/Edit/Paste Named", "<control><shift>V", edit_named_paste_cmd_callback, NULL },
{ "<Image>/Edit/<separator>", NULL, NULL, NULL },
{ "<Image>/Select/Toggle", "<control>T", select_toggle_cmd_callback, NULL },
{ "<Image>/Select/Invert", "<control>I", select_invert_cmd_callback, NULL },
{ "<Image>/Select/All", "<control>A", select_all_cmd_callback, NULL },
{ "<Image>/Select/None", "<control><shift>A", select_none_cmd_callback, NULL },
{ "<Image>/Select/Float", "<control><shift>L", select_float_cmd_callback, NULL },
{ "<Image>/Select/Sharpen", "<control><shift>H", select_sharpen_cmd_callback, NULL },
{ "<Image>/Select/Border", "<control><shift>B", select_border_cmd_callback, NULL },
{ "<Image>/Select/Feather", "<control><shift>F", select_feather_cmd_callback, NULL },
{ "<Image>/Select/Grow", NULL, select_grow_cmd_callback, NULL },
{ "<Image>/Select/Shrink", NULL, select_shrink_cmd_callback, NULL },
{ "<Image>/Select/Save To Channel", NULL, select_save_cmd_callback, NULL },
{ "<Image>/Select/By Color...", NULL, select_by_color_cmd_callback, NULL },
{ "<Image>/View/Zoom In", "=", view_zoomin_cmd_callback, NULL },
{ "<Image>/View/Zoom Out", "-", view_zoomout_cmd_callback, NULL },
{ "<Image>/View/Zoom/16:1", NULL, view_zoom_16_1_callback, NULL },
{ "<Image>/View/Zoom/8:1", NULL, view_zoom_8_1_callback, NULL },
{ "<Image>/View/Zoom/4:1", NULL, view_zoom_4_1_callback, NULL },
{ "<Image>/View/Zoom/2:1", NULL, view_zoom_2_1_callback, NULL },
{ "<Image>/View/Zoom/1:1", "1", view_zoom_1_1_callback, NULL },
{ "<Image>/View/Zoom/1:2", NULL, view_zoom_1_2_callback, NULL },
{ "<Image>/View/Zoom/1:4", NULL, view_zoom_1_4_callback, NULL },
{ "<Image>/View/Zoom/1:8", NULL, view_zoom_1_8_callback, NULL },
{ "<Image>/View/Zoom/1:16", NULL, view_zoom_1_16_callback, NULL },
{ "<Image>/View/Window Info...", "<control><shift>I", view_window_info_cmd_callback, NULL },
{ "<Image>/View/<check>Toggle Rulers", "<control><shift>R", view_toggle_rulers_cmd_callback, NULL },
{ "<Image>/View/<check>Toggle Guides", "<control><shift>T", view_toggle_guides_cmd_callback, NULL },
{ "<Image>/View/<check>Snap To Guides", NULL, view_snap_to_guides_cmd_callback, NULL },
{ "<Image>/View/<separator>", NULL, NULL, NULL },
{ "<Image>/View/New View", NULL, view_new_view_cmd_callback, NULL },
{ "<Image>/View/Shrink Wrap", "<control>E", view_shrink_wrap_cmd_callback, NULL },
{ "<Image>/Image/Colors/Equalize", NULL, image_equalize_cmd_callback, NULL },
{ "<Image>/Image/Colors/Invert", NULL, image_invert_cmd_callback, NULL },
{ "<Image>/Image/Colors/Posterize", NULL, image_posterize_cmd_callback, NULL },
{ "<Image>/Image/Colors/Threshold", NULL, image_threshold_cmd_callback, NULL },
{ "<Image>/Image/Colors/<separator>", NULL, NULL, NULL },
{ "<Image>/Image/Colors/Color Balance", NULL, image_color_balance_cmd_callback, NULL },
{ "<Image>/Image/Colors/Brightness-Contrast", NULL, image_brightness_contrast_cmd_callback, NULL },
{ "<Image>/Image/Colors/Hue-Saturation", NULL, image_hue_saturation_cmd_callback, NULL },
{ "<Image>/Image/Colors/Curves", NULL, image_curves_cmd_callback, NULL },
{ "<Image>/Image/Colors/Levels", NULL, image_levels_cmd_callback, NULL },
{ "<Image>/Image/Colors/<separator>", NULL, NULL, NULL },
{ "<Image>/Image/Colors/Desaturate", NULL, image_desaturate_cmd_callback, NULL },
{ "<Image>/Image/Channel Ops/Duplicate", "<control>D", channel_ops_duplicate_cmd_callback, NULL },
{ "<Image>/Image/Channel Ops/Offset", "<control><shift>O", channel_ops_offset_cmd_callback, NULL },
{ "<Image>/Image/Alpha/Add Alpha Channel", NULL, layers_add_alpha_channel_cmd_callback, NULL },
{ "<Image>/Image/<separator>", NULL, NULL, NULL },
{ "<Image>/Image/RGB", NULL, image_convert_rgb_cmd_callback, NULL },
{ "<Image>/Image/Grayscale", NULL, image_convert_grayscale_cmd_callback, NULL },
{ "<Image>/Image/Indexed", NULL, image_convert_indexed_cmd_callback, NULL },
{ "<Image>/Image/<separator>", NULL, NULL, NULL },
{ "<Image>/Image/Resize", NULL, image_resize_cmd_callback, NULL },
{ "<Image>/Image/Scale", NULL, image_scale_cmd_callback, NULL },
{ "<Image>/Image/<separator>", NULL, NULL, NULL },
{ "<Image>/Image/Histogram", NULL, image_histogram_cmd_callback, NULL },
{ "<Image>/Image/<separator>", NULL, NULL, NULL },
{ "<Image>/Layers/Layers & Channels...", "<control>L", dialogs_lc_cmd_callback, NULL },
{ "<Image>/Layers/Raise Layer", "<control>F", layers_raise_cmd_callback, NULL },
{ "<Image>/Layers/Lower Layer", "<control>B", layers_lower_cmd_callback, NULL },
{ "<Image>/Layers/Anchor Layer", "<control>H", layers_anchor_cmd_callback, NULL },
{ "<Image>/Layers/Merge Visible Layers", "<control>M", layers_merge_cmd_callback, NULL },
{ "<Image>/Layers/Flatten Image", NULL, layers_flatten_cmd_callback, NULL },
{ "<Image>/Layers/Alpha To Selection", NULL, layers_alpha_select_cmd_callback, NULL },
{ "<Image>/Layers/Mask To Selection", NULL, layers_mask_select_cmd_callback, NULL },
{ "<Image>/Layers/Add Alpha Channel", NULL, layers_add_alpha_channel_cmd_callback, NULL },
{ "<Image>/Tools/Rect Select", "R", tools_select_cmd_callback, (gpointer) RECT_SELECT },
{ "<Image>/Tools/Ellipse Select", "E", tools_select_cmd_callback, (gpointer) ELLIPSE_SELECT },
{ "<Image>/Tools/Free Select", "F", tools_select_cmd_callback, (gpointer) FREE_SELECT },
{ "<Image>/Tools/Fuzzy Select", "Z", tools_select_cmd_callback, (gpointer) FUZZY_SELECT },
{ "<Image>/Tools/Bezier Select", "B", tools_select_cmd_callback, (gpointer) BEZIER_SELECT },
{ "<Image>/Tools/Intelligent Scissors", "I", tools_select_cmd_callback, (gpointer) ISCISSORS },
{ "<Image>/Tools/Move", "M", tools_select_cmd_callback, (gpointer) MOVE },
{ "<Image>/Tools/Magnify", "<shift>M", tools_select_cmd_callback, (gpointer) MAGNIFY },
{ "<Image>/Tools/Crop", "<shift>C", tools_select_cmd_callback, (gpointer) CROP },
{ "<Image>/Tools/Transform", "<shift>T", tools_select_cmd_callback, (gpointer) ROTATE },
{ "<Image>/Tools/Flip", "<shift>F", tools_select_cmd_callback, (gpointer) FLIP_HORZ },
{ "<Image>/Tools/Text", "T", tools_select_cmd_callback, (gpointer) TEXT },
{ "<Image>/Tools/Color Picker", "O", tools_select_cmd_callback, (gpointer) COLOR_PICKER },
{ "<Image>/Tools/Bucket Fill", "<shift>B", tools_select_cmd_callback, (gpointer) BUCKET_FILL },
{ "<Image>/Tools/Blend", "L", tools_select_cmd_callback, (gpointer) BLEND },
{ "<Image>/Tools/Paintbrush", "P", tools_select_cmd_callback, (gpointer) PAINTBRUSH },
{ "<Image>/Tools/Pencil", "<shift>P", tools_select_cmd_callback, (gpointer) PENCIL },
{ "<Image>/Tools/Eraser", "<shift>E", tools_select_cmd_callback, (gpointer) ERASER },
{ "<Image>/Tools/Airbrush", "A", tools_select_cmd_callback, (gpointer) AIRBRUSH },
{ "<Image>/Tools/Clone", "C", tools_select_cmd_callback, (gpointer) CLONE },
{ "<Image>/Tools/Convolve", "V", tools_select_cmd_callback, (gpointer) CONVOLVE },
{ "<Image>/Tools/Default Colors", "D", tools_default_colors_cmd_callback, NULL},
{ "<Image>/Tools/Swap Colors", "X", tools_swap_colors_cmd_callback, NULL},
{ "<Image>/Tools/<separator>", NULL, NULL, NULL },
{ "<Image>/Tools/Toolbox", NULL, toolbox_raise_callback, NULL },
{ "<Image>/Filters/", NULL, NULL, NULL },
{ "<Image>/Filters/Repeat last", "<alt>F", filters_repeat_cmd_callback, (gpointer) 0x0 },
{ "<Image>/Filters/Re-show last", "<alt><shift>F", filters_repeat_cmd_callback, (gpointer)
0x1 },
{ "<Image>/Filters/<separator>", NULL, NULL, NULL },
{ "<Image>/Script-Fu/", NULL, NULL, NULL },
{ "<Image>/Dialogs/Brushes...", "<control><shift>B", dialogs_brushes_cmd_callback, NULL },
{ "<Image>/Dialogs/Patterns...", "<control><shift>P", dialogs_patterns_cmd_callback, NULL },
{ "<Image>/Dialogs/Palette...", "<control>P", dialogs_palette_cmd_callback, NULL },
{ "<Image>/Dialogs/Gradient Editor...", "<control>G", dialogs_gradient_editor_cmd_callback, NULL },
{ "<Image>/Dialogs/Layers & Channels...", "<control>L", dialogs_lc_cmd_callback, NULL },
{ "<Image>/Dialogs/Indexed Palette...", NULL, dialogs_indexed_palette_cmd_callback, NULL },
{ "<Image>/Dialogs/Tool Options...", NULL, dialogs_tools_options_cmd_callback, NULL },
{ "<Image>/Dialogs/Input Devices...", NULL, dialogs_input_devices_cmd_callback, NULL },
{ "<Image>/Dialogs/Device Status...", NULL, dialogs_device_status_cmd_callback, NULL },
{ "<Load>/Automatic", NULL, file_load_by_extension_callback, NULL },
{ "<Load>/<separator>", NULL, NULL, NULL },
{ "<Save>/By extension", NULL, file_save_by_extension_callback, NULL },
{ "<Save>/<separator>", NULL, NULL, NULL },
}; };
static int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); static guint n_toolbox_entries = sizeof (toolbox_entries) / sizeof (toolbox_entries[0]);
static GtkItemFactory *toolbox_factory = NULL;
static GtkItemFactoryEntry image_entries[] =
{
{ "/File/New", "<control>N", file_new_cmd_callback, 1 },
{ "/File/Open", "<control>O", file_open_cmd_callback, 0 },
{ "/File/Save", "<control>S", file_save_cmd_callback, 0 },
{ "/File/Save as", NULL, file_save_as_cmd_callback, 0 },
{ "/File/Preferences...", NULL, file_pref_cmd_callback, 0 },
{ "/File/---", NULL, NULL, 0, "<Separator>" },
{ "/File/Close", "<control>W", file_close_cmd_callback, 0 },
{ "/File/Quit", "<control>Q", file_quit_cmd_callback, 0 },
{ "/File/---", NULL, NULL, 0, "<Separator>" },
{ "/Edit/Cut", "<control>X", edit_cut_cmd_callback, 0 },
{ "/Edit/Copy", "<control>C", edit_copy_cmd_callback, 0 },
{ "/Edit/Paste", "<control>V", edit_paste_cmd_callback, 0 },
{ "/Edit/Paste Into", NULL, edit_paste_into_cmd_callback, 0 },
{ "/Edit/Clear", "<control>K", edit_clear_cmd_callback, 0 },
{ "/Edit/Fill", "<control>.", edit_fill_cmd_callback, 0 },
{ "/Edit/Stroke", NULL, edit_stroke_cmd_callback, 0 },
{ "/Edit/Undo", "<control>Z", edit_undo_cmd_callback, 0 },
{ "/Edit/Redo", "<control>R", edit_redo_cmd_callback, 0 },
{ "/Edit/<Separator>", NULL, NULL, 0 },
{ "/Edit/Cut Named", "<control><shift>X", edit_named_cut_cmd_callback, 0 },
{ "/Edit/Copy Named", "<control><shift>C", edit_named_copy_cmd_callback, 0 },
{ "/Edit/Paste Named", "<control><shift>V", edit_named_paste_cmd_callback, 0 },
{ "/Edit/---", NULL, NULL, 0, "<Separator>" },
{ "/Select/Toggle", "<control>T", select_toggle_cmd_callback, 0 },
{ "/Select/Invert", "<control>I", select_invert_cmd_callback, 0 },
{ "/Select/All", "<control>A", select_all_cmd_callback, 0 },
{ "/Select/None", "<control><shift>A", select_none_cmd_callback, 0 },
{ "/Select/Float", "<control><shift>L", select_float_cmd_callback, 0 },
{ "/Select/Sharpen", "<control><shift>H", select_sharpen_cmd_callback, 0 },
{ "/Select/Border", "<control><shift>B", select_border_cmd_callback, 0 },
{ "/Select/Feather", "<control><shift>F", select_feather_cmd_callback, 0 },
{ "/Select/Grow", NULL, select_grow_cmd_callback, 0 },
{ "/Select/Shrink", NULL, select_shrink_cmd_callback, 0 },
{ "/Select/Save To Channel", NULL, select_save_cmd_callback, 0 },
{ "/Select/By Color...", NULL, select_by_color_cmd_callback, 0 },
{ "/View/Zoom In", "=", view_zoomin_cmd_callback, 0 },
{ "/View/Zoom Out", "-", view_zoomout_cmd_callback, 0 },
{ "/View/Zoom/16:1", NULL, view_zoom_16_1_callback, 0 },
{ "/View/Zoom/8:1", NULL, view_zoom_8_1_callback, 0 },
{ "/View/Zoom/4:1", NULL, view_zoom_4_1_callback, 0 },
{ "/View/Zoom/2:1", NULL, view_zoom_2_1_callback, 0 },
{ "/View/Zoom/1:1", "1", view_zoom_1_1_callback, 0 },
{ "/View/Zoom/1:2", NULL, view_zoom_1_2_callback, 0 },
{ "/View/Zoom/1:4", NULL, view_zoom_1_4_callback, 0 },
{ "/View/Zoom/1:8", NULL, view_zoom_1_8_callback, 0 },
{ "/View/Zoom/1:16", NULL, view_zoom_1_16_callback, 0 },
{ "/View/Window Info...", "<control><shift>I", view_window_info_cmd_callback, 0 },
{ "/View/Toggle Rulers", "<control><shift>R", view_toggle_rulers_cmd_callback, 0, "<ToggleItem>" },
{ "/View/Toggle Guides", "<control><shift>T", view_toggle_guides_cmd_callback, 0, "<ToggleItem>" },
{ "/View/Snap To Guides", NULL, view_snap_to_guides_cmd_callback, 0, "<ToggleItem>" },
{ "/View/---", NULL, NULL, 0, "<Separator>" },
{ "/View/New View", NULL, view_new_view_cmd_callback, 0 },
{ "/View/Shrink Wrap", "<control>E", view_shrink_wrap_cmd_callback, 0 },
{ "/Image/Colors/Equalize", NULL, image_equalize_cmd_callback, 0 },
{ "/Image/Colors/Invert", NULL, image_invert_cmd_callback, 0 },
{ "/Image/Colors/Posterize", NULL, image_posterize_cmd_callback, 0 },
{ "/Image/Colors/Threshold", NULL, image_threshold_cmd_callback, 0 },
{ "/Image/Colors/---", NULL, NULL, 0, "<Separator>" },
{ "/Image/Colors/Color Balance", NULL, image_color_balance_cmd_callback, 0 },
{ "/Image/Colors/Brightness-Contrast", NULL, image_brightness_contrast_cmd_callback, 0 },
{ "/Image/Colors/Hue-Saturation", NULL, image_hue_saturation_cmd_callback, 0 },
{ "/Image/Colors/Curves", NULL, image_curves_cmd_callback, 0 },
{ "/Image/Colors/Levels", NULL, image_levels_cmd_callback, 0 },
{ "/Image/Colors/---", NULL, NULL, 0, "<Separator>" },
{ "/Image/Colors/Desaturate", NULL, image_desaturate_cmd_callback, 0 },
{ "/Image/Channel Ops/Duplicate", "<control>D", channel_ops_duplicate_cmd_callback, 0 },
{ "/Image/Channel Ops/Offset", "<control><shift>O", channel_ops_offset_cmd_callback, 0 },
{ "/Image/Alpha/Add Alpha Channel", NULL, layers_add_alpha_channel_cmd_callback, 0 },
{ "/Image/---", NULL, NULL, 0, "<Separator>" },
{ "/Image/RGB", NULL, image_convert_rgb_cmd_callback, 0 },
{ "/Image/Grayscale", NULL, image_convert_grayscale_cmd_callback, 0 },
{ "/Image/Indexed", NULL, image_convert_indexed_cmd_callback, 0 },
{ "/Image/---", NULL, NULL, 0, "<Separator>" },
{ "/Image/Resize", NULL, image_resize_cmd_callback, 0 },
{ "/Image/Scale", NULL, image_scale_cmd_callback, 0 },
{ "/Image/---", NULL, NULL, 0, "<Separator>" },
{ "/Image/Histogram", NULL, image_histogram_cmd_callback, 0 },
{ "/Image/---", NULL, NULL, 0, "<Separator>" },
{ "/Layers/Layers & Channels...", "<control>L", dialogs_lc_cmd_callback, 0 },
{ "/Layers/Raise Layer", "<control>F", layers_raise_cmd_callback, 0 },
{ "/Layers/Lower Layer", "<control>B", layers_lower_cmd_callback, 0 },
{ "/Layers/Anchor Layer", "<control>H", layers_anchor_cmd_callback, 0 },
{ "/Layers/Merge Visible Layers", "<control>M", layers_merge_cmd_callback, 0 },
{ "/Layers/Flatten Image", NULL, layers_flatten_cmd_callback, 0 },
{ "/Layers/Alpha To Selection", NULL, layers_alpha_select_cmd_callback, 0 },
{ "/Layers/Mask To Selection", NULL, layers_mask_select_cmd_callback, 0 },
{ "/Layers/Add Alpha Channel", NULL, layers_add_alpha_channel_cmd_callback, 0 },
{ "/Tools/Rect Select", "R", tools_select_cmd_callback, RECT_SELECT },
{ "/Tools/Ellipse Select", "E", tools_select_cmd_callback, ELLIPSE_SELECT },
{ "/Tools/Free Select", "F", tools_select_cmd_callback, FREE_SELECT },
{ "/Tools/Fuzzy Select", "Z", tools_select_cmd_callback, FUZZY_SELECT },
{ "/Tools/Bezier Select", "B", tools_select_cmd_callback, BEZIER_SELECT },
{ "/Tools/Intelligent Scissors", "I", tools_select_cmd_callback, ISCISSORS },
{ "/Tools/Move", "M", tools_select_cmd_callback, MOVE },
{ "/Tools/Magnify", "<shift>M", tools_select_cmd_callback, MAGNIFY },
{ "/Tools/Crop", "<shift>C", tools_select_cmd_callback, CROP },
{ "/Tools/Transform", "<shift>T", tools_select_cmd_callback, ROTATE },
{ "/Tools/Flip", "<shift>F", tools_select_cmd_callback, FLIP_HORZ },
{ "/Tools/Text", "T", tools_select_cmd_callback, TEXT },
{ "/Tools/Color Picker", "O", tools_select_cmd_callback, COLOR_PICKER },
{ "/Tools/Bucket Fill", "<shift>B", tools_select_cmd_callback, BUCKET_FILL },
{ "/Tools/Blend", "L", tools_select_cmd_callback, BLEND },
{ "/Tools/Paintbrush", "P", tools_select_cmd_callback, PAINTBRUSH },
{ "/Tools/Pencil", "<shift>P", tools_select_cmd_callback, PENCIL },
{ "/Tools/Eraser", "<shift>E", tools_select_cmd_callback, ERASER },
{ "/Tools/Airbrush", "A", tools_select_cmd_callback, AIRBRUSH },
{ "/Tools/Clone", "C", tools_select_cmd_callback, CLONE },
{ "/Tools/Convolve", "V", tools_select_cmd_callback, CONVOLVE },
{ "/Tools/Default Colors", "D", tools_default_colors_cmd_callback, 0 },
{ "/Tools/Swap Colors", "X", tools_swap_colors_cmd_callback, 0 },
{ "/Tools/---", NULL, NULL, 0, "<Separator>" },
{ "/Tools/Toolbox", NULL, toolbox_raise_callback, 0 },
{ "/Filters/", NULL, NULL, 0 },
{ "/Filters/Repeat last", "<alt>F", filters_repeat_cmd_callback, 0x0 },
{ "/Filters/Re-show last", "<alt><shift>F", filters_repeat_cmd_callback, 0x1 },
{ "/Filters/---", NULL, NULL, 0, "<Separator>" },
{ "/Script-Fu/", NULL, NULL, 0 },
{ "/Dialogs/Brushes...", "<control><shift>B", dialogs_brushes_cmd_callback, 0 },
{ "/Dialogs/Patterns...", "<control><shift>P", dialogs_patterns_cmd_callback, 0 },
{ "/Dialogs/Palette...", "<control>P", dialogs_palette_cmd_callback, 0 },
{ "/Dialogs/Gradient Editor...", "<control>G", dialogs_gradient_editor_cmd_callback, 0 },
{ "/Dialogs/Layers & Channels...", "<control>L", dialogs_lc_cmd_callback, 0 },
{ "/Dialogs/Indexed Palette...", NULL, dialogs_indexed_palette_cmd_callback, 0 },
{ "/Dialogs/Tool Options...", NULL, dialogs_tools_options_cmd_callback, 0 },
{ "/Dialogs/Input Devices...", NULL, dialogs_input_devices_cmd_callback, 0 },
{ "/Dialogs/Device Status...", NULL, dialogs_device_status_cmd_callback, 0 },
};
static guint n_image_entries = sizeof (image_entries) / sizeof (image_entries[0]);
static GtkItemFactory *image_factory = NULL;
static GtkItemFactoryEntry load_entries[] =
{
{ "/Automatic", NULL, file_load_by_extension_callback, 0 },
{ "/---", NULL, NULL, 0, "<Separator>" },
};
static guint n_load_entries = sizeof (load_entries) / sizeof (load_entries[0]);
static GtkItemFactory *load_factory = NULL;
static GtkItemFactoryEntry save_entries[] =
{
{ "/By extension", NULL, file_save_by_extension_callback, 0 },
{ "/---", NULL, NULL, 0, "<Separator>" },
};
static guint n_save_entries = sizeof (save_entries) / sizeof (save_entries[0]);
static GtkItemFactory *save_factory = NULL;
static int initialize = TRUE; static int initialize = TRUE;
static GtkMenuFactory *factory = NULL;
static GtkMenuFactory *subfactories[4];
static GHashTable *entry_ht = NULL;
void void
menus_get_toolbox_menubar (GtkWidget **menubar, menus_get_toolbox_menubar (GtkWidget **menubar,
GtkAcceleratorTable **table) GtkAccelGroup **accel_group)
{ {
if (initialize) if (initialize)
menus_init (); menus_init ();
if (menubar) if (menubar)
*menubar = subfactories[0]->widget; *menubar = toolbox_factory->widget;
if (table) if (accel_group)
*table = subfactories[0]->table; *accel_group = toolbox_factory->accel_group;
} }
void void
menus_get_image_menu (GtkWidget **menu, menus_get_image_menu (GtkWidget **menu,
GtkAcceleratorTable **table) GtkAccelGroup **accel_group)
{ {
if (initialize) if (initialize)
menus_init (); menus_init ();
if (menu) if (menu)
*menu = subfactories[1]->widget; *menu = image_factory->widget;
if (table) if (accel_group)
*table = subfactories[1]->table; *accel_group = image_factory->accel_group;
} }
void void
menus_get_load_menu (GtkWidget **menu, menus_get_load_menu (GtkWidget **menu,
GtkAcceleratorTable **table) GtkAccelGroup **accel_group)
{ {
if (initialize) if (initialize)
menus_init (); menus_init ();
if (menu) if (menu)
*menu = subfactories[2]->widget; *menu = load_factory->widget;
if (table) if (accel_group)
*table = subfactories[2]->table; *accel_group = load_factory->accel_group;
} }
void void
menus_get_save_menu (GtkWidget **menu, menus_get_save_menu (GtkWidget **menu,
GtkAcceleratorTable **table) GtkAccelGroup **accel_group)
{ {
if (initialize) if (initialize)
menus_init (); menus_init ();
if (menu) if (menu)
*menu = subfactories[3]->widget; *menu = save_factory->widget;
if (table) if (accel_group)
*table = subfactories[3]->table; *accel_group = save_factory->accel_group;
} }
void void
menus_create (GtkMenuEntry *entries, menus_create (GtkMenuEntry *entries,
int nmenu_entries) int nmenu_entries)
{ {
char *accelerator;
int i;
if (initialize) if (initialize)
menus_init (); menus_init ();
if (entry_ht) gtk_item_factory_create_menu_entries (nmenu_entries, entries);
for (i = 0; i < nmenu_entries; i++)
{
accelerator = g_hash_table_lookup (entry_ht, entries[i].path);
if (accelerator)
{
if (accelerator[0] == '\0')
entries[i].accelerator = NULL;
else
entries[i].accelerator = accelerator;
}
}
gtk_menu_factory_add_entries (factory, entries, nmenu_entries);
for (i = 0; i < nmenu_entries; i++)
if (entries[i].widget && GTK_BIN (entries[i].widget)->child)
{
gtk_signal_connect (GTK_OBJECT (entries[i].widget), "install_accelerator",
(GtkSignalFunc) menus_install_accel,
entries[i].path);
gtk_signal_connect (GTK_OBJECT (entries[i].widget), "remove_accelerator",
(GtkSignalFunc) menus_remove_accel,
entries[i].path);
}
} }
void void
menus_set_sensitive (char *path, menus_set_sensitive (char *path,
int sensitive) int sensitive)
{ {
GtkMenuPath *menu_path; GtkItemFactory *ifactory;
GtkWidget *widget = NULL;
if (initialize) if (initialize)
menus_init (); menus_init ();
menu_path = gtk_menu_factory_find (factory, path); ifactory = gtk_item_factory_from_path (path);
if (menu_path)
gtk_widget_set_sensitive (menu_path->widget, sensitive); if (ifactory)
else {
g_message ("Unable to set sensitivity for menu which doesn't exist: %s", path); widget = gtk_item_factory_get_widget (ifactory, path);
gtk_widget_set_sensitive (widget, sensitive);
}
if (!ifactory || !widget)
printf ("Unable to set sensitivity for menu which doesn't exist:\n%s", path);
} }
void void
menus_set_state (char *path, menus_set_state (char *path,
int state) int state)
{ {
GtkMenuPath *menu_path; GtkItemFactory *ifactory;
GtkWidget *widget = NULL;
if (initialize) if (initialize)
menus_init (); menus_init ();
menu_path = gtk_menu_factory_find (factory, path); ifactory = gtk_item_factory_from_path (path);
if (menu_path)
if (ifactory)
{ {
if (GTK_IS_CHECK_MENU_ITEM (menu_path->widget)) widget = gtk_item_factory_get_widget (ifactory, path);
gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (menu_path->widget), state);
if (widget && GTK_IS_CHECK_MENU_ITEM (widget))
gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (widget), state);
else
widget = NULL;
} }
else if (!ifactory || !widget)
g_message ("Unable to set state for menu which doesn't exist: %s", path); printf ("Unable to set state for menu which doesn't exist:\n%s", path);
}
void
menus_add_path (char *path,
char *accelerator)
{
if (!entry_ht)
entry_ht = g_hash_table_new (g_str_hash, g_str_equal);
g_hash_table_insert (entry_ht, path, accelerator);
} }
void void
@ -358,35 +332,24 @@ menus_destroy (char *path)
if (initialize) if (initialize)
menus_init (); menus_init ();
gtk_menu_factory_remove_paths (factory, &path, 1); gtk_item_factories_path_delete (NULL, path);
} }
void void
menus_quit () menus_quit ()
{ {
FILE *fp; gchar *filename;
char filename[512];
char *gimp_dir; filename = g_strconcat (gimp_directory (), "/menurc", NULL);
gtk_item_factory_dump_rc (filename, NULL, TRUE);
g_free (filename);
if (entry_ht)
{
gimp_dir = gimp_directory ();
if ('\000' != gimp_dir[0])
{
sprintf (filename, "%s/menurc", gimp_dir);
fp = fopen (filename, "w");
if (fp)
{
g_hash_table_foreach (entry_ht, menus_foreach, fp);
fclose (fp);
}
}
}
if (!initialize) if (!initialize)
{ {
gtk_menu_factory_destroy (factory); gtk_object_destroy (GTK_OBJECT (toolbox_factory));
gtk_object_destroy (GTK_OBJECT (image_factory));
gtk_object_destroy (GTK_OBJECT (load_factory));
gtk_object_destroy (GTK_OBJECT (save_factory));
} }
} }
@ -395,101 +358,35 @@ menus_quit ()
static void static void
menus_init () menus_init ()
{ {
char filename[512];
if (initialize) if (initialize)
{ {
gchar *filename;
initialize = FALSE; initialize = FALSE;
factory = gtk_menu_factory_new (GTK_MENU_FACTORY_MENU_BAR); toolbox_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<Toolbox>", NULL);
gtk_item_factory_create_items_ac (toolbox_factory,
n_toolbox_entries,
toolbox_entries,
NULL, 2);
image_factory = gtk_item_factory_new (GTK_TYPE_MENU, "<Image>", NULL);
gtk_item_factory_create_items_ac (image_factory,
n_image_entries,
image_entries,
NULL, 2);
load_factory = gtk_item_factory_new (GTK_TYPE_MENU, "<Load>", NULL);
gtk_item_factory_create_items_ac (load_factory,
n_load_entries,
load_entries,
NULL, 2);
save_factory = gtk_item_factory_new (GTK_TYPE_MENU, "<Save>", NULL);
gtk_item_factory_create_items_ac (save_factory,
n_save_entries,
save_entries,
NULL, 2);
subfactories[0] = gtk_menu_factory_new (GTK_MENU_FACTORY_MENU_BAR); filename = g_strconcat (gimp_directory (), "/menurc", NULL);
gtk_menu_factory_add_subfactory (factory, subfactories[0], "<Toolbox>"); gtk_item_factory_parse_rc (filename);
g_free (filename);
subfactories[1] = gtk_menu_factory_new (GTK_MENU_FACTORY_MENU);
gtk_menu_factory_add_subfactory (factory, subfactories[1], "<Image>");
subfactories[2] = gtk_menu_factory_new (GTK_MENU_FACTORY_MENU);
gtk_menu_factory_add_subfactory (factory, subfactories[2], "<Load>");
subfactories[3] = gtk_menu_factory_new (GTK_MENU_FACTORY_MENU);
gtk_menu_factory_add_subfactory (factory, subfactories[3], "<Save>");
sprintf (filename, "%s/menurc", gimp_directory ());
parse_gimprc_file (filename);
menus_create (menu_items, nmenu_items);
} }
} }
static void
menus_foreach (gpointer key,
gpointer value,
gpointer user_data)
{
char accel[64];
int i, j;
for (i = j = 0; ((char*) value)[i] != '\0'; i++, j++)
{
if (((char *) value)[i] == '"' || ((char *) value)[i] == '\\')
accel[j++] = '\\';
accel[j] = ((char *) value)[i];
}
accel[j] = '\0';
fprintf ((FILE*) user_data, "(menu-path \"%s\" \"%s\")\n", (char*) key, accel);
}
static gint
menus_install_accel (GtkWidget *widget,
gchar *signal_name,
gchar key,
gchar modifiers,
gchar *path)
{
char accel[64];
char *t1, t2[2];
accel[0] = '\0';
if (modifiers & GDK_CONTROL_MASK)
strcat (accel, "<control>");
if (modifiers & GDK_SHIFT_MASK)
strcat (accel, "<shift>");
if (modifiers & GDK_MOD1_MASK)
strcat (accel, "<alt>");
t2[0] = key;
t2[1] = '\0';
strcat (accel, t2);
if (entry_ht)
{
t1 = g_hash_table_lookup (entry_ht, path);
g_free (t1);
}
else
entry_ht = g_hash_table_new (g_str_hash, g_str_equal);
g_hash_table_insert (entry_ht, path, g_strdup (accel));
return TRUE;
}
static void
menus_remove_accel (GtkWidget *widget,
gchar *signal_name,
gchar *path)
{
char *t;
if (entry_ht)
{
t = g_hash_table_lookup (entry_ht, path);
g_free (t);
g_hash_table_insert (entry_ht, path, g_strdup (""));
}
}

View File

@ -23,21 +23,19 @@
void menus_get_toolbox_menubar (GtkWidget **menubar, void menus_get_toolbox_menubar (GtkWidget **menubar,
GtkAcceleratorTable **table); GtkAccelGroup **accel_group);
void menus_get_image_menu (GtkWidget **menu, void menus_get_image_menu (GtkWidget **menu,
GtkAcceleratorTable **table); GtkAccelGroup **accel_group);
void menus_get_load_menu (GtkWidget **menu, void menus_get_load_menu (GtkWidget **menu,
GtkAcceleratorTable **table); GtkAccelGroup **accel_group);
void menus_get_save_menu (GtkWidget **menu, void menus_get_save_menu (GtkWidget **menu,
GtkAcceleratorTable **table); GtkAccelGroup **accel_group);
void menus_create (GtkMenuEntry *entries, void menus_create (GtkMenuEntry *entries,
int nmenu_entries); int nmenu_entries);
void menus_set_sensitive (char *path, void menus_set_sensitive (char *path,
int sensitive); int sensitive);
void menus_set_state (char *path, void menus_set_state (char *path,
int state); int state);
void menus_add_path (char *path,
char *accelerator);
void menus_destroy (char *path); void menus_destroy (char *path);
void menus_quit (void); void menus_quit (void);

View File

@ -119,7 +119,7 @@ indexed_palette_create (int gimage_id)
GtkWidget *menu_bar; GtkWidget *menu_bar;
GtkWidget *menu_bar_item; GtkWidget *menu_bar_item;
GtkWidget *hbox; GtkWidget *hbox;
GtkAcceleratorTable *table; GtkAccelGroup *accel_group;
int default_index; int default_index;
if (!indexedP) if (!indexedP)
@ -127,14 +127,14 @@ indexed_palette_create (int gimage_id)
indexedP = g_malloc (sizeof (IndexedPalette)); indexedP = g_malloc (sizeof (IndexedPalette));
indexedP->gimage_id = -1; indexedP->gimage_id = -1;
table = gtk_accelerator_table_new (); accel_group = gtk_accel_group_new ();
/* The shell and main vbox */ /* The shell and main vbox */
indexedP->shell = gtk_dialog_new (); indexedP->shell = gtk_dialog_new ();
gtk_window_set_wmclass (GTK_WINDOW (indexedP->shell), "indexed_color_palette", "Gimp"); gtk_window_set_wmclass (GTK_WINDOW (indexedP->shell), "indexed_color_palette", "Gimp");
gtk_window_set_policy (GTK_WINDOW (indexedP->shell), FALSE, FALSE, FALSE); gtk_window_set_policy (GTK_WINDOW (indexedP->shell), FALSE, FALSE, FALSE);
gtk_window_set_title (GTK_WINDOW (indexedP->shell), "Indexed Color Palette"); gtk_window_set_title (GTK_WINDOW (indexedP->shell), "Indexed Color Palette");
gtk_window_add_accelerator_table (GTK_WINDOW (indexedP->shell), table); gtk_window_add_accel_group (GTK_WINDOW (indexedP->shell), accel_group);
gtk_signal_connect (GTK_OBJECT (indexedP->shell), "delete_event", gtk_signal_connect (GTK_OBJECT (indexedP->shell), "delete_event",
GTK_SIGNAL_FUNC (gtk_widget_hide_on_delete), GTK_SIGNAL_FUNC (gtk_widget_hide_on_delete),
NULL); NULL);
@ -161,7 +161,7 @@ indexed_palette_create (int gimage_id)
gtk_widget_show (label); gtk_widget_show (label);
/* The indexed palette commands pulldown menu */ /* The indexed palette commands pulldown menu */
ops_menu = build_menu (indexed_color_ops, table); ops_menu = build_menu (indexed_color_ops, accel_group);
menu_bar = gtk_menu_bar_new (); menu_bar = gtk_menu_bar_new ();
gtk_box_pack_start (GTK_BOX (util_box), menu_bar, FALSE, FALSE, 2); gtk_box_pack_start (GTK_BOX (util_box), menu_bar, FALSE, FALSE, 2);

View File

@ -565,7 +565,7 @@ create_toolbox ()
GtkWidget *vbox; GtkWidget *vbox;
GtkWidget *menubar; GtkWidget *menubar;
GList *device_list; GList *device_list;
GtkAcceleratorTable *table; GtkAccelGroup *table;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL); window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_wmclass (GTK_WINDOW (window), "toolbox", "Gimp"); gtk_window_set_wmclass (GTK_WINDOW (window), "toolbox", "Gimp");
@ -626,7 +626,7 @@ create_toolbox ()
gtk_widget_show (menubar); gtk_widget_show (menubar);
/* Install the accelerator table in the main window */ /* Install the accelerator table in the main window */
gtk_window_add_accelerator_table (GTK_WINDOW (window), table); gtk_window_add_accel_group (GTK_WINDOW (window), table);
vbox = gtk_vbox_new (FALSE, 1); vbox = gtk_vbox_new (FALSE, 1);
gtk_box_pack_start (GTK_BOX (main_vbox), vbox, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (main_vbox), vbox, TRUE, TRUE, 0);
@ -673,7 +673,7 @@ create_display_shell (int gdisp_id,
int type) int type)
{ {
static GtkWidget *image_popup_menu = NULL; static GtkWidget *image_popup_menu = NULL;
static GtkAcceleratorTable *image_accelerator_table = NULL; static GtkAccelGroup *image_accel_group = NULL;
GDisplay *gdisp; GDisplay *gdisp;
GtkWidget *table; GtkWidget *table;
int n_width, n_height; int n_width, n_height;
@ -798,13 +798,13 @@ create_display_shell (int gdisp_id,
GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
if (! image_popup_menu) if (! image_popup_menu)
menus_get_image_menu (&image_popup_menu, &image_accelerator_table); menus_get_image_menu (&image_popup_menu, &image_accel_group);
/* the popup menu */ /* the popup menu */
gdisp->popup = image_popup_menu; gdisp->popup = image_popup_menu;
/* the accelerator table for images */ /* the accelerator table for images */
gtk_window_add_accelerator_table (GTK_WINDOW (gdisp->shell), image_accelerator_table); gtk_window_add_accel_group (GTK_WINDOW (gdisp->shell), image_accel_group);
gtk_widget_show (gdisp->hsb); gtk_widget_show (gdisp->hsb);
gtk_widget_show (gdisp->vsb); gtk_widget_show (gdisp->vsb);

View File

@ -87,7 +87,7 @@ struct _LayersDialog {
GtkWidget *mode_box; GtkWidget *mode_box;
GtkWidget *opacity_box; GtkWidget *opacity_box;
GtkWidget *ops_menu; GtkWidget *ops_menu;
GtkAcceleratorTable *accel_table; GtkAccelGroup *accel_group;
GtkAdjustment *opacity_data; GtkAdjustment *opacity_data;
GdkGC *red_gc; /* for non-applied layer masks */ GdkGC *red_gc; /* for non-applied layer masks */
GdkGC *green_gc; /* for visible layer masks */ GdkGC *green_gc; /* for visible layer masks */
@ -629,7 +629,7 @@ layers_dialog_create ()
layersD->active_channel = NULL; layersD->active_channel = NULL;
layersD->floating_sel = NULL; layersD->floating_sel = NULL;
layersD->layer_widgets = NULL; layersD->layer_widgets = NULL;
layersD->accel_table = gtk_accelerator_table_new (); layersD->accel_group = gtk_accel_group_new ();
layersD->green_gc = NULL; layersD->green_gc = NULL;
layersD->red_gc = NULL; layersD->red_gc = NULL;
@ -644,7 +644,7 @@ layers_dialog_create ()
gtk_container_border_width (GTK_CONTAINER (vbox), 2); gtk_container_border_width (GTK_CONTAINER (vbox), 2);
/* The layers commands pulldown menu */ /* The layers commands pulldown menu */
layersD->ops_menu = build_menu (layers_ops, layersD->accel_table); layersD->ops_menu = build_menu (layers_ops, layersD->accel_group);
/* The Mode option menu, and the preserve transparency */ /* The Mode option menu, and the preserve transparency */
layersD->mode_box = util_box = gtk_hbox_new (FALSE, 1); layersD->mode_box = util_box = gtk_hbox_new (FALSE, 1);
@ -1527,9 +1527,9 @@ layers_dialog_map_callback (GtkWidget *w,
{ {
if (!layersD) if (!layersD)
return; return;
gtk_window_add_accelerator_table (GTK_WINDOW (lc_shell), gtk_window_add_accel_group (GTK_WINDOW (lc_shell),
layersD->accel_table); layersD->accel_group);
} }
static void static void
@ -1538,9 +1538,9 @@ layers_dialog_unmap_callback (GtkWidget *w,
{ {
if (!layersD) if (!layersD)
return; return;
gtk_window_remove_accelerator_table (GTK_WINDOW (lc_shell), gtk_window_remove_accel_group (GTK_WINDOW (lc_shell),
layersD->accel_table); layersD->accel_group);
} }
static void static void

View File

@ -90,9 +90,10 @@ main (int argc, char **argv)
gtk_set_locale (); gtk_set_locale ();
setlocale(LC_NUMERIC, "C"); /* must use dot, not comma, as decimal separator */ setlocale(LC_NUMERIC, "C"); /* must use dot, not comma, as decimal separator */
gtk_init (&argc, &argv); gtk_init (&argc, &argv);
gtk_accelerator_table_set_mod_mask (NULL, GDK_SHIFT_MASK |
GDK_CONTROL_MASK | #ifdef HAVE_LIBGLE
GDK_MOD1_MASK); gle_init (&argc, &argv);
#endif /* !HAVE_LIBGLE */
display_name = gdk_get_display (); display_name = gdk_get_display ();
display_env = g_new (gchar, strlen (display_name) + 9); display_env = g_new (gchar, strlen (display_name) + 9);

View File

@ -32,324 +32,298 @@
#include "gdisplay.h" #include "gdisplay.h"
static void menus_init (void); static void menus_init (void);
static void menus_foreach (gpointer key,
gpointer value,
gpointer user_data);
static gint menus_install_accel (GtkWidget *widget,
gchar *signal_name,
gchar key,
gchar modifiers,
gchar *path);
static void menus_remove_accel (GtkWidget *widget,
gchar *signal_name,
gchar *path);
static GtkMenuEntry menu_items[] = static GtkItemFactoryEntry toolbox_entries[] =
{ {
{ "<Toolbox>/File/New", "<control>N", file_new_cmd_callback, NULL }, { "/File/New", "<control>N", file_new_cmd_callback, 0 },
{ "<Toolbox>/File/Open", "<control>O", file_open_cmd_callback, NULL }, { "/File/Open", "<control>O", file_open_cmd_callback, 0 },
{ "<Toolbox>/File/About...", NULL, about_dialog_cmd_callback, NULL }, { "/File/About...", NULL, about_dialog_cmd_callback, 0 },
{ "<Toolbox>/File/Preferences...", NULL, file_pref_cmd_callback, NULL }, { "/File/Preferences...", NULL, file_pref_cmd_callback, 0 },
{ "<Toolbox>/File/Tip of the day", NULL, tips_dialog_cmd_callback, NULL }, { "/File/Tip of the day", NULL, tips_dialog_cmd_callback, 0 },
{ "<Toolbox>/File/<separator>", NULL, NULL, NULL }, { "/File/---", NULL, NULL, 0, "<Separator>" },
{ "<Toolbox>/File/Dialogs/Brushes...", "<control><shift>B", dialogs_brushes_cmd_callback, NULL }, { "/File/Dialogs/Brushes...", "<control><shift>B", dialogs_brushes_cmd_callback, 0 },
{ "<Toolbox>/File/Dialogs/Patterns...", "<control><shift>P", dialogs_patterns_cmd_callback, NULL }, { "/File/Dialogs/Patterns...", "<control><shift>P", dialogs_patterns_cmd_callback, 0 },
{ "<Toolbox>/File/Dialogs/Palette...", "<control>P", dialogs_palette_cmd_callback, NULL }, { "/File/Dialogs/Palette...", "<control>P", dialogs_palette_cmd_callback, 0 },
{ "<Toolbox>/File/Dialogs/Gradient Editor...", "<control>G", dialogs_gradient_editor_cmd_callback, NULL }, { "/File/Dialogs/Gradient Editor...", "<control>G", dialogs_gradient_editor_cmd_callback, 0 },
{ "<Toolbox>/File/Dialogs/Tool Options...", "<control><shift>T", dialogs_tools_options_cmd_callback, NULL }, { "/File/Dialogs/Tool Options...", "<control><shift>T", dialogs_tools_options_cmd_callback, 0 },
{ "<Toolbox>/File/Dialogs/Input Devices...", NULL, dialogs_input_devices_cmd_callback, NULL }, { "/File/Dialogs/Input Devices...", NULL, dialogs_input_devices_cmd_callback, 0 },
{ "<Toolbox>/File/Dialogs/Device Status...", NULL, dialogs_device_status_cmd_callback, NULL }, { "/File/Dialogs/Device Status...", NULL, dialogs_device_status_cmd_callback, 0 },
{ "/File/---", NULL, NULL, 0, "<Separator>" },
{ "<Toolbox>/File/<separator>",NULL,NULL,NULL}, { "/File/Quit", "<control>Q", file_quit_cmd_callback, 0 },
{ "<Toolbox>/File/Quit", "<control>Q", file_quit_cmd_callback, NULL },
{ "<Image>/File/New", "<control>N", file_new_cmd_callback, (gpointer) 1 },
{ "<Image>/File/Open", "<control>O", file_open_cmd_callback, NULL },
{ "<Image>/File/Save", "<control>S", file_save_cmd_callback, NULL },
{ "<Image>/File/Save as", NULL, file_save_as_cmd_callback, NULL },
{ "<Image>/File/Preferences...", NULL, file_pref_cmd_callback, NULL },
{ "<Image>/File/<separator>", NULL, NULL, NULL },
{ "<Image>/File/Close", "<control>W", file_close_cmd_callback, NULL },
{ "<Image>/File/Quit", "<control>Q", file_quit_cmd_callback, NULL },
{ "<Image>/File/<separator>", NULL, NULL, NULL },
{ "<Image>/Edit/Cut", "<control>X", edit_cut_cmd_callback, NULL },
{ "<Image>/Edit/Copy", "<control>C", edit_copy_cmd_callback, NULL },
{ "<Image>/Edit/Paste", "<control>V", edit_paste_cmd_callback, NULL },
{ "<Image>/Edit/Paste Into", NULL, edit_paste_into_cmd_callback, NULL },
{ "<Image>/Edit/Clear", "<control>K", edit_clear_cmd_callback, NULL },
{ "<Image>/Edit/Fill", "<control>.", edit_fill_cmd_callback, NULL },
{ "<Image>/Edit/Stroke", NULL, edit_stroke_cmd_callback, NULL },
{ "<Image>/Edit/Undo", "<control>Z", edit_undo_cmd_callback, NULL },
{ "<Image>/Edit/Redo", "<control>R", edit_redo_cmd_callback, NULL },
{ "<Image>/Edit/<separator>", NULL, NULL, NULL },
{ "<Image>/Edit/Cut Named", "<control><shift>X", edit_named_cut_cmd_callback, NULL },
{ "<Image>/Edit/Copy Named", "<control><shift>C", edit_named_copy_cmd_callback, NULL },
{ "<Image>/Edit/Paste Named", "<control><shift>V", edit_named_paste_cmd_callback, NULL },
{ "<Image>/Edit/<separator>", NULL, NULL, NULL },
{ "<Image>/Select/Toggle", "<control>T", select_toggle_cmd_callback, NULL },
{ "<Image>/Select/Invert", "<control>I", select_invert_cmd_callback, NULL },
{ "<Image>/Select/All", "<control>A", select_all_cmd_callback, NULL },
{ "<Image>/Select/None", "<control><shift>A", select_none_cmd_callback, NULL },
{ "<Image>/Select/Float", "<control><shift>L", select_float_cmd_callback, NULL },
{ "<Image>/Select/Sharpen", "<control><shift>H", select_sharpen_cmd_callback, NULL },
{ "<Image>/Select/Border", "<control><shift>B", select_border_cmd_callback, NULL },
{ "<Image>/Select/Feather", "<control><shift>F", select_feather_cmd_callback, NULL },
{ "<Image>/Select/Grow", NULL, select_grow_cmd_callback, NULL },
{ "<Image>/Select/Shrink", NULL, select_shrink_cmd_callback, NULL },
{ "<Image>/Select/Save To Channel", NULL, select_save_cmd_callback, NULL },
{ "<Image>/Select/By Color...", NULL, select_by_color_cmd_callback, NULL },
{ "<Image>/View/Zoom In", "=", view_zoomin_cmd_callback, NULL },
{ "<Image>/View/Zoom Out", "-", view_zoomout_cmd_callback, NULL },
{ "<Image>/View/Zoom/16:1", NULL, view_zoom_16_1_callback, NULL },
{ "<Image>/View/Zoom/8:1", NULL, view_zoom_8_1_callback, NULL },
{ "<Image>/View/Zoom/4:1", NULL, view_zoom_4_1_callback, NULL },
{ "<Image>/View/Zoom/2:1", NULL, view_zoom_2_1_callback, NULL },
{ "<Image>/View/Zoom/1:1", "1", view_zoom_1_1_callback, NULL },
{ "<Image>/View/Zoom/1:2", NULL, view_zoom_1_2_callback, NULL },
{ "<Image>/View/Zoom/1:4", NULL, view_zoom_1_4_callback, NULL },
{ "<Image>/View/Zoom/1:8", NULL, view_zoom_1_8_callback, NULL },
{ "<Image>/View/Zoom/1:16", NULL, view_zoom_1_16_callback, NULL },
{ "<Image>/View/Window Info...", "<control><shift>I", view_window_info_cmd_callback, NULL },
{ "<Image>/View/<check>Toggle Rulers", "<control><shift>R", view_toggle_rulers_cmd_callback, NULL },
{ "<Image>/View/<check>Toggle Guides", "<control><shift>T", view_toggle_guides_cmd_callback, NULL },
{ "<Image>/View/<check>Snap To Guides", NULL, view_snap_to_guides_cmd_callback, NULL },
{ "<Image>/View/<separator>", NULL, NULL, NULL },
{ "<Image>/View/New View", NULL, view_new_view_cmd_callback, NULL },
{ "<Image>/View/Shrink Wrap", "<control>E", view_shrink_wrap_cmd_callback, NULL },
{ "<Image>/Image/Colors/Equalize", NULL, image_equalize_cmd_callback, NULL },
{ "<Image>/Image/Colors/Invert", NULL, image_invert_cmd_callback, NULL },
{ "<Image>/Image/Colors/Posterize", NULL, image_posterize_cmd_callback, NULL },
{ "<Image>/Image/Colors/Threshold", NULL, image_threshold_cmd_callback, NULL },
{ "<Image>/Image/Colors/<separator>", NULL, NULL, NULL },
{ "<Image>/Image/Colors/Color Balance", NULL, image_color_balance_cmd_callback, NULL },
{ "<Image>/Image/Colors/Brightness-Contrast", NULL, image_brightness_contrast_cmd_callback, NULL },
{ "<Image>/Image/Colors/Hue-Saturation", NULL, image_hue_saturation_cmd_callback, NULL },
{ "<Image>/Image/Colors/Curves", NULL, image_curves_cmd_callback, NULL },
{ "<Image>/Image/Colors/Levels", NULL, image_levels_cmd_callback, NULL },
{ "<Image>/Image/Colors/<separator>", NULL, NULL, NULL },
{ "<Image>/Image/Colors/Desaturate", NULL, image_desaturate_cmd_callback, NULL },
{ "<Image>/Image/Channel Ops/Duplicate", "<control>D", channel_ops_duplicate_cmd_callback, NULL },
{ "<Image>/Image/Channel Ops/Offset", "<control><shift>O", channel_ops_offset_cmd_callback, NULL },
{ "<Image>/Image/Alpha/Add Alpha Channel", NULL, layers_add_alpha_channel_cmd_callback, NULL },
{ "<Image>/Image/<separator>", NULL, NULL, NULL },
{ "<Image>/Image/RGB", NULL, image_convert_rgb_cmd_callback, NULL },
{ "<Image>/Image/Grayscale", NULL, image_convert_grayscale_cmd_callback, NULL },
{ "<Image>/Image/Indexed", NULL, image_convert_indexed_cmd_callback, NULL },
{ "<Image>/Image/<separator>", NULL, NULL, NULL },
{ "<Image>/Image/Resize", NULL, image_resize_cmd_callback, NULL },
{ "<Image>/Image/Scale", NULL, image_scale_cmd_callback, NULL },
{ "<Image>/Image/<separator>", NULL, NULL, NULL },
{ "<Image>/Image/Histogram", NULL, image_histogram_cmd_callback, NULL },
{ "<Image>/Image/<separator>", NULL, NULL, NULL },
{ "<Image>/Layers/Layers & Channels...", "<control>L", dialogs_lc_cmd_callback, NULL },
{ "<Image>/Layers/Raise Layer", "<control>F", layers_raise_cmd_callback, NULL },
{ "<Image>/Layers/Lower Layer", "<control>B", layers_lower_cmd_callback, NULL },
{ "<Image>/Layers/Anchor Layer", "<control>H", layers_anchor_cmd_callback, NULL },
{ "<Image>/Layers/Merge Visible Layers", "<control>M", layers_merge_cmd_callback, NULL },
{ "<Image>/Layers/Flatten Image", NULL, layers_flatten_cmd_callback, NULL },
{ "<Image>/Layers/Alpha To Selection", NULL, layers_alpha_select_cmd_callback, NULL },
{ "<Image>/Layers/Mask To Selection", NULL, layers_mask_select_cmd_callback, NULL },
{ "<Image>/Layers/Add Alpha Channel", NULL, layers_add_alpha_channel_cmd_callback, NULL },
{ "<Image>/Tools/Rect Select", "R", tools_select_cmd_callback, (gpointer) RECT_SELECT },
{ "<Image>/Tools/Ellipse Select", "E", tools_select_cmd_callback, (gpointer) ELLIPSE_SELECT },
{ "<Image>/Tools/Free Select", "F", tools_select_cmd_callback, (gpointer) FREE_SELECT },
{ "<Image>/Tools/Fuzzy Select", "Z", tools_select_cmd_callback, (gpointer) FUZZY_SELECT },
{ "<Image>/Tools/Bezier Select", "B", tools_select_cmd_callback, (gpointer) BEZIER_SELECT },
{ "<Image>/Tools/Intelligent Scissors", "I", tools_select_cmd_callback, (gpointer) ISCISSORS },
{ "<Image>/Tools/Move", "M", tools_select_cmd_callback, (gpointer) MOVE },
{ "<Image>/Tools/Magnify", "<shift>M", tools_select_cmd_callback, (gpointer) MAGNIFY },
{ "<Image>/Tools/Crop", "<shift>C", tools_select_cmd_callback, (gpointer) CROP },
{ "<Image>/Tools/Transform", "<shift>T", tools_select_cmd_callback, (gpointer) ROTATE },
{ "<Image>/Tools/Flip", "<shift>F", tools_select_cmd_callback, (gpointer) FLIP_HORZ },
{ "<Image>/Tools/Text", "T", tools_select_cmd_callback, (gpointer) TEXT },
{ "<Image>/Tools/Color Picker", "O", tools_select_cmd_callback, (gpointer) COLOR_PICKER },
{ "<Image>/Tools/Bucket Fill", "<shift>B", tools_select_cmd_callback, (gpointer) BUCKET_FILL },
{ "<Image>/Tools/Blend", "L", tools_select_cmd_callback, (gpointer) BLEND },
{ "<Image>/Tools/Paintbrush", "P", tools_select_cmd_callback, (gpointer) PAINTBRUSH },
{ "<Image>/Tools/Pencil", "<shift>P", tools_select_cmd_callback, (gpointer) PENCIL },
{ "<Image>/Tools/Eraser", "<shift>E", tools_select_cmd_callback, (gpointer) ERASER },
{ "<Image>/Tools/Airbrush", "A", tools_select_cmd_callback, (gpointer) AIRBRUSH },
{ "<Image>/Tools/Clone", "C", tools_select_cmd_callback, (gpointer) CLONE },
{ "<Image>/Tools/Convolve", "V", tools_select_cmd_callback, (gpointer) CONVOLVE },
{ "<Image>/Tools/Default Colors", "D", tools_default_colors_cmd_callback, NULL},
{ "<Image>/Tools/Swap Colors", "X", tools_swap_colors_cmd_callback, NULL},
{ "<Image>/Tools/<separator>", NULL, NULL, NULL },
{ "<Image>/Tools/Toolbox", NULL, toolbox_raise_callback, NULL },
{ "<Image>/Filters/", NULL, NULL, NULL },
{ "<Image>/Filters/Repeat last", "<alt>F", filters_repeat_cmd_callback, (gpointer) 0x0 },
{ "<Image>/Filters/Re-show last", "<alt><shift>F", filters_repeat_cmd_callback, (gpointer)
0x1 },
{ "<Image>/Filters/<separator>", NULL, NULL, NULL },
{ "<Image>/Script-Fu/", NULL, NULL, NULL },
{ "<Image>/Dialogs/Brushes...", "<control><shift>B", dialogs_brushes_cmd_callback, NULL },
{ "<Image>/Dialogs/Patterns...", "<control><shift>P", dialogs_patterns_cmd_callback, NULL },
{ "<Image>/Dialogs/Palette...", "<control>P", dialogs_palette_cmd_callback, NULL },
{ "<Image>/Dialogs/Gradient Editor...", "<control>G", dialogs_gradient_editor_cmd_callback, NULL },
{ "<Image>/Dialogs/Layers & Channels...", "<control>L", dialogs_lc_cmd_callback, NULL },
{ "<Image>/Dialogs/Indexed Palette...", NULL, dialogs_indexed_palette_cmd_callback, NULL },
{ "<Image>/Dialogs/Tool Options...", NULL, dialogs_tools_options_cmd_callback, NULL },
{ "<Image>/Dialogs/Input Devices...", NULL, dialogs_input_devices_cmd_callback, NULL },
{ "<Image>/Dialogs/Device Status...", NULL, dialogs_device_status_cmd_callback, NULL },
{ "<Load>/Automatic", NULL, file_load_by_extension_callback, NULL },
{ "<Load>/<separator>", NULL, NULL, NULL },
{ "<Save>/By extension", NULL, file_save_by_extension_callback, NULL },
{ "<Save>/<separator>", NULL, NULL, NULL },
}; };
static int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); static guint n_toolbox_entries = sizeof (toolbox_entries) / sizeof (toolbox_entries[0]);
static GtkItemFactory *toolbox_factory = NULL;
static GtkItemFactoryEntry image_entries[] =
{
{ "/File/New", "<control>N", file_new_cmd_callback, 1 },
{ "/File/Open", "<control>O", file_open_cmd_callback, 0 },
{ "/File/Save", "<control>S", file_save_cmd_callback, 0 },
{ "/File/Save as", NULL, file_save_as_cmd_callback, 0 },
{ "/File/Preferences...", NULL, file_pref_cmd_callback, 0 },
{ "/File/---", NULL, NULL, 0, "<Separator>" },
{ "/File/Close", "<control>W", file_close_cmd_callback, 0 },
{ "/File/Quit", "<control>Q", file_quit_cmd_callback, 0 },
{ "/File/---", NULL, NULL, 0, "<Separator>" },
{ "/Edit/Cut", "<control>X", edit_cut_cmd_callback, 0 },
{ "/Edit/Copy", "<control>C", edit_copy_cmd_callback, 0 },
{ "/Edit/Paste", "<control>V", edit_paste_cmd_callback, 0 },
{ "/Edit/Paste Into", NULL, edit_paste_into_cmd_callback, 0 },
{ "/Edit/Clear", "<control>K", edit_clear_cmd_callback, 0 },
{ "/Edit/Fill", "<control>.", edit_fill_cmd_callback, 0 },
{ "/Edit/Stroke", NULL, edit_stroke_cmd_callback, 0 },
{ "/Edit/Undo", "<control>Z", edit_undo_cmd_callback, 0 },
{ "/Edit/Redo", "<control>R", edit_redo_cmd_callback, 0 },
{ "/Edit/<Separator>", NULL, NULL, 0 },
{ "/Edit/Cut Named", "<control><shift>X", edit_named_cut_cmd_callback, 0 },
{ "/Edit/Copy Named", "<control><shift>C", edit_named_copy_cmd_callback, 0 },
{ "/Edit/Paste Named", "<control><shift>V", edit_named_paste_cmd_callback, 0 },
{ "/Edit/---", NULL, NULL, 0, "<Separator>" },
{ "/Select/Toggle", "<control>T", select_toggle_cmd_callback, 0 },
{ "/Select/Invert", "<control>I", select_invert_cmd_callback, 0 },
{ "/Select/All", "<control>A", select_all_cmd_callback, 0 },
{ "/Select/None", "<control><shift>A", select_none_cmd_callback, 0 },
{ "/Select/Float", "<control><shift>L", select_float_cmd_callback, 0 },
{ "/Select/Sharpen", "<control><shift>H", select_sharpen_cmd_callback, 0 },
{ "/Select/Border", "<control><shift>B", select_border_cmd_callback, 0 },
{ "/Select/Feather", "<control><shift>F", select_feather_cmd_callback, 0 },
{ "/Select/Grow", NULL, select_grow_cmd_callback, 0 },
{ "/Select/Shrink", NULL, select_shrink_cmd_callback, 0 },
{ "/Select/Save To Channel", NULL, select_save_cmd_callback, 0 },
{ "/Select/By Color...", NULL, select_by_color_cmd_callback, 0 },
{ "/View/Zoom In", "=", view_zoomin_cmd_callback, 0 },
{ "/View/Zoom Out", "-", view_zoomout_cmd_callback, 0 },
{ "/View/Zoom/16:1", NULL, view_zoom_16_1_callback, 0 },
{ "/View/Zoom/8:1", NULL, view_zoom_8_1_callback, 0 },
{ "/View/Zoom/4:1", NULL, view_zoom_4_1_callback, 0 },
{ "/View/Zoom/2:1", NULL, view_zoom_2_1_callback, 0 },
{ "/View/Zoom/1:1", "1", view_zoom_1_1_callback, 0 },
{ "/View/Zoom/1:2", NULL, view_zoom_1_2_callback, 0 },
{ "/View/Zoom/1:4", NULL, view_zoom_1_4_callback, 0 },
{ "/View/Zoom/1:8", NULL, view_zoom_1_8_callback, 0 },
{ "/View/Zoom/1:16", NULL, view_zoom_1_16_callback, 0 },
{ "/View/Window Info...", "<control><shift>I", view_window_info_cmd_callback, 0 },
{ "/View/Toggle Rulers", "<control><shift>R", view_toggle_rulers_cmd_callback, 0, "<ToggleItem>" },
{ "/View/Toggle Guides", "<control><shift>T", view_toggle_guides_cmd_callback, 0, "<ToggleItem>" },
{ "/View/Snap To Guides", NULL, view_snap_to_guides_cmd_callback, 0, "<ToggleItem>" },
{ "/View/---", NULL, NULL, 0, "<Separator>" },
{ "/View/New View", NULL, view_new_view_cmd_callback, 0 },
{ "/View/Shrink Wrap", "<control>E", view_shrink_wrap_cmd_callback, 0 },
{ "/Image/Colors/Equalize", NULL, image_equalize_cmd_callback, 0 },
{ "/Image/Colors/Invert", NULL, image_invert_cmd_callback, 0 },
{ "/Image/Colors/Posterize", NULL, image_posterize_cmd_callback, 0 },
{ "/Image/Colors/Threshold", NULL, image_threshold_cmd_callback, 0 },
{ "/Image/Colors/---", NULL, NULL, 0, "<Separator>" },
{ "/Image/Colors/Color Balance", NULL, image_color_balance_cmd_callback, 0 },
{ "/Image/Colors/Brightness-Contrast", NULL, image_brightness_contrast_cmd_callback, 0 },
{ "/Image/Colors/Hue-Saturation", NULL, image_hue_saturation_cmd_callback, 0 },
{ "/Image/Colors/Curves", NULL, image_curves_cmd_callback, 0 },
{ "/Image/Colors/Levels", NULL, image_levels_cmd_callback, 0 },
{ "/Image/Colors/---", NULL, NULL, 0, "<Separator>" },
{ "/Image/Colors/Desaturate", NULL, image_desaturate_cmd_callback, 0 },
{ "/Image/Channel Ops/Duplicate", "<control>D", channel_ops_duplicate_cmd_callback, 0 },
{ "/Image/Channel Ops/Offset", "<control><shift>O", channel_ops_offset_cmd_callback, 0 },
{ "/Image/Alpha/Add Alpha Channel", NULL, layers_add_alpha_channel_cmd_callback, 0 },
{ "/Image/---", NULL, NULL, 0, "<Separator>" },
{ "/Image/RGB", NULL, image_convert_rgb_cmd_callback, 0 },
{ "/Image/Grayscale", NULL, image_convert_grayscale_cmd_callback, 0 },
{ "/Image/Indexed", NULL, image_convert_indexed_cmd_callback, 0 },
{ "/Image/---", NULL, NULL, 0, "<Separator>" },
{ "/Image/Resize", NULL, image_resize_cmd_callback, 0 },
{ "/Image/Scale", NULL, image_scale_cmd_callback, 0 },
{ "/Image/---", NULL, NULL, 0, "<Separator>" },
{ "/Image/Histogram", NULL, image_histogram_cmd_callback, 0 },
{ "/Image/---", NULL, NULL, 0, "<Separator>" },
{ "/Layers/Layers & Channels...", "<control>L", dialogs_lc_cmd_callback, 0 },
{ "/Layers/Raise Layer", "<control>F", layers_raise_cmd_callback, 0 },
{ "/Layers/Lower Layer", "<control>B", layers_lower_cmd_callback, 0 },
{ "/Layers/Anchor Layer", "<control>H", layers_anchor_cmd_callback, 0 },
{ "/Layers/Merge Visible Layers", "<control>M", layers_merge_cmd_callback, 0 },
{ "/Layers/Flatten Image", NULL, layers_flatten_cmd_callback, 0 },
{ "/Layers/Alpha To Selection", NULL, layers_alpha_select_cmd_callback, 0 },
{ "/Layers/Mask To Selection", NULL, layers_mask_select_cmd_callback, 0 },
{ "/Layers/Add Alpha Channel", NULL, layers_add_alpha_channel_cmd_callback, 0 },
{ "/Tools/Rect Select", "R", tools_select_cmd_callback, RECT_SELECT },
{ "/Tools/Ellipse Select", "E", tools_select_cmd_callback, ELLIPSE_SELECT },
{ "/Tools/Free Select", "F", tools_select_cmd_callback, FREE_SELECT },
{ "/Tools/Fuzzy Select", "Z", tools_select_cmd_callback, FUZZY_SELECT },
{ "/Tools/Bezier Select", "B", tools_select_cmd_callback, BEZIER_SELECT },
{ "/Tools/Intelligent Scissors", "I", tools_select_cmd_callback, ISCISSORS },
{ "/Tools/Move", "M", tools_select_cmd_callback, MOVE },
{ "/Tools/Magnify", "<shift>M", tools_select_cmd_callback, MAGNIFY },
{ "/Tools/Crop", "<shift>C", tools_select_cmd_callback, CROP },
{ "/Tools/Transform", "<shift>T", tools_select_cmd_callback, ROTATE },
{ "/Tools/Flip", "<shift>F", tools_select_cmd_callback, FLIP_HORZ },
{ "/Tools/Text", "T", tools_select_cmd_callback, TEXT },
{ "/Tools/Color Picker", "O", tools_select_cmd_callback, COLOR_PICKER },
{ "/Tools/Bucket Fill", "<shift>B", tools_select_cmd_callback, BUCKET_FILL },
{ "/Tools/Blend", "L", tools_select_cmd_callback, BLEND },
{ "/Tools/Paintbrush", "P", tools_select_cmd_callback, PAINTBRUSH },
{ "/Tools/Pencil", "<shift>P", tools_select_cmd_callback, PENCIL },
{ "/Tools/Eraser", "<shift>E", tools_select_cmd_callback, ERASER },
{ "/Tools/Airbrush", "A", tools_select_cmd_callback, AIRBRUSH },
{ "/Tools/Clone", "C", tools_select_cmd_callback, CLONE },
{ "/Tools/Convolve", "V", tools_select_cmd_callback, CONVOLVE },
{ "/Tools/Default Colors", "D", tools_default_colors_cmd_callback, 0 },
{ "/Tools/Swap Colors", "X", tools_swap_colors_cmd_callback, 0 },
{ "/Tools/---", NULL, NULL, 0, "<Separator>" },
{ "/Tools/Toolbox", NULL, toolbox_raise_callback, 0 },
{ "/Filters/", NULL, NULL, 0 },
{ "/Filters/Repeat last", "<alt>F", filters_repeat_cmd_callback, 0x0 },
{ "/Filters/Re-show last", "<alt><shift>F", filters_repeat_cmd_callback, 0x1 },
{ "/Filters/---", NULL, NULL, 0, "<Separator>" },
{ "/Script-Fu/", NULL, NULL, 0 },
{ "/Dialogs/Brushes...", "<control><shift>B", dialogs_brushes_cmd_callback, 0 },
{ "/Dialogs/Patterns...", "<control><shift>P", dialogs_patterns_cmd_callback, 0 },
{ "/Dialogs/Palette...", "<control>P", dialogs_palette_cmd_callback, 0 },
{ "/Dialogs/Gradient Editor...", "<control>G", dialogs_gradient_editor_cmd_callback, 0 },
{ "/Dialogs/Layers & Channels...", "<control>L", dialogs_lc_cmd_callback, 0 },
{ "/Dialogs/Indexed Palette...", NULL, dialogs_indexed_palette_cmd_callback, 0 },
{ "/Dialogs/Tool Options...", NULL, dialogs_tools_options_cmd_callback, 0 },
{ "/Dialogs/Input Devices...", NULL, dialogs_input_devices_cmd_callback, 0 },
{ "/Dialogs/Device Status...", NULL, dialogs_device_status_cmd_callback, 0 },
};
static guint n_image_entries = sizeof (image_entries) / sizeof (image_entries[0]);
static GtkItemFactory *image_factory = NULL;
static GtkItemFactoryEntry load_entries[] =
{
{ "/Automatic", NULL, file_load_by_extension_callback, 0 },
{ "/---", NULL, NULL, 0, "<Separator>" },
};
static guint n_load_entries = sizeof (load_entries) / sizeof (load_entries[0]);
static GtkItemFactory *load_factory = NULL;
static GtkItemFactoryEntry save_entries[] =
{
{ "/By extension", NULL, file_save_by_extension_callback, 0 },
{ "/---", NULL, NULL, 0, "<Separator>" },
};
static guint n_save_entries = sizeof (save_entries) / sizeof (save_entries[0]);
static GtkItemFactory *save_factory = NULL;
static int initialize = TRUE; static int initialize = TRUE;
static GtkMenuFactory *factory = NULL;
static GtkMenuFactory *subfactories[4];
static GHashTable *entry_ht = NULL;
void void
menus_get_toolbox_menubar (GtkWidget **menubar, menus_get_toolbox_menubar (GtkWidget **menubar,
GtkAcceleratorTable **table) GtkAccelGroup **accel_group)
{ {
if (initialize) if (initialize)
menus_init (); menus_init ();
if (menubar) if (menubar)
*menubar = subfactories[0]->widget; *menubar = toolbox_factory->widget;
if (table) if (accel_group)
*table = subfactories[0]->table; *accel_group = toolbox_factory->accel_group;
} }
void void
menus_get_image_menu (GtkWidget **menu, menus_get_image_menu (GtkWidget **menu,
GtkAcceleratorTable **table) GtkAccelGroup **accel_group)
{ {
if (initialize) if (initialize)
menus_init (); menus_init ();
if (menu) if (menu)
*menu = subfactories[1]->widget; *menu = image_factory->widget;
if (table) if (accel_group)
*table = subfactories[1]->table; *accel_group = image_factory->accel_group;
} }
void void
menus_get_load_menu (GtkWidget **menu, menus_get_load_menu (GtkWidget **menu,
GtkAcceleratorTable **table) GtkAccelGroup **accel_group)
{ {
if (initialize) if (initialize)
menus_init (); menus_init ();
if (menu) if (menu)
*menu = subfactories[2]->widget; *menu = load_factory->widget;
if (table) if (accel_group)
*table = subfactories[2]->table; *accel_group = load_factory->accel_group;
} }
void void
menus_get_save_menu (GtkWidget **menu, menus_get_save_menu (GtkWidget **menu,
GtkAcceleratorTable **table) GtkAccelGroup **accel_group)
{ {
if (initialize) if (initialize)
menus_init (); menus_init ();
if (menu) if (menu)
*menu = subfactories[3]->widget; *menu = save_factory->widget;
if (table) if (accel_group)
*table = subfactories[3]->table; *accel_group = save_factory->accel_group;
} }
void void
menus_create (GtkMenuEntry *entries, menus_create (GtkMenuEntry *entries,
int nmenu_entries) int nmenu_entries)
{ {
char *accelerator;
int i;
if (initialize) if (initialize)
menus_init (); menus_init ();
if (entry_ht) gtk_item_factory_create_menu_entries (nmenu_entries, entries);
for (i = 0; i < nmenu_entries; i++)
{
accelerator = g_hash_table_lookup (entry_ht, entries[i].path);
if (accelerator)
{
if (accelerator[0] == '\0')
entries[i].accelerator = NULL;
else
entries[i].accelerator = accelerator;
}
}
gtk_menu_factory_add_entries (factory, entries, nmenu_entries);
for (i = 0; i < nmenu_entries; i++)
if (entries[i].widget && GTK_BIN (entries[i].widget)->child)
{
gtk_signal_connect (GTK_OBJECT (entries[i].widget), "install_accelerator",
(GtkSignalFunc) menus_install_accel,
entries[i].path);
gtk_signal_connect (GTK_OBJECT (entries[i].widget), "remove_accelerator",
(GtkSignalFunc) menus_remove_accel,
entries[i].path);
}
} }
void void
menus_set_sensitive (char *path, menus_set_sensitive (char *path,
int sensitive) int sensitive)
{ {
GtkMenuPath *menu_path; GtkItemFactory *ifactory;
GtkWidget *widget = NULL;
if (initialize) if (initialize)
menus_init (); menus_init ();
menu_path = gtk_menu_factory_find (factory, path); ifactory = gtk_item_factory_from_path (path);
if (menu_path)
gtk_widget_set_sensitive (menu_path->widget, sensitive); if (ifactory)
else {
g_message ("Unable to set sensitivity for menu which doesn't exist: %s", path); widget = gtk_item_factory_get_widget (ifactory, path);
gtk_widget_set_sensitive (widget, sensitive);
}
if (!ifactory || !widget)
printf ("Unable to set sensitivity for menu which doesn't exist:\n%s", path);
} }
void void
menus_set_state (char *path, menus_set_state (char *path,
int state) int state)
{ {
GtkMenuPath *menu_path; GtkItemFactory *ifactory;
GtkWidget *widget = NULL;
if (initialize) if (initialize)
menus_init (); menus_init ();
menu_path = gtk_menu_factory_find (factory, path); ifactory = gtk_item_factory_from_path (path);
if (menu_path)
if (ifactory)
{ {
if (GTK_IS_CHECK_MENU_ITEM (menu_path->widget)) widget = gtk_item_factory_get_widget (ifactory, path);
gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (menu_path->widget), state);
if (widget && GTK_IS_CHECK_MENU_ITEM (widget))
gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (widget), state);
else
widget = NULL;
} }
else if (!ifactory || !widget)
g_message ("Unable to set state for menu which doesn't exist: %s", path); printf ("Unable to set state for menu which doesn't exist:\n%s", path);
}
void
menus_add_path (char *path,
char *accelerator)
{
if (!entry_ht)
entry_ht = g_hash_table_new (g_str_hash, g_str_equal);
g_hash_table_insert (entry_ht, path, accelerator);
} }
void void
@ -358,35 +332,24 @@ menus_destroy (char *path)
if (initialize) if (initialize)
menus_init (); menus_init ();
gtk_menu_factory_remove_paths (factory, &path, 1); gtk_item_factories_path_delete (NULL, path);
} }
void void
menus_quit () menus_quit ()
{ {
FILE *fp; gchar *filename;
char filename[512];
char *gimp_dir; filename = g_strconcat (gimp_directory (), "/menurc", NULL);
gtk_item_factory_dump_rc (filename, NULL, TRUE);
g_free (filename);
if (entry_ht)
{
gimp_dir = gimp_directory ();
if ('\000' != gimp_dir[0])
{
sprintf (filename, "%s/menurc", gimp_dir);
fp = fopen (filename, "w");
if (fp)
{
g_hash_table_foreach (entry_ht, menus_foreach, fp);
fclose (fp);
}
}
}
if (!initialize) if (!initialize)
{ {
gtk_menu_factory_destroy (factory); gtk_object_destroy (GTK_OBJECT (toolbox_factory));
gtk_object_destroy (GTK_OBJECT (image_factory));
gtk_object_destroy (GTK_OBJECT (load_factory));
gtk_object_destroy (GTK_OBJECT (save_factory));
} }
} }
@ -395,101 +358,35 @@ menus_quit ()
static void static void
menus_init () menus_init ()
{ {
char filename[512];
if (initialize) if (initialize)
{ {
gchar *filename;
initialize = FALSE; initialize = FALSE;
factory = gtk_menu_factory_new (GTK_MENU_FACTORY_MENU_BAR); toolbox_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<Toolbox>", NULL);
gtk_item_factory_create_items_ac (toolbox_factory,
n_toolbox_entries,
toolbox_entries,
NULL, 2);
image_factory = gtk_item_factory_new (GTK_TYPE_MENU, "<Image>", NULL);
gtk_item_factory_create_items_ac (image_factory,
n_image_entries,
image_entries,
NULL, 2);
load_factory = gtk_item_factory_new (GTK_TYPE_MENU, "<Load>", NULL);
gtk_item_factory_create_items_ac (load_factory,
n_load_entries,
load_entries,
NULL, 2);
save_factory = gtk_item_factory_new (GTK_TYPE_MENU, "<Save>", NULL);
gtk_item_factory_create_items_ac (save_factory,
n_save_entries,
save_entries,
NULL, 2);
subfactories[0] = gtk_menu_factory_new (GTK_MENU_FACTORY_MENU_BAR); filename = g_strconcat (gimp_directory (), "/menurc", NULL);
gtk_menu_factory_add_subfactory (factory, subfactories[0], "<Toolbox>"); gtk_item_factory_parse_rc (filename);
g_free (filename);
subfactories[1] = gtk_menu_factory_new (GTK_MENU_FACTORY_MENU);
gtk_menu_factory_add_subfactory (factory, subfactories[1], "<Image>");
subfactories[2] = gtk_menu_factory_new (GTK_MENU_FACTORY_MENU);
gtk_menu_factory_add_subfactory (factory, subfactories[2], "<Load>");
subfactories[3] = gtk_menu_factory_new (GTK_MENU_FACTORY_MENU);
gtk_menu_factory_add_subfactory (factory, subfactories[3], "<Save>");
sprintf (filename, "%s/menurc", gimp_directory ());
parse_gimprc_file (filename);
menus_create (menu_items, nmenu_items);
} }
} }
static void
menus_foreach (gpointer key,
gpointer value,
gpointer user_data)
{
char accel[64];
int i, j;
for (i = j = 0; ((char*) value)[i] != '\0'; i++, j++)
{
if (((char *) value)[i] == '"' || ((char *) value)[i] == '\\')
accel[j++] = '\\';
accel[j] = ((char *) value)[i];
}
accel[j] = '\0';
fprintf ((FILE*) user_data, "(menu-path \"%s\" \"%s\")\n", (char*) key, accel);
}
static gint
menus_install_accel (GtkWidget *widget,
gchar *signal_name,
gchar key,
gchar modifiers,
gchar *path)
{
char accel[64];
char *t1, t2[2];
accel[0] = '\0';
if (modifiers & GDK_CONTROL_MASK)
strcat (accel, "<control>");
if (modifiers & GDK_SHIFT_MASK)
strcat (accel, "<shift>");
if (modifiers & GDK_MOD1_MASK)
strcat (accel, "<alt>");
t2[0] = key;
t2[1] = '\0';
strcat (accel, t2);
if (entry_ht)
{
t1 = g_hash_table_lookup (entry_ht, path);
g_free (t1);
}
else
entry_ht = g_hash_table_new (g_str_hash, g_str_equal);
g_hash_table_insert (entry_ht, path, g_strdup (accel));
return TRUE;
}
static void
menus_remove_accel (GtkWidget *widget,
gchar *signal_name,
gchar *path)
{
char *t;
if (entry_ht)
{
t = g_hash_table_lookup (entry_ht, path);
g_free (t);
g_hash_table_insert (entry_ht, path, g_strdup (""));
}
}

View File

@ -23,21 +23,19 @@
void menus_get_toolbox_menubar (GtkWidget **menubar, void menus_get_toolbox_menubar (GtkWidget **menubar,
GtkAcceleratorTable **table); GtkAccelGroup **accel_group);
void menus_get_image_menu (GtkWidget **menu, void menus_get_image_menu (GtkWidget **menu,
GtkAcceleratorTable **table); GtkAccelGroup **accel_group);
void menus_get_load_menu (GtkWidget **menu, void menus_get_load_menu (GtkWidget **menu,
GtkAcceleratorTable **table); GtkAccelGroup **accel_group);
void menus_get_save_menu (GtkWidget **menu, void menus_get_save_menu (GtkWidget **menu,
GtkAcceleratorTable **table); GtkAccelGroup **accel_group);
void menus_create (GtkMenuEntry *entries, void menus_create (GtkMenuEntry *entries,
int nmenu_entries); int nmenu_entries);
void menus_set_sensitive (char *path, void menus_set_sensitive (char *path,
int sensitive); int sensitive);
void menus_set_state (char *path, void menus_set_state (char *path,
int state); int state);
void menus_add_path (char *path,
char *accelerator);
void menus_destroy (char *path); void menus_destroy (char *path);
void menus_quit (void); void menus_quit (void);

View File

@ -32,324 +32,298 @@
#include "gdisplay.h" #include "gdisplay.h"
static void menus_init (void); static void menus_init (void);
static void menus_foreach (gpointer key,
gpointer value,
gpointer user_data);
static gint menus_install_accel (GtkWidget *widget,
gchar *signal_name,
gchar key,
gchar modifiers,
gchar *path);
static void menus_remove_accel (GtkWidget *widget,
gchar *signal_name,
gchar *path);
static GtkMenuEntry menu_items[] = static GtkItemFactoryEntry toolbox_entries[] =
{ {
{ "<Toolbox>/File/New", "<control>N", file_new_cmd_callback, NULL }, { "/File/New", "<control>N", file_new_cmd_callback, 0 },
{ "<Toolbox>/File/Open", "<control>O", file_open_cmd_callback, NULL }, { "/File/Open", "<control>O", file_open_cmd_callback, 0 },
{ "<Toolbox>/File/About...", NULL, about_dialog_cmd_callback, NULL }, { "/File/About...", NULL, about_dialog_cmd_callback, 0 },
{ "<Toolbox>/File/Preferences...", NULL, file_pref_cmd_callback, NULL }, { "/File/Preferences...", NULL, file_pref_cmd_callback, 0 },
{ "<Toolbox>/File/Tip of the day", NULL, tips_dialog_cmd_callback, NULL }, { "/File/Tip of the day", NULL, tips_dialog_cmd_callback, 0 },
{ "<Toolbox>/File/<separator>", NULL, NULL, NULL }, { "/File/---", NULL, NULL, 0, "<Separator>" },
{ "<Toolbox>/File/Dialogs/Brushes...", "<control><shift>B", dialogs_brushes_cmd_callback, NULL }, { "/File/Dialogs/Brushes...", "<control><shift>B", dialogs_brushes_cmd_callback, 0 },
{ "<Toolbox>/File/Dialogs/Patterns...", "<control><shift>P", dialogs_patterns_cmd_callback, NULL }, { "/File/Dialogs/Patterns...", "<control><shift>P", dialogs_patterns_cmd_callback, 0 },
{ "<Toolbox>/File/Dialogs/Palette...", "<control>P", dialogs_palette_cmd_callback, NULL }, { "/File/Dialogs/Palette...", "<control>P", dialogs_palette_cmd_callback, 0 },
{ "<Toolbox>/File/Dialogs/Gradient Editor...", "<control>G", dialogs_gradient_editor_cmd_callback, NULL }, { "/File/Dialogs/Gradient Editor...", "<control>G", dialogs_gradient_editor_cmd_callback, 0 },
{ "<Toolbox>/File/Dialogs/Tool Options...", "<control><shift>T", dialogs_tools_options_cmd_callback, NULL }, { "/File/Dialogs/Tool Options...", "<control><shift>T", dialogs_tools_options_cmd_callback, 0 },
{ "<Toolbox>/File/Dialogs/Input Devices...", NULL, dialogs_input_devices_cmd_callback, NULL }, { "/File/Dialogs/Input Devices...", NULL, dialogs_input_devices_cmd_callback, 0 },
{ "<Toolbox>/File/Dialogs/Device Status...", NULL, dialogs_device_status_cmd_callback, NULL }, { "/File/Dialogs/Device Status...", NULL, dialogs_device_status_cmd_callback, 0 },
{ "/File/---", NULL, NULL, 0, "<Separator>" },
{ "<Toolbox>/File/<separator>",NULL,NULL,NULL}, { "/File/Quit", "<control>Q", file_quit_cmd_callback, 0 },
{ "<Toolbox>/File/Quit", "<control>Q", file_quit_cmd_callback, NULL },
{ "<Image>/File/New", "<control>N", file_new_cmd_callback, (gpointer) 1 },
{ "<Image>/File/Open", "<control>O", file_open_cmd_callback, NULL },
{ "<Image>/File/Save", "<control>S", file_save_cmd_callback, NULL },
{ "<Image>/File/Save as", NULL, file_save_as_cmd_callback, NULL },
{ "<Image>/File/Preferences...", NULL, file_pref_cmd_callback, NULL },
{ "<Image>/File/<separator>", NULL, NULL, NULL },
{ "<Image>/File/Close", "<control>W", file_close_cmd_callback, NULL },
{ "<Image>/File/Quit", "<control>Q", file_quit_cmd_callback, NULL },
{ "<Image>/File/<separator>", NULL, NULL, NULL },
{ "<Image>/Edit/Cut", "<control>X", edit_cut_cmd_callback, NULL },
{ "<Image>/Edit/Copy", "<control>C", edit_copy_cmd_callback, NULL },
{ "<Image>/Edit/Paste", "<control>V", edit_paste_cmd_callback, NULL },
{ "<Image>/Edit/Paste Into", NULL, edit_paste_into_cmd_callback, NULL },
{ "<Image>/Edit/Clear", "<control>K", edit_clear_cmd_callback, NULL },
{ "<Image>/Edit/Fill", "<control>.", edit_fill_cmd_callback, NULL },
{ "<Image>/Edit/Stroke", NULL, edit_stroke_cmd_callback, NULL },
{ "<Image>/Edit/Undo", "<control>Z", edit_undo_cmd_callback, NULL },
{ "<Image>/Edit/Redo", "<control>R", edit_redo_cmd_callback, NULL },
{ "<Image>/Edit/<separator>", NULL, NULL, NULL },
{ "<Image>/Edit/Cut Named", "<control><shift>X", edit_named_cut_cmd_callback, NULL },
{ "<Image>/Edit/Copy Named", "<control><shift>C", edit_named_copy_cmd_callback, NULL },
{ "<Image>/Edit/Paste Named", "<control><shift>V", edit_named_paste_cmd_callback, NULL },
{ "<Image>/Edit/<separator>", NULL, NULL, NULL },
{ "<Image>/Select/Toggle", "<control>T", select_toggle_cmd_callback, NULL },
{ "<Image>/Select/Invert", "<control>I", select_invert_cmd_callback, NULL },
{ "<Image>/Select/All", "<control>A", select_all_cmd_callback, NULL },
{ "<Image>/Select/None", "<control><shift>A", select_none_cmd_callback, NULL },
{ "<Image>/Select/Float", "<control><shift>L", select_float_cmd_callback, NULL },
{ "<Image>/Select/Sharpen", "<control><shift>H", select_sharpen_cmd_callback, NULL },
{ "<Image>/Select/Border", "<control><shift>B", select_border_cmd_callback, NULL },
{ "<Image>/Select/Feather", "<control><shift>F", select_feather_cmd_callback, NULL },
{ "<Image>/Select/Grow", NULL, select_grow_cmd_callback, NULL },
{ "<Image>/Select/Shrink", NULL, select_shrink_cmd_callback, NULL },
{ "<Image>/Select/Save To Channel", NULL, select_save_cmd_callback, NULL },
{ "<Image>/Select/By Color...", NULL, select_by_color_cmd_callback, NULL },
{ "<Image>/View/Zoom In", "=", view_zoomin_cmd_callback, NULL },
{ "<Image>/View/Zoom Out", "-", view_zoomout_cmd_callback, NULL },
{ "<Image>/View/Zoom/16:1", NULL, view_zoom_16_1_callback, NULL },
{ "<Image>/View/Zoom/8:1", NULL, view_zoom_8_1_callback, NULL },
{ "<Image>/View/Zoom/4:1", NULL, view_zoom_4_1_callback, NULL },
{ "<Image>/View/Zoom/2:1", NULL, view_zoom_2_1_callback, NULL },
{ "<Image>/View/Zoom/1:1", "1", view_zoom_1_1_callback, NULL },
{ "<Image>/View/Zoom/1:2", NULL, view_zoom_1_2_callback, NULL },
{ "<Image>/View/Zoom/1:4", NULL, view_zoom_1_4_callback, NULL },
{ "<Image>/View/Zoom/1:8", NULL, view_zoom_1_8_callback, NULL },
{ "<Image>/View/Zoom/1:16", NULL, view_zoom_1_16_callback, NULL },
{ "<Image>/View/Window Info...", "<control><shift>I", view_window_info_cmd_callback, NULL },
{ "<Image>/View/<check>Toggle Rulers", "<control><shift>R", view_toggle_rulers_cmd_callback, NULL },
{ "<Image>/View/<check>Toggle Guides", "<control><shift>T", view_toggle_guides_cmd_callback, NULL },
{ "<Image>/View/<check>Snap To Guides", NULL, view_snap_to_guides_cmd_callback, NULL },
{ "<Image>/View/<separator>", NULL, NULL, NULL },
{ "<Image>/View/New View", NULL, view_new_view_cmd_callback, NULL },
{ "<Image>/View/Shrink Wrap", "<control>E", view_shrink_wrap_cmd_callback, NULL },
{ "<Image>/Image/Colors/Equalize", NULL, image_equalize_cmd_callback, NULL },
{ "<Image>/Image/Colors/Invert", NULL, image_invert_cmd_callback, NULL },
{ "<Image>/Image/Colors/Posterize", NULL, image_posterize_cmd_callback, NULL },
{ "<Image>/Image/Colors/Threshold", NULL, image_threshold_cmd_callback, NULL },
{ "<Image>/Image/Colors/<separator>", NULL, NULL, NULL },
{ "<Image>/Image/Colors/Color Balance", NULL, image_color_balance_cmd_callback, NULL },
{ "<Image>/Image/Colors/Brightness-Contrast", NULL, image_brightness_contrast_cmd_callback, NULL },
{ "<Image>/Image/Colors/Hue-Saturation", NULL, image_hue_saturation_cmd_callback, NULL },
{ "<Image>/Image/Colors/Curves", NULL, image_curves_cmd_callback, NULL },
{ "<Image>/Image/Colors/Levels", NULL, image_levels_cmd_callback, NULL },
{ "<Image>/Image/Colors/<separator>", NULL, NULL, NULL },
{ "<Image>/Image/Colors/Desaturate", NULL, image_desaturate_cmd_callback, NULL },
{ "<Image>/Image/Channel Ops/Duplicate", "<control>D", channel_ops_duplicate_cmd_callback, NULL },
{ "<Image>/Image/Channel Ops/Offset", "<control><shift>O", channel_ops_offset_cmd_callback, NULL },
{ "<Image>/Image/Alpha/Add Alpha Channel", NULL, layers_add_alpha_channel_cmd_callback, NULL },
{ "<Image>/Image/<separator>", NULL, NULL, NULL },
{ "<Image>/Image/RGB", NULL, image_convert_rgb_cmd_callback, NULL },
{ "<Image>/Image/Grayscale", NULL, image_convert_grayscale_cmd_callback, NULL },
{ "<Image>/Image/Indexed", NULL, image_convert_indexed_cmd_callback, NULL },
{ "<Image>/Image/<separator>", NULL, NULL, NULL },
{ "<Image>/Image/Resize", NULL, image_resize_cmd_callback, NULL },
{ "<Image>/Image/Scale", NULL, image_scale_cmd_callback, NULL },
{ "<Image>/Image/<separator>", NULL, NULL, NULL },
{ "<Image>/Image/Histogram", NULL, image_histogram_cmd_callback, NULL },
{ "<Image>/Image/<separator>", NULL, NULL, NULL },
{ "<Image>/Layers/Layers & Channels...", "<control>L", dialogs_lc_cmd_callback, NULL },
{ "<Image>/Layers/Raise Layer", "<control>F", layers_raise_cmd_callback, NULL },
{ "<Image>/Layers/Lower Layer", "<control>B", layers_lower_cmd_callback, NULL },
{ "<Image>/Layers/Anchor Layer", "<control>H", layers_anchor_cmd_callback, NULL },
{ "<Image>/Layers/Merge Visible Layers", "<control>M", layers_merge_cmd_callback, NULL },
{ "<Image>/Layers/Flatten Image", NULL, layers_flatten_cmd_callback, NULL },
{ "<Image>/Layers/Alpha To Selection", NULL, layers_alpha_select_cmd_callback, NULL },
{ "<Image>/Layers/Mask To Selection", NULL, layers_mask_select_cmd_callback, NULL },
{ "<Image>/Layers/Add Alpha Channel", NULL, layers_add_alpha_channel_cmd_callback, NULL },
{ "<Image>/Tools/Rect Select", "R", tools_select_cmd_callback, (gpointer) RECT_SELECT },
{ "<Image>/Tools/Ellipse Select", "E", tools_select_cmd_callback, (gpointer) ELLIPSE_SELECT },
{ "<Image>/Tools/Free Select", "F", tools_select_cmd_callback, (gpointer) FREE_SELECT },
{ "<Image>/Tools/Fuzzy Select", "Z", tools_select_cmd_callback, (gpointer) FUZZY_SELECT },
{ "<Image>/Tools/Bezier Select", "B", tools_select_cmd_callback, (gpointer) BEZIER_SELECT },
{ "<Image>/Tools/Intelligent Scissors", "I", tools_select_cmd_callback, (gpointer) ISCISSORS },
{ "<Image>/Tools/Move", "M", tools_select_cmd_callback, (gpointer) MOVE },
{ "<Image>/Tools/Magnify", "<shift>M", tools_select_cmd_callback, (gpointer) MAGNIFY },
{ "<Image>/Tools/Crop", "<shift>C", tools_select_cmd_callback, (gpointer) CROP },
{ "<Image>/Tools/Transform", "<shift>T", tools_select_cmd_callback, (gpointer) ROTATE },
{ "<Image>/Tools/Flip", "<shift>F", tools_select_cmd_callback, (gpointer) FLIP_HORZ },
{ "<Image>/Tools/Text", "T", tools_select_cmd_callback, (gpointer) TEXT },
{ "<Image>/Tools/Color Picker", "O", tools_select_cmd_callback, (gpointer) COLOR_PICKER },
{ "<Image>/Tools/Bucket Fill", "<shift>B", tools_select_cmd_callback, (gpointer) BUCKET_FILL },
{ "<Image>/Tools/Blend", "L", tools_select_cmd_callback, (gpointer) BLEND },
{ "<Image>/Tools/Paintbrush", "P", tools_select_cmd_callback, (gpointer) PAINTBRUSH },
{ "<Image>/Tools/Pencil", "<shift>P", tools_select_cmd_callback, (gpointer) PENCIL },
{ "<Image>/Tools/Eraser", "<shift>E", tools_select_cmd_callback, (gpointer) ERASER },
{ "<Image>/Tools/Airbrush", "A", tools_select_cmd_callback, (gpointer) AIRBRUSH },
{ "<Image>/Tools/Clone", "C", tools_select_cmd_callback, (gpointer) CLONE },
{ "<Image>/Tools/Convolve", "V", tools_select_cmd_callback, (gpointer) CONVOLVE },
{ "<Image>/Tools/Default Colors", "D", tools_default_colors_cmd_callback, NULL},
{ "<Image>/Tools/Swap Colors", "X", tools_swap_colors_cmd_callback, NULL},
{ "<Image>/Tools/<separator>", NULL, NULL, NULL },
{ "<Image>/Tools/Toolbox", NULL, toolbox_raise_callback, NULL },
{ "<Image>/Filters/", NULL, NULL, NULL },
{ "<Image>/Filters/Repeat last", "<alt>F", filters_repeat_cmd_callback, (gpointer) 0x0 },
{ "<Image>/Filters/Re-show last", "<alt><shift>F", filters_repeat_cmd_callback, (gpointer)
0x1 },
{ "<Image>/Filters/<separator>", NULL, NULL, NULL },
{ "<Image>/Script-Fu/", NULL, NULL, NULL },
{ "<Image>/Dialogs/Brushes...", "<control><shift>B", dialogs_brushes_cmd_callback, NULL },
{ "<Image>/Dialogs/Patterns...", "<control><shift>P", dialogs_patterns_cmd_callback, NULL },
{ "<Image>/Dialogs/Palette...", "<control>P", dialogs_palette_cmd_callback, NULL },
{ "<Image>/Dialogs/Gradient Editor...", "<control>G", dialogs_gradient_editor_cmd_callback, NULL },
{ "<Image>/Dialogs/Layers & Channels...", "<control>L", dialogs_lc_cmd_callback, NULL },
{ "<Image>/Dialogs/Indexed Palette...", NULL, dialogs_indexed_palette_cmd_callback, NULL },
{ "<Image>/Dialogs/Tool Options...", NULL, dialogs_tools_options_cmd_callback, NULL },
{ "<Image>/Dialogs/Input Devices...", NULL, dialogs_input_devices_cmd_callback, NULL },
{ "<Image>/Dialogs/Device Status...", NULL, dialogs_device_status_cmd_callback, NULL },
{ "<Load>/Automatic", NULL, file_load_by_extension_callback, NULL },
{ "<Load>/<separator>", NULL, NULL, NULL },
{ "<Save>/By extension", NULL, file_save_by_extension_callback, NULL },
{ "<Save>/<separator>", NULL, NULL, NULL },
}; };
static int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); static guint n_toolbox_entries = sizeof (toolbox_entries) / sizeof (toolbox_entries[0]);
static GtkItemFactory *toolbox_factory = NULL;
static GtkItemFactoryEntry image_entries[] =
{
{ "/File/New", "<control>N", file_new_cmd_callback, 1 },
{ "/File/Open", "<control>O", file_open_cmd_callback, 0 },
{ "/File/Save", "<control>S", file_save_cmd_callback, 0 },
{ "/File/Save as", NULL, file_save_as_cmd_callback, 0 },
{ "/File/Preferences...", NULL, file_pref_cmd_callback, 0 },
{ "/File/---", NULL, NULL, 0, "<Separator>" },
{ "/File/Close", "<control>W", file_close_cmd_callback, 0 },
{ "/File/Quit", "<control>Q", file_quit_cmd_callback, 0 },
{ "/File/---", NULL, NULL, 0, "<Separator>" },
{ "/Edit/Cut", "<control>X", edit_cut_cmd_callback, 0 },
{ "/Edit/Copy", "<control>C", edit_copy_cmd_callback, 0 },
{ "/Edit/Paste", "<control>V", edit_paste_cmd_callback, 0 },
{ "/Edit/Paste Into", NULL, edit_paste_into_cmd_callback, 0 },
{ "/Edit/Clear", "<control>K", edit_clear_cmd_callback, 0 },
{ "/Edit/Fill", "<control>.", edit_fill_cmd_callback, 0 },
{ "/Edit/Stroke", NULL, edit_stroke_cmd_callback, 0 },
{ "/Edit/Undo", "<control>Z", edit_undo_cmd_callback, 0 },
{ "/Edit/Redo", "<control>R", edit_redo_cmd_callback, 0 },
{ "/Edit/<Separator>", NULL, NULL, 0 },
{ "/Edit/Cut Named", "<control><shift>X", edit_named_cut_cmd_callback, 0 },
{ "/Edit/Copy Named", "<control><shift>C", edit_named_copy_cmd_callback, 0 },
{ "/Edit/Paste Named", "<control><shift>V", edit_named_paste_cmd_callback, 0 },
{ "/Edit/---", NULL, NULL, 0, "<Separator>" },
{ "/Select/Toggle", "<control>T", select_toggle_cmd_callback, 0 },
{ "/Select/Invert", "<control>I", select_invert_cmd_callback, 0 },
{ "/Select/All", "<control>A", select_all_cmd_callback, 0 },
{ "/Select/None", "<control><shift>A", select_none_cmd_callback, 0 },
{ "/Select/Float", "<control><shift>L", select_float_cmd_callback, 0 },
{ "/Select/Sharpen", "<control><shift>H", select_sharpen_cmd_callback, 0 },
{ "/Select/Border", "<control><shift>B", select_border_cmd_callback, 0 },
{ "/Select/Feather", "<control><shift>F", select_feather_cmd_callback, 0 },
{ "/Select/Grow", NULL, select_grow_cmd_callback, 0 },
{ "/Select/Shrink", NULL, select_shrink_cmd_callback, 0 },
{ "/Select/Save To Channel", NULL, select_save_cmd_callback, 0 },
{ "/Select/By Color...", NULL, select_by_color_cmd_callback, 0 },
{ "/View/Zoom In", "=", view_zoomin_cmd_callback, 0 },
{ "/View/Zoom Out", "-", view_zoomout_cmd_callback, 0 },
{ "/View/Zoom/16:1", NULL, view_zoom_16_1_callback, 0 },
{ "/View/Zoom/8:1", NULL, view_zoom_8_1_callback, 0 },
{ "/View/Zoom/4:1", NULL, view_zoom_4_1_callback, 0 },
{ "/View/Zoom/2:1", NULL, view_zoom_2_1_callback, 0 },
{ "/View/Zoom/1:1", "1", view_zoom_1_1_callback, 0 },
{ "/View/Zoom/1:2", NULL, view_zoom_1_2_callback, 0 },
{ "/View/Zoom/1:4", NULL, view_zoom_1_4_callback, 0 },
{ "/View/Zoom/1:8", NULL, view_zoom_1_8_callback, 0 },
{ "/View/Zoom/1:16", NULL, view_zoom_1_16_callback, 0 },
{ "/View/Window Info...", "<control><shift>I", view_window_info_cmd_callback, 0 },
{ "/View/Toggle Rulers", "<control><shift>R", view_toggle_rulers_cmd_callback, 0, "<ToggleItem>" },
{ "/View/Toggle Guides", "<control><shift>T", view_toggle_guides_cmd_callback, 0, "<ToggleItem>" },
{ "/View/Snap To Guides", NULL, view_snap_to_guides_cmd_callback, 0, "<ToggleItem>" },
{ "/View/---", NULL, NULL, 0, "<Separator>" },
{ "/View/New View", NULL, view_new_view_cmd_callback, 0 },
{ "/View/Shrink Wrap", "<control>E", view_shrink_wrap_cmd_callback, 0 },
{ "/Image/Colors/Equalize", NULL, image_equalize_cmd_callback, 0 },
{ "/Image/Colors/Invert", NULL, image_invert_cmd_callback, 0 },
{ "/Image/Colors/Posterize", NULL, image_posterize_cmd_callback, 0 },
{ "/Image/Colors/Threshold", NULL, image_threshold_cmd_callback, 0 },
{ "/Image/Colors/---", NULL, NULL, 0, "<Separator>" },
{ "/Image/Colors/Color Balance", NULL, image_color_balance_cmd_callback, 0 },
{ "/Image/Colors/Brightness-Contrast", NULL, image_brightness_contrast_cmd_callback, 0 },
{ "/Image/Colors/Hue-Saturation", NULL, image_hue_saturation_cmd_callback, 0 },
{ "/Image/Colors/Curves", NULL, image_curves_cmd_callback, 0 },
{ "/Image/Colors/Levels", NULL, image_levels_cmd_callback, 0 },
{ "/Image/Colors/---", NULL, NULL, 0, "<Separator>" },
{ "/Image/Colors/Desaturate", NULL, image_desaturate_cmd_callback, 0 },
{ "/Image/Channel Ops/Duplicate", "<control>D", channel_ops_duplicate_cmd_callback, 0 },
{ "/Image/Channel Ops/Offset", "<control><shift>O", channel_ops_offset_cmd_callback, 0 },
{ "/Image/Alpha/Add Alpha Channel", NULL, layers_add_alpha_channel_cmd_callback, 0 },
{ "/Image/---", NULL, NULL, 0, "<Separator>" },
{ "/Image/RGB", NULL, image_convert_rgb_cmd_callback, 0 },
{ "/Image/Grayscale", NULL, image_convert_grayscale_cmd_callback, 0 },
{ "/Image/Indexed", NULL, image_convert_indexed_cmd_callback, 0 },
{ "/Image/---", NULL, NULL, 0, "<Separator>" },
{ "/Image/Resize", NULL, image_resize_cmd_callback, 0 },
{ "/Image/Scale", NULL, image_scale_cmd_callback, 0 },
{ "/Image/---", NULL, NULL, 0, "<Separator>" },
{ "/Image/Histogram", NULL, image_histogram_cmd_callback, 0 },
{ "/Image/---", NULL, NULL, 0, "<Separator>" },
{ "/Layers/Layers & Channels...", "<control>L", dialogs_lc_cmd_callback, 0 },
{ "/Layers/Raise Layer", "<control>F", layers_raise_cmd_callback, 0 },
{ "/Layers/Lower Layer", "<control>B", layers_lower_cmd_callback, 0 },
{ "/Layers/Anchor Layer", "<control>H", layers_anchor_cmd_callback, 0 },
{ "/Layers/Merge Visible Layers", "<control>M", layers_merge_cmd_callback, 0 },
{ "/Layers/Flatten Image", NULL, layers_flatten_cmd_callback, 0 },
{ "/Layers/Alpha To Selection", NULL, layers_alpha_select_cmd_callback, 0 },
{ "/Layers/Mask To Selection", NULL, layers_mask_select_cmd_callback, 0 },
{ "/Layers/Add Alpha Channel", NULL, layers_add_alpha_channel_cmd_callback, 0 },
{ "/Tools/Rect Select", "R", tools_select_cmd_callback, RECT_SELECT },
{ "/Tools/Ellipse Select", "E", tools_select_cmd_callback, ELLIPSE_SELECT },
{ "/Tools/Free Select", "F", tools_select_cmd_callback, FREE_SELECT },
{ "/Tools/Fuzzy Select", "Z", tools_select_cmd_callback, FUZZY_SELECT },
{ "/Tools/Bezier Select", "B", tools_select_cmd_callback, BEZIER_SELECT },
{ "/Tools/Intelligent Scissors", "I", tools_select_cmd_callback, ISCISSORS },
{ "/Tools/Move", "M", tools_select_cmd_callback, MOVE },
{ "/Tools/Magnify", "<shift>M", tools_select_cmd_callback, MAGNIFY },
{ "/Tools/Crop", "<shift>C", tools_select_cmd_callback, CROP },
{ "/Tools/Transform", "<shift>T", tools_select_cmd_callback, ROTATE },
{ "/Tools/Flip", "<shift>F", tools_select_cmd_callback, FLIP_HORZ },
{ "/Tools/Text", "T", tools_select_cmd_callback, TEXT },
{ "/Tools/Color Picker", "O", tools_select_cmd_callback, COLOR_PICKER },
{ "/Tools/Bucket Fill", "<shift>B", tools_select_cmd_callback, BUCKET_FILL },
{ "/Tools/Blend", "L", tools_select_cmd_callback, BLEND },
{ "/Tools/Paintbrush", "P", tools_select_cmd_callback, PAINTBRUSH },
{ "/Tools/Pencil", "<shift>P", tools_select_cmd_callback, PENCIL },
{ "/Tools/Eraser", "<shift>E", tools_select_cmd_callback, ERASER },
{ "/Tools/Airbrush", "A", tools_select_cmd_callback, AIRBRUSH },
{ "/Tools/Clone", "C", tools_select_cmd_callback, CLONE },
{ "/Tools/Convolve", "V", tools_select_cmd_callback, CONVOLVE },
{ "/Tools/Default Colors", "D", tools_default_colors_cmd_callback, 0 },
{ "/Tools/Swap Colors", "X", tools_swap_colors_cmd_callback, 0 },
{ "/Tools/---", NULL, NULL, 0, "<Separator>" },
{ "/Tools/Toolbox", NULL, toolbox_raise_callback, 0 },
{ "/Filters/", NULL, NULL, 0 },
{ "/Filters/Repeat last", "<alt>F", filters_repeat_cmd_callback, 0x0 },
{ "/Filters/Re-show last", "<alt><shift>F", filters_repeat_cmd_callback, 0x1 },
{ "/Filters/---", NULL, NULL, 0, "<Separator>" },
{ "/Script-Fu/", NULL, NULL, 0 },
{ "/Dialogs/Brushes...", "<control><shift>B", dialogs_brushes_cmd_callback, 0 },
{ "/Dialogs/Patterns...", "<control><shift>P", dialogs_patterns_cmd_callback, 0 },
{ "/Dialogs/Palette...", "<control>P", dialogs_palette_cmd_callback, 0 },
{ "/Dialogs/Gradient Editor...", "<control>G", dialogs_gradient_editor_cmd_callback, 0 },
{ "/Dialogs/Layers & Channels...", "<control>L", dialogs_lc_cmd_callback, 0 },
{ "/Dialogs/Indexed Palette...", NULL, dialogs_indexed_palette_cmd_callback, 0 },
{ "/Dialogs/Tool Options...", NULL, dialogs_tools_options_cmd_callback, 0 },
{ "/Dialogs/Input Devices...", NULL, dialogs_input_devices_cmd_callback, 0 },
{ "/Dialogs/Device Status...", NULL, dialogs_device_status_cmd_callback, 0 },
};
static guint n_image_entries = sizeof (image_entries) / sizeof (image_entries[0]);
static GtkItemFactory *image_factory = NULL;
static GtkItemFactoryEntry load_entries[] =
{
{ "/Automatic", NULL, file_load_by_extension_callback, 0 },
{ "/---", NULL, NULL, 0, "<Separator>" },
};
static guint n_load_entries = sizeof (load_entries) / sizeof (load_entries[0]);
static GtkItemFactory *load_factory = NULL;
static GtkItemFactoryEntry save_entries[] =
{
{ "/By extension", NULL, file_save_by_extension_callback, 0 },
{ "/---", NULL, NULL, 0, "<Separator>" },
};
static guint n_save_entries = sizeof (save_entries) / sizeof (save_entries[0]);
static GtkItemFactory *save_factory = NULL;
static int initialize = TRUE; static int initialize = TRUE;
static GtkMenuFactory *factory = NULL;
static GtkMenuFactory *subfactories[4];
static GHashTable *entry_ht = NULL;
void void
menus_get_toolbox_menubar (GtkWidget **menubar, menus_get_toolbox_menubar (GtkWidget **menubar,
GtkAcceleratorTable **table) GtkAccelGroup **accel_group)
{ {
if (initialize) if (initialize)
menus_init (); menus_init ();
if (menubar) if (menubar)
*menubar = subfactories[0]->widget; *menubar = toolbox_factory->widget;
if (table) if (accel_group)
*table = subfactories[0]->table; *accel_group = toolbox_factory->accel_group;
} }
void void
menus_get_image_menu (GtkWidget **menu, menus_get_image_menu (GtkWidget **menu,
GtkAcceleratorTable **table) GtkAccelGroup **accel_group)
{ {
if (initialize) if (initialize)
menus_init (); menus_init ();
if (menu) if (menu)
*menu = subfactories[1]->widget; *menu = image_factory->widget;
if (table) if (accel_group)
*table = subfactories[1]->table; *accel_group = image_factory->accel_group;
} }
void void
menus_get_load_menu (GtkWidget **menu, menus_get_load_menu (GtkWidget **menu,
GtkAcceleratorTable **table) GtkAccelGroup **accel_group)
{ {
if (initialize) if (initialize)
menus_init (); menus_init ();
if (menu) if (menu)
*menu = subfactories[2]->widget; *menu = load_factory->widget;
if (table) if (accel_group)
*table = subfactories[2]->table; *accel_group = load_factory->accel_group;
} }
void void
menus_get_save_menu (GtkWidget **menu, menus_get_save_menu (GtkWidget **menu,
GtkAcceleratorTable **table) GtkAccelGroup **accel_group)
{ {
if (initialize) if (initialize)
menus_init (); menus_init ();
if (menu) if (menu)
*menu = subfactories[3]->widget; *menu = save_factory->widget;
if (table) if (accel_group)
*table = subfactories[3]->table; *accel_group = save_factory->accel_group;
} }
void void
menus_create (GtkMenuEntry *entries, menus_create (GtkMenuEntry *entries,
int nmenu_entries) int nmenu_entries)
{ {
char *accelerator;
int i;
if (initialize) if (initialize)
menus_init (); menus_init ();
if (entry_ht) gtk_item_factory_create_menu_entries (nmenu_entries, entries);
for (i = 0; i < nmenu_entries; i++)
{
accelerator = g_hash_table_lookup (entry_ht, entries[i].path);
if (accelerator)
{
if (accelerator[0] == '\0')
entries[i].accelerator = NULL;
else
entries[i].accelerator = accelerator;
}
}
gtk_menu_factory_add_entries (factory, entries, nmenu_entries);
for (i = 0; i < nmenu_entries; i++)
if (entries[i].widget && GTK_BIN (entries[i].widget)->child)
{
gtk_signal_connect (GTK_OBJECT (entries[i].widget), "install_accelerator",
(GtkSignalFunc) menus_install_accel,
entries[i].path);
gtk_signal_connect (GTK_OBJECT (entries[i].widget), "remove_accelerator",
(GtkSignalFunc) menus_remove_accel,
entries[i].path);
}
} }
void void
menus_set_sensitive (char *path, menus_set_sensitive (char *path,
int sensitive) int sensitive)
{ {
GtkMenuPath *menu_path; GtkItemFactory *ifactory;
GtkWidget *widget = NULL;
if (initialize) if (initialize)
menus_init (); menus_init ();
menu_path = gtk_menu_factory_find (factory, path); ifactory = gtk_item_factory_from_path (path);
if (menu_path)
gtk_widget_set_sensitive (menu_path->widget, sensitive); if (ifactory)
else {
g_message ("Unable to set sensitivity for menu which doesn't exist: %s", path); widget = gtk_item_factory_get_widget (ifactory, path);
gtk_widget_set_sensitive (widget, sensitive);
}
if (!ifactory || !widget)
printf ("Unable to set sensitivity for menu which doesn't exist:\n%s", path);
} }
void void
menus_set_state (char *path, menus_set_state (char *path,
int state) int state)
{ {
GtkMenuPath *menu_path; GtkItemFactory *ifactory;
GtkWidget *widget = NULL;
if (initialize) if (initialize)
menus_init (); menus_init ();
menu_path = gtk_menu_factory_find (factory, path); ifactory = gtk_item_factory_from_path (path);
if (menu_path)
if (ifactory)
{ {
if (GTK_IS_CHECK_MENU_ITEM (menu_path->widget)) widget = gtk_item_factory_get_widget (ifactory, path);
gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (menu_path->widget), state);
if (widget && GTK_IS_CHECK_MENU_ITEM (widget))
gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (widget), state);
else
widget = NULL;
} }
else if (!ifactory || !widget)
g_message ("Unable to set state for menu which doesn't exist: %s", path); printf ("Unable to set state for menu which doesn't exist:\n%s", path);
}
void
menus_add_path (char *path,
char *accelerator)
{
if (!entry_ht)
entry_ht = g_hash_table_new (g_str_hash, g_str_equal);
g_hash_table_insert (entry_ht, path, accelerator);
} }
void void
@ -358,35 +332,24 @@ menus_destroy (char *path)
if (initialize) if (initialize)
menus_init (); menus_init ();
gtk_menu_factory_remove_paths (factory, &path, 1); gtk_item_factories_path_delete (NULL, path);
} }
void void
menus_quit () menus_quit ()
{ {
FILE *fp; gchar *filename;
char filename[512];
char *gimp_dir; filename = g_strconcat (gimp_directory (), "/menurc", NULL);
gtk_item_factory_dump_rc (filename, NULL, TRUE);
g_free (filename);
if (entry_ht)
{
gimp_dir = gimp_directory ();
if ('\000' != gimp_dir[0])
{
sprintf (filename, "%s/menurc", gimp_dir);
fp = fopen (filename, "w");
if (fp)
{
g_hash_table_foreach (entry_ht, menus_foreach, fp);
fclose (fp);
}
}
}
if (!initialize) if (!initialize)
{ {
gtk_menu_factory_destroy (factory); gtk_object_destroy (GTK_OBJECT (toolbox_factory));
gtk_object_destroy (GTK_OBJECT (image_factory));
gtk_object_destroy (GTK_OBJECT (load_factory));
gtk_object_destroy (GTK_OBJECT (save_factory));
} }
} }
@ -395,101 +358,35 @@ menus_quit ()
static void static void
menus_init () menus_init ()
{ {
char filename[512];
if (initialize) if (initialize)
{ {
gchar *filename;
initialize = FALSE; initialize = FALSE;
factory = gtk_menu_factory_new (GTK_MENU_FACTORY_MENU_BAR); toolbox_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<Toolbox>", NULL);
gtk_item_factory_create_items_ac (toolbox_factory,
n_toolbox_entries,
toolbox_entries,
NULL, 2);
image_factory = gtk_item_factory_new (GTK_TYPE_MENU, "<Image>", NULL);
gtk_item_factory_create_items_ac (image_factory,
n_image_entries,
image_entries,
NULL, 2);
load_factory = gtk_item_factory_new (GTK_TYPE_MENU, "<Load>", NULL);
gtk_item_factory_create_items_ac (load_factory,
n_load_entries,
load_entries,
NULL, 2);
save_factory = gtk_item_factory_new (GTK_TYPE_MENU, "<Save>", NULL);
gtk_item_factory_create_items_ac (save_factory,
n_save_entries,
save_entries,
NULL, 2);
subfactories[0] = gtk_menu_factory_new (GTK_MENU_FACTORY_MENU_BAR); filename = g_strconcat (gimp_directory (), "/menurc", NULL);
gtk_menu_factory_add_subfactory (factory, subfactories[0], "<Toolbox>"); gtk_item_factory_parse_rc (filename);
g_free (filename);
subfactories[1] = gtk_menu_factory_new (GTK_MENU_FACTORY_MENU);
gtk_menu_factory_add_subfactory (factory, subfactories[1], "<Image>");
subfactories[2] = gtk_menu_factory_new (GTK_MENU_FACTORY_MENU);
gtk_menu_factory_add_subfactory (factory, subfactories[2], "<Load>");
subfactories[3] = gtk_menu_factory_new (GTK_MENU_FACTORY_MENU);
gtk_menu_factory_add_subfactory (factory, subfactories[3], "<Save>");
sprintf (filename, "%s/menurc", gimp_directory ());
parse_gimprc_file (filename);
menus_create (menu_items, nmenu_items);
} }
} }
static void
menus_foreach (gpointer key,
gpointer value,
gpointer user_data)
{
char accel[64];
int i, j;
for (i = j = 0; ((char*) value)[i] != '\0'; i++, j++)
{
if (((char *) value)[i] == '"' || ((char *) value)[i] == '\\')
accel[j++] = '\\';
accel[j] = ((char *) value)[i];
}
accel[j] = '\0';
fprintf ((FILE*) user_data, "(menu-path \"%s\" \"%s\")\n", (char*) key, accel);
}
static gint
menus_install_accel (GtkWidget *widget,
gchar *signal_name,
gchar key,
gchar modifiers,
gchar *path)
{
char accel[64];
char *t1, t2[2];
accel[0] = '\0';
if (modifiers & GDK_CONTROL_MASK)
strcat (accel, "<control>");
if (modifiers & GDK_SHIFT_MASK)
strcat (accel, "<shift>");
if (modifiers & GDK_MOD1_MASK)
strcat (accel, "<alt>");
t2[0] = key;
t2[1] = '\0';
strcat (accel, t2);
if (entry_ht)
{
t1 = g_hash_table_lookup (entry_ht, path);
g_free (t1);
}
else
entry_ht = g_hash_table_new (g_str_hash, g_str_equal);
g_hash_table_insert (entry_ht, path, g_strdup (accel));
return TRUE;
}
static void
menus_remove_accel (GtkWidget *widget,
gchar *signal_name,
gchar *path)
{
char *t;
if (entry_ht)
{
t = g_hash_table_lookup (entry_ht, path);
g_free (t);
g_hash_table_insert (entry_ht, path, g_strdup (""));
}
}

View File

@ -23,21 +23,19 @@
void menus_get_toolbox_menubar (GtkWidget **menubar, void menus_get_toolbox_menubar (GtkWidget **menubar,
GtkAcceleratorTable **table); GtkAccelGroup **accel_group);
void menus_get_image_menu (GtkWidget **menu, void menus_get_image_menu (GtkWidget **menu,
GtkAcceleratorTable **table); GtkAccelGroup **accel_group);
void menus_get_load_menu (GtkWidget **menu, void menus_get_load_menu (GtkWidget **menu,
GtkAcceleratorTable **table); GtkAccelGroup **accel_group);
void menus_get_save_menu (GtkWidget **menu, void menus_get_save_menu (GtkWidget **menu,
GtkAcceleratorTable **table); GtkAccelGroup **accel_group);
void menus_create (GtkMenuEntry *entries, void menus_create (GtkMenuEntry *entries,
int nmenu_entries); int nmenu_entries);
void menus_set_sensitive (char *path, void menus_set_sensitive (char *path,
int sensitive); int sensitive);
void menus_set_state (char *path, void menus_set_state (char *path,
int state); int state);
void menus_add_path (char *path,
char *accelerator);
void menus_destroy (char *path); void menus_destroy (char *path);
void menus_quit (void); void menus_quit (void);

View File

@ -320,7 +320,7 @@ typedef struct {
GtkWidget *control_coloring_popup; /* Coloring type menu */ GtkWidget *control_coloring_popup; /* Coloring type menu */
GtkWidget *control_sel_ops_popup; /* Selection ops menu */ GtkWidget *control_sel_ops_popup; /* Selection ops menu */
GtkAcceleratorTable *accelerator_table; GtkAccelGroup *accel_group;
/* Blending and coloring menus */ /* Blending and coloring menus */
@ -1015,7 +1015,7 @@ grad_create_gradient_editor(void)
g_editor->control_coloring_popup = NULL; g_editor->control_coloring_popup = NULL;
g_editor->control_sel_ops_popup = NULL; g_editor->control_sel_ops_popup = NULL;
g_editor->accelerator_table = NULL; g_editor->accel_group = NULL;
for (i = 0; for (i = 0;
i < (sizeof(g_editor->control_blending_items) / sizeof(g_editor->control_blending_items[0])); i < (sizeof(g_editor->control_blending_items) / sizeof(g_editor->control_blending_items[0]));
@ -2871,16 +2871,15 @@ cpopup_create_main_menu(void)
GtkWidget *menu; GtkWidget *menu;
GtkWidget *menuitem; GtkWidget *menuitem;
GtkWidget *label; GtkWidget *label;
GtkAcceleratorTable *acc_table; GtkAccelGroup *accel_group;
menu = gtk_menu_new(); menu = gtk_menu_new();
acc_table = gtk_accelerator_table_new(); accel_group = gtk_accel_group_new();
g_editor->accelerator_table = acc_table; g_editor->accel_group = accel_group;
gtk_menu_set_accelerator_table(GTK_MENU(menu), acc_table); gtk_menu_set_accel_group (GTK_MENU(menu), accel_group);
gtk_window_add_accelerator_table(GTK_WINDOW(g_editor->shell), acc_table); gtk_window_add_accel_group (GTK_WINDOW (g_editor->shell), accel_group);
gtk_window_add_accelerator_table(GTK_WINDOW(g_editor->shell), acc_table);
/* Left endpoint */ /* Left endpoint */
@ -2891,7 +2890,11 @@ cpopup_create_main_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'L', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'L', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menuitem = gtk_menu_item_new_with_label("Load from"); menuitem = gtk_menu_item_new_with_label("Load from");
g_editor->control_left_load_popup = cpopup_create_load_menu(g_editor->left_load_color_boxes, g_editor->control_left_load_popup = cpopup_create_load_menu(g_editor->left_load_color_boxes,
@ -2929,7 +2932,11 @@ cpopup_create_main_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'R', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'R', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menuitem = gtk_menu_item_new_with_label("Load from"); menuitem = gtk_menu_item_new_with_label("Load from");
g_editor->control_right_load_popup = cpopup_create_load_menu(g_editor->right_load_color_boxes, g_editor->control_right_load_popup = cpopup_create_load_menu(g_editor->right_load_color_boxes,
@ -2988,7 +2995,11 @@ cpopup_create_main_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'S', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'S', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Split uniformly */ /* Split uniformly */
@ -2998,7 +3009,11 @@ cpopup_create_main_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'U', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'U', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Delete */ /* Delete */
@ -3009,7 +3024,11 @@ cpopup_create_main_menu(void)
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
g_editor->control_delete_menu_item = menuitem; g_editor->control_delete_menu_item = menuitem;
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'D', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'D', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Recenter */ /* Recenter */
@ -3019,7 +3038,11 @@ cpopup_create_main_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'C', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'C', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Redistribute */ /* Redistribute */
@ -3029,7 +3052,11 @@ cpopup_create_main_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'C', GDK_CONTROL_MASK); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'C', GDK_CONTROL_MASK,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Selection ops */ /* Selection ops */
@ -3376,17 +3403,18 @@ static GtkWidget *
cpopup_create_menu_item_with_label(char *str, GtkWidget **label) cpopup_create_menu_item_with_label(char *str, GtkWidget **label)
{ {
GtkWidget *menuitem; GtkWidget *menuitem;
GtkWidget *wlabel; GtkWidget *accel_label;
menuitem = gtk_menu_item_new(); menuitem = gtk_menu_item_new();
wlabel = gtk_label_new(str); accel_label = gtk_accel_label_new(str);
gtk_misc_set_alignment(GTK_MISC(wlabel), 0.0, 0.5); gtk_misc_set_alignment(GTK_MISC(accel_label), 0.0, 0.5);
gtk_container_add(GTK_CONTAINER(menuitem), wlabel); gtk_container_add(GTK_CONTAINER(menuitem), accel_label);
gtk_widget_show(wlabel); gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (accel_label), menuitem);
gtk_widget_show(accel_label);
if (label) if (label)
*label = wlabel; *label = accel_label;
return menuitem; return menuitem;
} /* cpopup_create_menu_item_with_label */ } /* cpopup_create_menu_item_with_label */
@ -3476,13 +3504,13 @@ cpopup_create_load_menu(GtkWidget **color_boxes, GtkWidget **labels,
{ {
GtkWidget *menu; GtkWidget *menu;
GtkWidget *menuitem; GtkWidget *menuitem;
GtkAcceleratorTable *acc_table; GtkAccelGroup *accel_group;
int i; int i;
menu = gtk_menu_new(); menu = gtk_menu_new();
acc_table = g_editor->accelerator_table; accel_group = g_editor->accel_group;
gtk_menu_set_accelerator_table(GTK_MENU(menu), acc_table); gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
/* Create items */ /* Create items */
@ -3502,23 +3530,32 @@ cpopup_create_load_menu(GtkWidget **color_boxes, GtkWidget **labels,
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
switch (i) { switch (i) {
case 0: case 0:
gtk_widget_install_accelerator(menuitem, acc_table, "activate", gtk_widget_add_accelerator(menuitem,
accel_key_0, accel_mods_0); "activate",
break; accel_group,
accel_key_0, accel_mods_0,
case 1: GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", break;
accel_key_1, accel_mods_1);
break; case 1:
gtk_widget_add_accelerator(menuitem,
case 2: "activate",
gtk_widget_install_accelerator(menuitem, acc_table, "activate", accel_group,
accel_key_2, accel_mods_2); accel_key_1, accel_mods_1,
break; GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
break;
default:
break; case 2:
gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
accel_key_2, accel_mods_2,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
break;
default:
break;
} /* switch */ } /* switch */
} /* for */ } /* for */
@ -3886,12 +3923,12 @@ cpopup_create_sel_ops_menu(void)
{ {
GtkWidget *menu; GtkWidget *menu;
GtkWidget *menuitem; GtkWidget *menuitem;
GtkAcceleratorTable *acc_table; GtkAccelGroup *accel_group;
menu = gtk_menu_new(); menu = gtk_menu_new();
acc_table = g_editor->accelerator_table; accel_group = g_editor->accel_group;
gtk_menu_set_accelerator_table(GTK_MENU(menu), acc_table); gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
/* Flip */ /* Flip */
@ -3901,7 +3938,11 @@ cpopup_create_sel_ops_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'F', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'F', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Replicate */ /* Replicate */
@ -3911,7 +3952,11 @@ cpopup_create_sel_ops_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'M', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'M', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
/* Blend colors / opacity */ /* Blend colors / opacity */
@ -3926,7 +3971,11 @@ cpopup_create_sel_ops_menu(void)
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
g_editor->control_blend_colors_menu_item = menuitem; g_editor->control_blend_colors_menu_item = menuitem;
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'B', 0); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'B', 0,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
menuitem = gtk_menu_item_new_with_label("Blend endpoints' opacity"); menuitem = gtk_menu_item_new_with_label("Blend endpoints' opacity");
gtk_signal_connect(GTK_OBJECT(menuitem), "activate", gtk_signal_connect(GTK_OBJECT(menuitem), "activate",
@ -3934,7 +3983,11 @@ cpopup_create_sel_ops_menu(void)
NULL); NULL);
gtk_menu_append(GTK_MENU(menu), menuitem); gtk_menu_append(GTK_MENU(menu), menuitem);
gtk_widget_show(menuitem); gtk_widget_show(menuitem);
gtk_widget_install_accelerator(menuitem, acc_table, "activate", 'B', GDK_CONTROL_MASK); gtk_widget_add_accelerator(menuitem,
"activate",
accel_group,
'B', GDK_CONTROL_MASK,
GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
g_editor->control_blend_opacity_menu_item = menuitem; g_editor->control_blend_opacity_menu_item = menuitem;
return menu; return menu;

View File

@ -32,324 +32,298 @@
#include "gdisplay.h" #include "gdisplay.h"
static void menus_init (void); static void menus_init (void);
static void menus_foreach (gpointer key,
gpointer value,
gpointer user_data);
static gint menus_install_accel (GtkWidget *widget,
gchar *signal_name,
gchar key,
gchar modifiers,
gchar *path);
static void menus_remove_accel (GtkWidget *widget,
gchar *signal_name,
gchar *path);
static GtkMenuEntry menu_items[] = static GtkItemFactoryEntry toolbox_entries[] =
{ {
{ "<Toolbox>/File/New", "<control>N", file_new_cmd_callback, NULL }, { "/File/New", "<control>N", file_new_cmd_callback, 0 },
{ "<Toolbox>/File/Open", "<control>O", file_open_cmd_callback, NULL }, { "/File/Open", "<control>O", file_open_cmd_callback, 0 },
{ "<Toolbox>/File/About...", NULL, about_dialog_cmd_callback, NULL }, { "/File/About...", NULL, about_dialog_cmd_callback, 0 },
{ "<Toolbox>/File/Preferences...", NULL, file_pref_cmd_callback, NULL }, { "/File/Preferences...", NULL, file_pref_cmd_callback, 0 },
{ "<Toolbox>/File/Tip of the day", NULL, tips_dialog_cmd_callback, NULL }, { "/File/Tip of the day", NULL, tips_dialog_cmd_callback, 0 },
{ "<Toolbox>/File/<separator>", NULL, NULL, NULL }, { "/File/---", NULL, NULL, 0, "<Separator>" },
{ "<Toolbox>/File/Dialogs/Brushes...", "<control><shift>B", dialogs_brushes_cmd_callback, NULL }, { "/File/Dialogs/Brushes...", "<control><shift>B", dialogs_brushes_cmd_callback, 0 },
{ "<Toolbox>/File/Dialogs/Patterns...", "<control><shift>P", dialogs_patterns_cmd_callback, NULL }, { "/File/Dialogs/Patterns...", "<control><shift>P", dialogs_patterns_cmd_callback, 0 },
{ "<Toolbox>/File/Dialogs/Palette...", "<control>P", dialogs_palette_cmd_callback, NULL }, { "/File/Dialogs/Palette...", "<control>P", dialogs_palette_cmd_callback, 0 },
{ "<Toolbox>/File/Dialogs/Gradient Editor...", "<control>G", dialogs_gradient_editor_cmd_callback, NULL }, { "/File/Dialogs/Gradient Editor...", "<control>G", dialogs_gradient_editor_cmd_callback, 0 },
{ "<Toolbox>/File/Dialogs/Tool Options...", "<control><shift>T", dialogs_tools_options_cmd_callback, NULL }, { "/File/Dialogs/Tool Options...", "<control><shift>T", dialogs_tools_options_cmd_callback, 0 },
{ "<Toolbox>/File/Dialogs/Input Devices...", NULL, dialogs_input_devices_cmd_callback, NULL }, { "/File/Dialogs/Input Devices...", NULL, dialogs_input_devices_cmd_callback, 0 },
{ "<Toolbox>/File/Dialogs/Device Status...", NULL, dialogs_device_status_cmd_callback, NULL }, { "/File/Dialogs/Device Status...", NULL, dialogs_device_status_cmd_callback, 0 },
{ "/File/---", NULL, NULL, 0, "<Separator>" },
{ "<Toolbox>/File/<separator>",NULL,NULL,NULL}, { "/File/Quit", "<control>Q", file_quit_cmd_callback, 0 },
{ "<Toolbox>/File/Quit", "<control>Q", file_quit_cmd_callback, NULL },
{ "<Image>/File/New", "<control>N", file_new_cmd_callback, (gpointer) 1 },
{ "<Image>/File/Open", "<control>O", file_open_cmd_callback, NULL },
{ "<Image>/File/Save", "<control>S", file_save_cmd_callback, NULL },
{ "<Image>/File/Save as", NULL, file_save_as_cmd_callback, NULL },
{ "<Image>/File/Preferences...", NULL, file_pref_cmd_callback, NULL },
{ "<Image>/File/<separator>", NULL, NULL, NULL },
{ "<Image>/File/Close", "<control>W", file_close_cmd_callback, NULL },
{ "<Image>/File/Quit", "<control>Q", file_quit_cmd_callback, NULL },
{ "<Image>/File/<separator>", NULL, NULL, NULL },
{ "<Image>/Edit/Cut", "<control>X", edit_cut_cmd_callback, NULL },
{ "<Image>/Edit/Copy", "<control>C", edit_copy_cmd_callback, NULL },
{ "<Image>/Edit/Paste", "<control>V", edit_paste_cmd_callback, NULL },
{ "<Image>/Edit/Paste Into", NULL, edit_paste_into_cmd_callback, NULL },
{ "<Image>/Edit/Clear", "<control>K", edit_clear_cmd_callback, NULL },
{ "<Image>/Edit/Fill", "<control>.", edit_fill_cmd_callback, NULL },
{ "<Image>/Edit/Stroke", NULL, edit_stroke_cmd_callback, NULL },
{ "<Image>/Edit/Undo", "<control>Z", edit_undo_cmd_callback, NULL },
{ "<Image>/Edit/Redo", "<control>R", edit_redo_cmd_callback, NULL },
{ "<Image>/Edit/<separator>", NULL, NULL, NULL },
{ "<Image>/Edit/Cut Named", "<control><shift>X", edit_named_cut_cmd_callback, NULL },
{ "<Image>/Edit/Copy Named", "<control><shift>C", edit_named_copy_cmd_callback, NULL },
{ "<Image>/Edit/Paste Named", "<control><shift>V", edit_named_paste_cmd_callback, NULL },
{ "<Image>/Edit/<separator>", NULL, NULL, NULL },
{ "<Image>/Select/Toggle", "<control>T", select_toggle_cmd_callback, NULL },
{ "<Image>/Select/Invert", "<control>I", select_invert_cmd_callback, NULL },
{ "<Image>/Select/All", "<control>A", select_all_cmd_callback, NULL },
{ "<Image>/Select/None", "<control><shift>A", select_none_cmd_callback, NULL },
{ "<Image>/Select/Float", "<control><shift>L", select_float_cmd_callback, NULL },
{ "<Image>/Select/Sharpen", "<control><shift>H", select_sharpen_cmd_callback, NULL },
{ "<Image>/Select/Border", "<control><shift>B", select_border_cmd_callback, NULL },
{ "<Image>/Select/Feather", "<control><shift>F", select_feather_cmd_callback, NULL },
{ "<Image>/Select/Grow", NULL, select_grow_cmd_callback, NULL },
{ "<Image>/Select/Shrink", NULL, select_shrink_cmd_callback, NULL },
{ "<Image>/Select/Save To Channel", NULL, select_save_cmd_callback, NULL },
{ "<Image>/Select/By Color...", NULL, select_by_color_cmd_callback, NULL },
{ "<Image>/View/Zoom In", "=", view_zoomin_cmd_callback, NULL },
{ "<Image>/View/Zoom Out", "-", view_zoomout_cmd_callback, NULL },
{ "<Image>/View/Zoom/16:1", NULL, view_zoom_16_1_callback, NULL },
{ "<Image>/View/Zoom/8:1", NULL, view_zoom_8_1_callback, NULL },
{ "<Image>/View/Zoom/4:1", NULL, view_zoom_4_1_callback, NULL },
{ "<Image>/View/Zoom/2:1", NULL, view_zoom_2_1_callback, NULL },
{ "<Image>/View/Zoom/1:1", "1", view_zoom_1_1_callback, NULL },
{ "<Image>/View/Zoom/1:2", NULL, view_zoom_1_2_callback, NULL },
{ "<Image>/View/Zoom/1:4", NULL, view_zoom_1_4_callback, NULL },
{ "<Image>/View/Zoom/1:8", NULL, view_zoom_1_8_callback, NULL },
{ "<Image>/View/Zoom/1:16", NULL, view_zoom_1_16_callback, NULL },
{ "<Image>/View/Window Info...", "<control><shift>I", view_window_info_cmd_callback, NULL },
{ "<Image>/View/<check>Toggle Rulers", "<control><shift>R", view_toggle_rulers_cmd_callback, NULL },
{ "<Image>/View/<check>Toggle Guides", "<control><shift>T", view_toggle_guides_cmd_callback, NULL },
{ "<Image>/View/<check>Snap To Guides", NULL, view_snap_to_guides_cmd_callback, NULL },
{ "<Image>/View/<separator>", NULL, NULL, NULL },
{ "<Image>/View/New View", NULL, view_new_view_cmd_callback, NULL },
{ "<Image>/View/Shrink Wrap", "<control>E", view_shrink_wrap_cmd_callback, NULL },
{ "<Image>/Image/Colors/Equalize", NULL, image_equalize_cmd_callback, NULL },
{ "<Image>/Image/Colors/Invert", NULL, image_invert_cmd_callback, NULL },
{ "<Image>/Image/Colors/Posterize", NULL, image_posterize_cmd_callback, NULL },
{ "<Image>/Image/Colors/Threshold", NULL, image_threshold_cmd_callback, NULL },
{ "<Image>/Image/Colors/<separator>", NULL, NULL, NULL },
{ "<Image>/Image/Colors/Color Balance", NULL, image_color_balance_cmd_callback, NULL },
{ "<Image>/Image/Colors/Brightness-Contrast", NULL, image_brightness_contrast_cmd_callback, NULL },
{ "<Image>/Image/Colors/Hue-Saturation", NULL, image_hue_saturation_cmd_callback, NULL },
{ "<Image>/Image/Colors/Curves", NULL, image_curves_cmd_callback, NULL },
{ "<Image>/Image/Colors/Levels", NULL, image_levels_cmd_callback, NULL },
{ "<Image>/Image/Colors/<separator>", NULL, NULL, NULL },
{ "<Image>/Image/Colors/Desaturate", NULL, image_desaturate_cmd_callback, NULL },
{ "<Image>/Image/Channel Ops/Duplicate", "<control>D", channel_ops_duplicate_cmd_callback, NULL },
{ "<Image>/Image/Channel Ops/Offset", "<control><shift>O", channel_ops_offset_cmd_callback, NULL },
{ "<Image>/Image/Alpha/Add Alpha Channel", NULL, layers_add_alpha_channel_cmd_callback, NULL },
{ "<Image>/Image/<separator>", NULL, NULL, NULL },
{ "<Image>/Image/RGB", NULL, image_convert_rgb_cmd_callback, NULL },
{ "<Image>/Image/Grayscale", NULL, image_convert_grayscale_cmd_callback, NULL },
{ "<Image>/Image/Indexed", NULL, image_convert_indexed_cmd_callback, NULL },
{ "<Image>/Image/<separator>", NULL, NULL, NULL },
{ "<Image>/Image/Resize", NULL, image_resize_cmd_callback, NULL },
{ "<Image>/Image/Scale", NULL, image_scale_cmd_callback, NULL },
{ "<Image>/Image/<separator>", NULL, NULL, NULL },
{ "<Image>/Image/Histogram", NULL, image_histogram_cmd_callback, NULL },
{ "<Image>/Image/<separator>", NULL, NULL, NULL },
{ "<Image>/Layers/Layers & Channels...", "<control>L", dialogs_lc_cmd_callback, NULL },
{ "<Image>/Layers/Raise Layer", "<control>F", layers_raise_cmd_callback, NULL },
{ "<Image>/Layers/Lower Layer", "<control>B", layers_lower_cmd_callback, NULL },
{ "<Image>/Layers/Anchor Layer", "<control>H", layers_anchor_cmd_callback, NULL },
{ "<Image>/Layers/Merge Visible Layers", "<control>M", layers_merge_cmd_callback, NULL },
{ "<Image>/Layers/Flatten Image", NULL, layers_flatten_cmd_callback, NULL },
{ "<Image>/Layers/Alpha To Selection", NULL, layers_alpha_select_cmd_callback, NULL },
{ "<Image>/Layers/Mask To Selection", NULL, layers_mask_select_cmd_callback, NULL },
{ "<Image>/Layers/Add Alpha Channel", NULL, layers_add_alpha_channel_cmd_callback, NULL },
{ "<Image>/Tools/Rect Select", "R", tools_select_cmd_callback, (gpointer) RECT_SELECT },
{ "<Image>/Tools/Ellipse Select", "E", tools_select_cmd_callback, (gpointer) ELLIPSE_SELECT },
{ "<Image>/Tools/Free Select", "F", tools_select_cmd_callback, (gpointer) FREE_SELECT },
{ "<Image>/Tools/Fuzzy Select", "Z", tools_select_cmd_callback, (gpointer) FUZZY_SELECT },
{ "<Image>/Tools/Bezier Select", "B", tools_select_cmd_callback, (gpointer) BEZIER_SELECT },
{ "<Image>/Tools/Intelligent Scissors", "I", tools_select_cmd_callback, (gpointer) ISCISSORS },
{ "<Image>/Tools/Move", "M", tools_select_cmd_callback, (gpointer) MOVE },
{ "<Image>/Tools/Magnify", "<shift>M", tools_select_cmd_callback, (gpointer) MAGNIFY },
{ "<Image>/Tools/Crop", "<shift>C", tools_select_cmd_callback, (gpointer) CROP },
{ "<Image>/Tools/Transform", "<shift>T", tools_select_cmd_callback, (gpointer) ROTATE },
{ "<Image>/Tools/Flip", "<shift>F", tools_select_cmd_callback, (gpointer) FLIP_HORZ },
{ "<Image>/Tools/Text", "T", tools_select_cmd_callback, (gpointer) TEXT },
{ "<Image>/Tools/Color Picker", "O", tools_select_cmd_callback, (gpointer) COLOR_PICKER },
{ "<Image>/Tools/Bucket Fill", "<shift>B", tools_select_cmd_callback, (gpointer) BUCKET_FILL },
{ "<Image>/Tools/Blend", "L", tools_select_cmd_callback, (gpointer) BLEND },
{ "<Image>/Tools/Paintbrush", "P", tools_select_cmd_callback, (gpointer) PAINTBRUSH },
{ "<Image>/Tools/Pencil", "<shift>P", tools_select_cmd_callback, (gpointer) PENCIL },
{ "<Image>/Tools/Eraser", "<shift>E", tools_select_cmd_callback, (gpointer) ERASER },
{ "<Image>/Tools/Airbrush", "A", tools_select_cmd_callback, (gpointer) AIRBRUSH },
{ "<Image>/Tools/Clone", "C", tools_select_cmd_callback, (gpointer) CLONE },
{ "<Image>/Tools/Convolve", "V", tools_select_cmd_callback, (gpointer) CONVOLVE },
{ "<Image>/Tools/Default Colors", "D", tools_default_colors_cmd_callback, NULL},
{ "<Image>/Tools/Swap Colors", "X", tools_swap_colors_cmd_callback, NULL},
{ "<Image>/Tools/<separator>", NULL, NULL, NULL },
{ "<Image>/Tools/Toolbox", NULL, toolbox_raise_callback, NULL },
{ "<Image>/Filters/", NULL, NULL, NULL },
{ "<Image>/Filters/Repeat last", "<alt>F", filters_repeat_cmd_callback, (gpointer) 0x0 },
{ "<Image>/Filters/Re-show last", "<alt><shift>F", filters_repeat_cmd_callback, (gpointer)
0x1 },
{ "<Image>/Filters/<separator>", NULL, NULL, NULL },
{ "<Image>/Script-Fu/", NULL, NULL, NULL },
{ "<Image>/Dialogs/Brushes...", "<control><shift>B", dialogs_brushes_cmd_callback, NULL },
{ "<Image>/Dialogs/Patterns...", "<control><shift>P", dialogs_patterns_cmd_callback, NULL },
{ "<Image>/Dialogs/Palette...", "<control>P", dialogs_palette_cmd_callback, NULL },
{ "<Image>/Dialogs/Gradient Editor...", "<control>G", dialogs_gradient_editor_cmd_callback, NULL },
{ "<Image>/Dialogs/Layers & Channels...", "<control>L", dialogs_lc_cmd_callback, NULL },
{ "<Image>/Dialogs/Indexed Palette...", NULL, dialogs_indexed_palette_cmd_callback, NULL },
{ "<Image>/Dialogs/Tool Options...", NULL, dialogs_tools_options_cmd_callback, NULL },
{ "<Image>/Dialogs/Input Devices...", NULL, dialogs_input_devices_cmd_callback, NULL },
{ "<Image>/Dialogs/Device Status...", NULL, dialogs_device_status_cmd_callback, NULL },
{ "<Load>/Automatic", NULL, file_load_by_extension_callback, NULL },
{ "<Load>/<separator>", NULL, NULL, NULL },
{ "<Save>/By extension", NULL, file_save_by_extension_callback, NULL },
{ "<Save>/<separator>", NULL, NULL, NULL },
}; };
static int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); static guint n_toolbox_entries = sizeof (toolbox_entries) / sizeof (toolbox_entries[0]);
static GtkItemFactory *toolbox_factory = NULL;
static GtkItemFactoryEntry image_entries[] =
{
{ "/File/New", "<control>N", file_new_cmd_callback, 1 },
{ "/File/Open", "<control>O", file_open_cmd_callback, 0 },
{ "/File/Save", "<control>S", file_save_cmd_callback, 0 },
{ "/File/Save as", NULL, file_save_as_cmd_callback, 0 },
{ "/File/Preferences...", NULL, file_pref_cmd_callback, 0 },
{ "/File/---", NULL, NULL, 0, "<Separator>" },
{ "/File/Close", "<control>W", file_close_cmd_callback, 0 },
{ "/File/Quit", "<control>Q", file_quit_cmd_callback, 0 },
{ "/File/---", NULL, NULL, 0, "<Separator>" },
{ "/Edit/Cut", "<control>X", edit_cut_cmd_callback, 0 },
{ "/Edit/Copy", "<control>C", edit_copy_cmd_callback, 0 },
{ "/Edit/Paste", "<control>V", edit_paste_cmd_callback, 0 },
{ "/Edit/Paste Into", NULL, edit_paste_into_cmd_callback, 0 },
{ "/Edit/Clear", "<control>K", edit_clear_cmd_callback, 0 },
{ "/Edit/Fill", "<control>.", edit_fill_cmd_callback, 0 },
{ "/Edit/Stroke", NULL, edit_stroke_cmd_callback, 0 },
{ "/Edit/Undo", "<control>Z", edit_undo_cmd_callback, 0 },
{ "/Edit/Redo", "<control>R", edit_redo_cmd_callback, 0 },
{ "/Edit/<Separator>", NULL, NULL, 0 },
{ "/Edit/Cut Named", "<control><shift>X", edit_named_cut_cmd_callback, 0 },
{ "/Edit/Copy Named", "<control><shift>C", edit_named_copy_cmd_callback, 0 },
{ "/Edit/Paste Named", "<control><shift>V", edit_named_paste_cmd_callback, 0 },
{ "/Edit/---", NULL, NULL, 0, "<Separator>" },
{ "/Select/Toggle", "<control>T", select_toggle_cmd_callback, 0 },
{ "/Select/Invert", "<control>I", select_invert_cmd_callback, 0 },
{ "/Select/All", "<control>A", select_all_cmd_callback, 0 },
{ "/Select/None", "<control><shift>A", select_none_cmd_callback, 0 },
{ "/Select/Float", "<control><shift>L", select_float_cmd_callback, 0 },
{ "/Select/Sharpen", "<control><shift>H", select_sharpen_cmd_callback, 0 },
{ "/Select/Border", "<control><shift>B", select_border_cmd_callback, 0 },
{ "/Select/Feather", "<control><shift>F", select_feather_cmd_callback, 0 },
{ "/Select/Grow", NULL, select_grow_cmd_callback, 0 },
{ "/Select/Shrink", NULL, select_shrink_cmd_callback, 0 },
{ "/Select/Save To Channel", NULL, select_save_cmd_callback, 0 },
{ "/Select/By Color...", NULL, select_by_color_cmd_callback, 0 },
{ "/View/Zoom In", "=", view_zoomin_cmd_callback, 0 },
{ "/View/Zoom Out", "-", view_zoomout_cmd_callback, 0 },
{ "/View/Zoom/16:1", NULL, view_zoom_16_1_callback, 0 },
{ "/View/Zoom/8:1", NULL, view_zoom_8_1_callback, 0 },
{ "/View/Zoom/4:1", NULL, view_zoom_4_1_callback, 0 },
{ "/View/Zoom/2:1", NULL, view_zoom_2_1_callback, 0 },
{ "/View/Zoom/1:1", "1", view_zoom_1_1_callback, 0 },
{ "/View/Zoom/1:2", NULL, view_zoom_1_2_callback, 0 },
{ "/View/Zoom/1:4", NULL, view_zoom_1_4_callback, 0 },
{ "/View/Zoom/1:8", NULL, view_zoom_1_8_callback, 0 },
{ "/View/Zoom/1:16", NULL, view_zoom_1_16_callback, 0 },
{ "/View/Window Info...", "<control><shift>I", view_window_info_cmd_callback, 0 },
{ "/View/Toggle Rulers", "<control><shift>R", view_toggle_rulers_cmd_callback, 0, "<ToggleItem>" },
{ "/View/Toggle Guides", "<control><shift>T", view_toggle_guides_cmd_callback, 0, "<ToggleItem>" },
{ "/View/Snap To Guides", NULL, view_snap_to_guides_cmd_callback, 0, "<ToggleItem>" },
{ "/View/---", NULL, NULL, 0, "<Separator>" },
{ "/View/New View", NULL, view_new_view_cmd_callback, 0 },
{ "/View/Shrink Wrap", "<control>E", view_shrink_wrap_cmd_callback, 0 },
{ "/Image/Colors/Equalize", NULL, image_equalize_cmd_callback, 0 },
{ "/Image/Colors/Invert", NULL, image_invert_cmd_callback, 0 },
{ "/Image/Colors/Posterize", NULL, image_posterize_cmd_callback, 0 },
{ "/Image/Colors/Threshold", NULL, image_threshold_cmd_callback, 0 },
{ "/Image/Colors/---", NULL, NULL, 0, "<Separator>" },
{ "/Image/Colors/Color Balance", NULL, image_color_balance_cmd_callback, 0 },
{ "/Image/Colors/Brightness-Contrast", NULL, image_brightness_contrast_cmd_callback, 0 },
{ "/Image/Colors/Hue-Saturation", NULL, image_hue_saturation_cmd_callback, 0 },
{ "/Image/Colors/Curves", NULL, image_curves_cmd_callback, 0 },
{ "/Image/Colors/Levels", NULL, image_levels_cmd_callback, 0 },
{ "/Image/Colors/---", NULL, NULL, 0, "<Separator>" },
{ "/Image/Colors/Desaturate", NULL, image_desaturate_cmd_callback, 0 },
{ "/Image/Channel Ops/Duplicate", "<control>D", channel_ops_duplicate_cmd_callback, 0 },
{ "/Image/Channel Ops/Offset", "<control><shift>O", channel_ops_offset_cmd_callback, 0 },
{ "/Image/Alpha/Add Alpha Channel", NULL, layers_add_alpha_channel_cmd_callback, 0 },
{ "/Image/---", NULL, NULL, 0, "<Separator>" },
{ "/Image/RGB", NULL, image_convert_rgb_cmd_callback, 0 },
{ "/Image/Grayscale", NULL, image_convert_grayscale_cmd_callback, 0 },
{ "/Image/Indexed", NULL, image_convert_indexed_cmd_callback, 0 },
{ "/Image/---", NULL, NULL, 0, "<Separator>" },
{ "/Image/Resize", NULL, image_resize_cmd_callback, 0 },
{ "/Image/Scale", NULL, image_scale_cmd_callback, 0 },
{ "/Image/---", NULL, NULL, 0, "<Separator>" },
{ "/Image/Histogram", NULL, image_histogram_cmd_callback, 0 },
{ "/Image/---", NULL, NULL, 0, "<Separator>" },
{ "/Layers/Layers & Channels...", "<control>L", dialogs_lc_cmd_callback, 0 },
{ "/Layers/Raise Layer", "<control>F", layers_raise_cmd_callback, 0 },
{ "/Layers/Lower Layer", "<control>B", layers_lower_cmd_callback, 0 },
{ "/Layers/Anchor Layer", "<control>H", layers_anchor_cmd_callback, 0 },
{ "/Layers/Merge Visible Layers", "<control>M", layers_merge_cmd_callback, 0 },
{ "/Layers/Flatten Image", NULL, layers_flatten_cmd_callback, 0 },
{ "/Layers/Alpha To Selection", NULL, layers_alpha_select_cmd_callback, 0 },
{ "/Layers/Mask To Selection", NULL, layers_mask_select_cmd_callback, 0 },
{ "/Layers/Add Alpha Channel", NULL, layers_add_alpha_channel_cmd_callback, 0 },
{ "/Tools/Rect Select", "R", tools_select_cmd_callback, RECT_SELECT },
{ "/Tools/Ellipse Select", "E", tools_select_cmd_callback, ELLIPSE_SELECT },
{ "/Tools/Free Select", "F", tools_select_cmd_callback, FREE_SELECT },
{ "/Tools/Fuzzy Select", "Z", tools_select_cmd_callback, FUZZY_SELECT },
{ "/Tools/Bezier Select", "B", tools_select_cmd_callback, BEZIER_SELECT },
{ "/Tools/Intelligent Scissors", "I", tools_select_cmd_callback, ISCISSORS },
{ "/Tools/Move", "M", tools_select_cmd_callback, MOVE },
{ "/Tools/Magnify", "<shift>M", tools_select_cmd_callback, MAGNIFY },
{ "/Tools/Crop", "<shift>C", tools_select_cmd_callback, CROP },
{ "/Tools/Transform", "<shift>T", tools_select_cmd_callback, ROTATE },
{ "/Tools/Flip", "<shift>F", tools_select_cmd_callback, FLIP_HORZ },
{ "/Tools/Text", "T", tools_select_cmd_callback, TEXT },
{ "/Tools/Color Picker", "O", tools_select_cmd_callback, COLOR_PICKER },
{ "/Tools/Bucket Fill", "<shift>B", tools_select_cmd_callback, BUCKET_FILL },
{ "/Tools/Blend", "L", tools_select_cmd_callback, BLEND },
{ "/Tools/Paintbrush", "P", tools_select_cmd_callback, PAINTBRUSH },
{ "/Tools/Pencil", "<shift>P", tools_select_cmd_callback, PENCIL },
{ "/Tools/Eraser", "<shift>E", tools_select_cmd_callback, ERASER },
{ "/Tools/Airbrush", "A", tools_select_cmd_callback, AIRBRUSH },
{ "/Tools/Clone", "C", tools_select_cmd_callback, CLONE },
{ "/Tools/Convolve", "V", tools_select_cmd_callback, CONVOLVE },
{ "/Tools/Default Colors", "D", tools_default_colors_cmd_callback, 0 },
{ "/Tools/Swap Colors", "X", tools_swap_colors_cmd_callback, 0 },
{ "/Tools/---", NULL, NULL, 0, "<Separator>" },
{ "/Tools/Toolbox", NULL, toolbox_raise_callback, 0 },
{ "/Filters/", NULL, NULL, 0 },
{ "/Filters/Repeat last", "<alt>F", filters_repeat_cmd_callback, 0x0 },
{ "/Filters/Re-show last", "<alt><shift>F", filters_repeat_cmd_callback, 0x1 },
{ "/Filters/---", NULL, NULL, 0, "<Separator>" },
{ "/Script-Fu/", NULL, NULL, 0 },
{ "/Dialogs/Brushes...", "<control><shift>B", dialogs_brushes_cmd_callback, 0 },
{ "/Dialogs/Patterns...", "<control><shift>P", dialogs_patterns_cmd_callback, 0 },
{ "/Dialogs/Palette...", "<control>P", dialogs_palette_cmd_callback, 0 },
{ "/Dialogs/Gradient Editor...", "<control>G", dialogs_gradient_editor_cmd_callback, 0 },
{ "/Dialogs/Layers & Channels...", "<control>L", dialogs_lc_cmd_callback, 0 },
{ "/Dialogs/Indexed Palette...", NULL, dialogs_indexed_palette_cmd_callback, 0 },
{ "/Dialogs/Tool Options...", NULL, dialogs_tools_options_cmd_callback, 0 },
{ "/Dialogs/Input Devices...", NULL, dialogs_input_devices_cmd_callback, 0 },
{ "/Dialogs/Device Status...", NULL, dialogs_device_status_cmd_callback, 0 },
};
static guint n_image_entries = sizeof (image_entries) / sizeof (image_entries[0]);
static GtkItemFactory *image_factory = NULL;
static GtkItemFactoryEntry load_entries[] =
{
{ "/Automatic", NULL, file_load_by_extension_callback, 0 },
{ "/---", NULL, NULL, 0, "<Separator>" },
};
static guint n_load_entries = sizeof (load_entries) / sizeof (load_entries[0]);
static GtkItemFactory *load_factory = NULL;
static GtkItemFactoryEntry save_entries[] =
{
{ "/By extension", NULL, file_save_by_extension_callback, 0 },
{ "/---", NULL, NULL, 0, "<Separator>" },
};
static guint n_save_entries = sizeof (save_entries) / sizeof (save_entries[0]);
static GtkItemFactory *save_factory = NULL;
static int initialize = TRUE; static int initialize = TRUE;
static GtkMenuFactory *factory = NULL;
static GtkMenuFactory *subfactories[4];
static GHashTable *entry_ht = NULL;
void void
menus_get_toolbox_menubar (GtkWidget **menubar, menus_get_toolbox_menubar (GtkWidget **menubar,
GtkAcceleratorTable **table) GtkAccelGroup **accel_group)
{ {
if (initialize) if (initialize)
menus_init (); menus_init ();
if (menubar) if (menubar)
*menubar = subfactories[0]->widget; *menubar = toolbox_factory->widget;
if (table) if (accel_group)
*table = subfactories[0]->table; *accel_group = toolbox_factory->accel_group;
} }
void void
menus_get_image_menu (GtkWidget **menu, menus_get_image_menu (GtkWidget **menu,
GtkAcceleratorTable **table) GtkAccelGroup **accel_group)
{ {
if (initialize) if (initialize)
menus_init (); menus_init ();
if (menu) if (menu)
*menu = subfactories[1]->widget; *menu = image_factory->widget;
if (table) if (accel_group)
*table = subfactories[1]->table; *accel_group = image_factory->accel_group;
} }
void void
menus_get_load_menu (GtkWidget **menu, menus_get_load_menu (GtkWidget **menu,
GtkAcceleratorTable **table) GtkAccelGroup **accel_group)
{ {
if (initialize) if (initialize)
menus_init (); menus_init ();
if (menu) if (menu)
*menu = subfactories[2]->widget; *menu = load_factory->widget;
if (table) if (accel_group)
*table = subfactories[2]->table; *accel_group = load_factory->accel_group;
} }
void void
menus_get_save_menu (GtkWidget **menu, menus_get_save_menu (GtkWidget **menu,
GtkAcceleratorTable **table) GtkAccelGroup **accel_group)
{ {
if (initialize) if (initialize)
menus_init (); menus_init ();
if (menu) if (menu)
*menu = subfactories[3]->widget; *menu = save_factory->widget;
if (table) if (accel_group)
*table = subfactories[3]->table; *accel_group = save_factory->accel_group;
} }
void void
menus_create (GtkMenuEntry *entries, menus_create (GtkMenuEntry *entries,
int nmenu_entries) int nmenu_entries)
{ {
char *accelerator;
int i;
if (initialize) if (initialize)
menus_init (); menus_init ();
if (entry_ht) gtk_item_factory_create_menu_entries (nmenu_entries, entries);
for (i = 0; i < nmenu_entries; i++)
{
accelerator = g_hash_table_lookup (entry_ht, entries[i].path);
if (accelerator)
{
if (accelerator[0] == '\0')
entries[i].accelerator = NULL;
else
entries[i].accelerator = accelerator;
}
}
gtk_menu_factory_add_entries (factory, entries, nmenu_entries);
for (i = 0; i < nmenu_entries; i++)
if (entries[i].widget && GTK_BIN (entries[i].widget)->child)
{
gtk_signal_connect (GTK_OBJECT (entries[i].widget), "install_accelerator",
(GtkSignalFunc) menus_install_accel,
entries[i].path);
gtk_signal_connect (GTK_OBJECT (entries[i].widget), "remove_accelerator",
(GtkSignalFunc) menus_remove_accel,
entries[i].path);
}
} }
void void
menus_set_sensitive (char *path, menus_set_sensitive (char *path,
int sensitive) int sensitive)
{ {
GtkMenuPath *menu_path; GtkItemFactory *ifactory;
GtkWidget *widget = NULL;
if (initialize) if (initialize)
menus_init (); menus_init ();
menu_path = gtk_menu_factory_find (factory, path); ifactory = gtk_item_factory_from_path (path);
if (menu_path)
gtk_widget_set_sensitive (menu_path->widget, sensitive); if (ifactory)
else {
g_message ("Unable to set sensitivity for menu which doesn't exist: %s", path); widget = gtk_item_factory_get_widget (ifactory, path);
gtk_widget_set_sensitive (widget, sensitive);
}
if (!ifactory || !widget)
printf ("Unable to set sensitivity for menu which doesn't exist:\n%s", path);
} }
void void
menus_set_state (char *path, menus_set_state (char *path,
int state) int state)
{ {
GtkMenuPath *menu_path; GtkItemFactory *ifactory;
GtkWidget *widget = NULL;
if (initialize) if (initialize)
menus_init (); menus_init ();
menu_path = gtk_menu_factory_find (factory, path); ifactory = gtk_item_factory_from_path (path);
if (menu_path)
if (ifactory)
{ {
if (GTK_IS_CHECK_MENU_ITEM (menu_path->widget)) widget = gtk_item_factory_get_widget (ifactory, path);
gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (menu_path->widget), state);
if (widget && GTK_IS_CHECK_MENU_ITEM (widget))
gtk_check_menu_item_set_state (GTK_CHECK_MENU_ITEM (widget), state);
else
widget = NULL;
} }
else if (!ifactory || !widget)
g_message ("Unable to set state for menu which doesn't exist: %s", path); printf ("Unable to set state for menu which doesn't exist:\n%s", path);
}
void
menus_add_path (char *path,
char *accelerator)
{
if (!entry_ht)
entry_ht = g_hash_table_new (g_str_hash, g_str_equal);
g_hash_table_insert (entry_ht, path, accelerator);
} }
void void
@ -358,35 +332,24 @@ menus_destroy (char *path)
if (initialize) if (initialize)
menus_init (); menus_init ();
gtk_menu_factory_remove_paths (factory, &path, 1); gtk_item_factories_path_delete (NULL, path);
} }
void void
menus_quit () menus_quit ()
{ {
FILE *fp; gchar *filename;
char filename[512];
char *gimp_dir; filename = g_strconcat (gimp_directory (), "/menurc", NULL);
gtk_item_factory_dump_rc (filename, NULL, TRUE);
g_free (filename);
if (entry_ht)
{
gimp_dir = gimp_directory ();
if ('\000' != gimp_dir[0])
{
sprintf (filename, "%s/menurc", gimp_dir);
fp = fopen (filename, "w");
if (fp)
{
g_hash_table_foreach (entry_ht, menus_foreach, fp);
fclose (fp);
}
}
}
if (!initialize) if (!initialize)
{ {
gtk_menu_factory_destroy (factory); gtk_object_destroy (GTK_OBJECT (toolbox_factory));
gtk_object_destroy (GTK_OBJECT (image_factory));
gtk_object_destroy (GTK_OBJECT (load_factory));
gtk_object_destroy (GTK_OBJECT (save_factory));
} }
} }
@ -395,101 +358,35 @@ menus_quit ()
static void static void
menus_init () menus_init ()
{ {
char filename[512];
if (initialize) if (initialize)
{ {
gchar *filename;
initialize = FALSE; initialize = FALSE;
factory = gtk_menu_factory_new (GTK_MENU_FACTORY_MENU_BAR); toolbox_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<Toolbox>", NULL);
gtk_item_factory_create_items_ac (toolbox_factory,
n_toolbox_entries,
toolbox_entries,
NULL, 2);
image_factory = gtk_item_factory_new (GTK_TYPE_MENU, "<Image>", NULL);
gtk_item_factory_create_items_ac (image_factory,
n_image_entries,
image_entries,
NULL, 2);
load_factory = gtk_item_factory_new (GTK_TYPE_MENU, "<Load>", NULL);
gtk_item_factory_create_items_ac (load_factory,
n_load_entries,
load_entries,
NULL, 2);
save_factory = gtk_item_factory_new (GTK_TYPE_MENU, "<Save>", NULL);
gtk_item_factory_create_items_ac (save_factory,
n_save_entries,
save_entries,
NULL, 2);
subfactories[0] = gtk_menu_factory_new (GTK_MENU_FACTORY_MENU_BAR); filename = g_strconcat (gimp_directory (), "/menurc", NULL);
gtk_menu_factory_add_subfactory (factory, subfactories[0], "<Toolbox>"); gtk_item_factory_parse_rc (filename);
g_free (filename);
subfactories[1] = gtk_menu_factory_new (GTK_MENU_FACTORY_MENU);
gtk_menu_factory_add_subfactory (factory, subfactories[1], "<Image>");
subfactories[2] = gtk_menu_factory_new (GTK_MENU_FACTORY_MENU);
gtk_menu_factory_add_subfactory (factory, subfactories[2], "<Load>");
subfactories[3] = gtk_menu_factory_new (GTK_MENU_FACTORY_MENU);
gtk_menu_factory_add_subfactory (factory, subfactories[3], "<Save>");
sprintf (filename, "%s/menurc", gimp_directory ());
parse_gimprc_file (filename);
menus_create (menu_items, nmenu_items);
} }
} }
static void
menus_foreach (gpointer key,
gpointer value,
gpointer user_data)
{
char accel[64];
int i, j;
for (i = j = 0; ((char*) value)[i] != '\0'; i++, j++)
{
if (((char *) value)[i] == '"' || ((char *) value)[i] == '\\')
accel[j++] = '\\';
accel[j] = ((char *) value)[i];
}
accel[j] = '\0';
fprintf ((FILE*) user_data, "(menu-path \"%s\" \"%s\")\n", (char*) key, accel);
}
static gint
menus_install_accel (GtkWidget *widget,
gchar *signal_name,
gchar key,
gchar modifiers,
gchar *path)
{
char accel[64];
char *t1, t2[2];
accel[0] = '\0';
if (modifiers & GDK_CONTROL_MASK)
strcat (accel, "<control>");
if (modifiers & GDK_SHIFT_MASK)
strcat (accel, "<shift>");
if (modifiers & GDK_MOD1_MASK)
strcat (accel, "<alt>");
t2[0] = key;
t2[1] = '\0';
strcat (accel, t2);
if (entry_ht)
{
t1 = g_hash_table_lookup (entry_ht, path);
g_free (t1);
}
else
entry_ht = g_hash_table_new (g_str_hash, g_str_equal);
g_hash_table_insert (entry_ht, path, g_strdup (accel));
return TRUE;
}
static void
menus_remove_accel (GtkWidget *widget,
gchar *signal_name,
gchar *path)
{
char *t;
if (entry_ht)
{
t = g_hash_table_lookup (entry_ht, path);
g_free (t);
g_hash_table_insert (entry_ht, path, g_strdup (""));
}
}

View File

@ -23,21 +23,19 @@
void menus_get_toolbox_menubar (GtkWidget **menubar, void menus_get_toolbox_menubar (GtkWidget **menubar,
GtkAcceleratorTable **table); GtkAccelGroup **accel_group);
void menus_get_image_menu (GtkWidget **menu, void menus_get_image_menu (GtkWidget **menu,
GtkAcceleratorTable **table); GtkAccelGroup **accel_group);
void menus_get_load_menu (GtkWidget **menu, void menus_get_load_menu (GtkWidget **menu,
GtkAcceleratorTable **table); GtkAccelGroup **accel_group);
void menus_get_save_menu (GtkWidget **menu, void menus_get_save_menu (GtkWidget **menu,
GtkAcceleratorTable **table); GtkAccelGroup **accel_group);
void menus_create (GtkMenuEntry *entries, void menus_create (GtkMenuEntry *entries,
int nmenu_entries); int nmenu_entries);
void menus_set_sensitive (char *path, void menus_set_sensitive (char *path,
int sensitive); int sensitive);
void menus_set_state (char *path, void menus_set_state (char *path,
int state); int state);
void menus_add_path (char *path,
char *accelerator);
void menus_destroy (char *path); void menus_destroy (char *path);
void menus_quit (void); void menus_quit (void);