From 210ef45abb4b17a3a75c6ee6feb9c835e334e8ab Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Tue, 27 Jul 2004 22:17:30 +0000 Subject: [PATCH] Enabled disabling all menu mnemonics. Addresses bug #120034: 2004-07-28 Michael Natterer Enabled disabling all menu mnemonics. Addresses bug #120034: * app/config/gimpguiconfig.[ch] * app/config/gimprc-blurbs.h: added boolean RESTART property "menu-menonics". * app/gui/preferences-dialog.c: added a GUI for it. * app/widgets/gimpactiongroup.[ch]: added boolean CONSTRUCT_ONLY property "mnemonics". (gimp_action_group_add_*_actions): call gimp_strip_uline() on the actions' labels if mnemonics is FALSE. * app/widgets/gimpactionfactory.[ch] * app/actions/actions.c: pass gui_config->menu_menmonics to all action groups. --- ChangeLog | 20 +++++++ app/actions/actions.c | 10 +++- app/config/gimpguiconfig.c | 11 ++++ app/config/gimpguiconfig.h | 1 + app/config/gimprc-blurbs.h | 3 ++ app/dialogs/preferences-dialog.c | 3 ++ app/gui/preferences-dialog.c | 3 ++ app/widgets/gimpactionfactory.c | 7 ++- app/widgets/gimpactionfactory.h | 5 +- app/widgets/gimpactiongroup.c | 89 +++++++++++++++++++++++++++----- app/widgets/gimpactiongroup.h | 2 + 11 files changed, 135 insertions(+), 19 deletions(-) diff --git a/ChangeLog b/ChangeLog index d8df30b797..259ae02235 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,23 @@ +2004-07-28 Michael Natterer + + Enabled disabling all menu mnemonics. Addresses bug #120034: + + * app/config/gimpguiconfig.[ch] + * app/config/gimprc-blurbs.h: added boolean RESTART property + "menu-menonics". + + * app/gui/preferences-dialog.c: added a GUI for it. + + * app/widgets/gimpactiongroup.[ch]: added boolean CONSTRUCT_ONLY + property "mnemonics". + + (gimp_action_group_add_*_actions): call gimp_strip_uline() on + the actions' labels if mnemonics is FALSE. + + * app/widgets/gimpactionfactory.[ch] + * app/actions/actions.c: pass gui_config->menu_menmonics to + all action groups. + 2004-07-27 Sven Neumann * menus/image-menu.xml.in: commented out "Context" menu now that diff --git a/app/actions/actions.c b/app/actions/actions.c index c24199a7dd..54502ca430 100644 --- a/app/actions/actions.c +++ b/app/actions/actions.c @@ -24,6 +24,8 @@ #include "actions-types.h" +#include "config/gimpguiconfig.h" + #include "core/gimp.h" #include "core/gimpcontainer.h" #include "core/gimpcontext.h" @@ -187,12 +189,16 @@ static GimpActionFactoryEntry action_groups[] = void actions_init (Gimp *gimp) { - gint i; + GimpGuiConfig *gui_config; + gint i; g_return_if_fail (GIMP_IS_GIMP (gimp)); g_return_if_fail (global_action_factory == NULL); - global_action_factory = gimp_action_factory_new (gimp); + gui_config = GIMP_GUI_CONFIG (gimp->config); + + global_action_factory = gimp_action_factory_new (gimp, + gui_config->menu_mnemonics); for (i = 0; i < G_N_ELEMENTS (action_groups); i++) gimp_action_factory_group_register (global_action_factory, diff --git a/app/config/gimpguiconfig.c b/app/config/gimpguiconfig.c index eee08812b1..8aad128d34 100644 --- a/app/config/gimpguiconfig.c +++ b/app/config/gimpguiconfig.c @@ -74,6 +74,7 @@ enum PROP_CAN_CHANGE_ACCELS, PROP_SAVE_ACCELS, PROP_RESTORE_ACCELS, + PROP_MENU_MNEMONICS, PROP_LAST_OPENED_SIZE, PROP_MAX_NEW_IMAGE_SIZE, PROP_TOOLBOX_COLOR_AREA, @@ -186,6 +187,10 @@ gimp_gui_config_class_init (GimpGuiConfigClass *klass) "restore-accels", RESTORE_ACCELS_BLURB, TRUE, 0); + GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_MENU_MNEMONICS, + "menu-mnemonics", MENU_MNEMONICS_BLURB, + TRUE, + GIMP_PARAM_RESTART); GIMP_CONFIG_INSTALL_PROP_INT (object_class, PROP_LAST_OPENED_SIZE, "last-opened-size", LAST_OPENED_SIZE_BLURB, 0, 1024, 10, @@ -315,6 +320,9 @@ gimp_gui_config_set_property (GObject *object, case PROP_RESTORE_ACCELS: gui_config->restore_accels = g_value_get_boolean (value); break; + case PROP_MENU_MNEMONICS: + gui_config->menu_mnemonics = g_value_get_boolean (value); + break; case PROP_LAST_OPENED_SIZE: gui_config->last_opened_size = g_value_get_int (value); break; @@ -414,6 +422,9 @@ gimp_gui_config_get_property (GObject *object, case PROP_RESTORE_ACCELS: g_value_set_boolean (value, gui_config->restore_accels); break; + case PROP_MENU_MNEMONICS: + g_value_set_boolean (value, gui_config->menu_mnemonics); + break; case PROP_LAST_OPENED_SIZE: g_value_set_int (value, gui_config->last_opened_size); break; diff --git a/app/config/gimpguiconfig.h b/app/config/gimpguiconfig.h index 5c1dd3b9a9..d10c6ff0e2 100644 --- a/app/config/gimpguiconfig.h +++ b/app/config/gimpguiconfig.h @@ -52,6 +52,7 @@ struct _GimpGuiConfig gboolean can_change_accels; gboolean save_accels; gboolean restore_accels; + gboolean menu_mnemonics; gint last_opened_size; guint64 max_new_image_size; gboolean toolbox_color_area; diff --git a/app/config/gimprc-blurbs.h b/app/config/gimprc-blurbs.h index 2154a3c893..b491b5b1e1 100644 --- a/app/config/gimprc-blurbs.h +++ b/app/config/gimprc-blurbs.h @@ -181,6 +181,9 @@ N_("Speed of marching ants in the selection outline. This value is in " \ N_("GIMP will warn the user if an attempt is made to create an image that " \ "would take more memory than the size specified here.") +#define MENU_MNEMONICS_BLURB \ +N_("When enabled, GIMP will show mnemonics in menus.") + #define MIN_COLORS_BLURB \ N_("Generally only a concern for 8-bit displays, this sets the minimum " \ "number of system colors allocated for the GIMP.") diff --git a/app/dialogs/preferences-dialog.c b/app/dialogs/preferences-dialog.c index 1c6114d24d..9827771e01 100644 --- a/app/dialogs/preferences-dialog.c +++ b/app/dialogs/preferences-dialog.c @@ -1351,6 +1351,9 @@ prefs_dialog_new (Gimp *gimp, G_CALLBACK (prefs_keyboard_shortcuts_dialog), gimp); + prefs_check_button_add (object, "menu-mnemonics", + _("Show menu _mnemonics (access keys)"), + GTK_BOX (vbox2)); prefs_check_button_add (object, "can-change-accels", _("Use dynamic _keyboard shortcuts"), GTK_BOX (vbox2)); diff --git a/app/gui/preferences-dialog.c b/app/gui/preferences-dialog.c index 1c6114d24d..9827771e01 100644 --- a/app/gui/preferences-dialog.c +++ b/app/gui/preferences-dialog.c @@ -1351,6 +1351,9 @@ prefs_dialog_new (Gimp *gimp, G_CALLBACK (prefs_keyboard_shortcuts_dialog), gimp); + prefs_check_button_add (object, "menu-mnemonics", + _("Show menu _mnemonics (access keys)"), + GTK_BOX (vbox2)); prefs_check_button_add (object, "can-change-accels", _("Use dynamic _keyboard shortcuts"), GTK_BOX (vbox2)); diff --git a/app/widgets/gimpactionfactory.c b/app/widgets/gimpactionfactory.c index d5af1c5ee9..15ddd00f25 100644 --- a/app/widgets/gimpactionfactory.c +++ b/app/widgets/gimpactionfactory.c @@ -112,7 +112,8 @@ gimp_action_factory_finalize (GObject *object) } GimpActionFactory * -gimp_action_factory_new (Gimp *gimp) +gimp_action_factory_new (Gimp *gimp, + gboolean mnemonics) { GimpActionFactory *factory; @@ -120,7 +121,8 @@ gimp_action_factory_new (Gimp *gimp) factory = g_object_new (GIMP_TYPE_ACTION_FACTORY, NULL); - factory->gimp = gimp; + factory->gimp = gimp; + factory->mnemonics = mnemonics ? TRUE : FALSE; return factory; } @@ -175,6 +177,7 @@ gimp_action_factory_group_new (GimpActionFactory *factory, entry->identifier, entry->label, entry->stock_id, + factory->mnemonics, user_data, entry->update_func); diff --git a/app/widgets/gimpactionfactory.h b/app/widgets/gimpactionfactory.h index 75e3139d6b..8d215cea2b 100644 --- a/app/widgets/gimpactionfactory.h +++ b/app/widgets/gimpactionfactory.h @@ -54,6 +54,8 @@ struct _GimpActionFactory Gimp *gimp; GList *registered_groups; + + gboolean mnemonics; }; struct _GimpActionFactoryClass @@ -64,7 +66,8 @@ struct _GimpActionFactoryClass GType gimp_action_factory_get_type (void) G_GNUC_CONST; -GimpActionFactory * gimp_action_factory_new (Gimp *gimp); +GimpActionFactory * gimp_action_factory_new (Gimp *gimp, + gboolean mnemonics); void gimp_action_factory_group_register (GimpActionFactory *factory, const gchar *identifier, diff --git a/app/widgets/gimpactiongroup.c b/app/widgets/gimpactiongroup.c index fbf0228281..39b4e242e8 100644 --- a/app/widgets/gimpactiongroup.c +++ b/app/widgets/gimpactiongroup.c @@ -23,6 +23,7 @@ #include +#include "libgimpbase/gimpbase.h" #include "libgimpwidgets/gimpwidgets.h" #include "widgets-types.h" @@ -45,7 +46,8 @@ enum PROP_0, PROP_GIMP, PROP_LABEL, - PROP_STOCK_ID + PROP_STOCK_ID, + PROP_MNEMONICS }; @@ -132,6 +134,13 @@ gimp_action_group_class_init (GimpActionGroupClass *klass) G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property (object_class, PROP_MNEMONICS, + g_param_spec_boolean ("mnemonics", + NULL, NULL, + TRUE, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + klass->groups = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); } @@ -139,7 +148,6 @@ gimp_action_group_class_init (GimpActionGroupClass *klass) static void gimp_action_group_init (GimpActionGroup *group) { - group->gimp = NULL; } static GObject * @@ -147,11 +155,16 @@ gimp_action_group_constructor (GType type, guint n_params, GObjectConstructParam *params) { - GObject *object; - const gchar *name; + GObject *object; + GimpActionGroup *group; + const gchar *name; object = G_OBJECT_CLASS (parent_class)->constructor (type, n_params, params); + group = GIMP_ACTION_GROUP (object); + + g_assert (GIMP_IS_GIMP (group->gimp)); + name = gtk_action_group_get_name (GTK_ACTION_GROUP (object)); if (name) @@ -242,6 +255,9 @@ gimp_action_group_set_property (GObject *object, case PROP_STOCK_ID: group->stock_id = g_value_dup_string (value); break; + case PROP_MNEMONICS: + group->mnemonics = g_value_get_boolean (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -267,6 +283,9 @@ gimp_action_group_get_property (GObject *object, case PROP_STOCK_ID: g_value_set_string (value, group->stock_id); break; + case PROP_MNEMONICS: + g_value_set_boolean (value, group->mnemonics); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -279,6 +298,7 @@ gimp_action_group_get_property (GObject *object, * @name: the name of the action group. * @label: the user visible label of the action group. * @stock_id: the icon of the action group. + * @mnemonics: whether or not to show mnemonics. * @user_data: the user_data for #GtkAction callbacks. * @update_func: the function that will be called on * gimp_action_group_update(). @@ -294,6 +314,7 @@ gimp_action_group_new (Gimp *gimp, const gchar *name, const gchar *label, const gchar *stock_id, + gboolean mnemonics, gpointer user_data, GimpActionGroupUpdateFunc update_func) { @@ -303,10 +324,11 @@ gimp_action_group_new (Gimp *gimp, g_return_val_if_fail (name != NULL, NULL); group = g_object_new (GIMP_TYPE_ACTION_GROUP, - "gimp", gimp, - "name", name, - "label", label, - "stock-id", stock_id, + "gimp", gimp, + "name", name, + "label", label, + "stock-id", stock_id, + "mnemonics", mnemonics, NULL); group->user_data = user_data; @@ -354,15 +376,21 @@ gimp_action_group_add_actions (GimpActionGroup *group, for (i = 0; i < n_entries; i++) { GimpAction *action; - const gchar *label; + gchar *label; const gchar *tooltip; label = gettext (entries[i].label); tooltip = gettext (entries[i].tooltip); + if (! group->mnemonics) + label = gimp_strip_uline (label); + action = gimp_action_new (entries[i].name, label, tooltip, entries[i].stock_id); + if (! group->mnemonics) + g_free (label); + if (entries[i].callback) g_signal_connect (action, "activate", entries[i].callback, @@ -401,15 +429,21 @@ gimp_action_group_add_toggle_actions (GimpActionGroup *group, for (i = 0; i < n_entries; i++) { GtkToggleAction *action; - const gchar *label; + gchar *label; const gchar *tooltip; label = gettext (entries[i].label); tooltip = gettext (entries[i].tooltip); + if (! group->mnemonics) + label = gimp_strip_uline (label); + action = gtk_toggle_action_new (entries[i].name, label, tooltip, entries[i].stock_id); + if (! group->mnemonics) + g_free (label); + gtk_toggle_action_set_active (action, entries[i].is_active); if (entries[i].callback) @@ -454,16 +488,22 @@ gimp_action_group_add_radio_actions (GimpActionGroup *group, for (i = 0; i < n_entries; i++) { GtkRadioAction *action; - const gchar *label; + gchar *label; const gchar *tooltip; label = gettext (entries[i].label); tooltip = gettext (entries[i].tooltip); + if (! group->mnemonics) + label = gimp_strip_uline (label); + action = gtk_radio_action_new (entries[i].name, label, tooltip, entries[i].stock_id, entries[i].value); + if (! group->mnemonics) + g_free (label); + if (i == 0) first_action = action; @@ -512,16 +552,22 @@ gimp_action_group_add_enum_actions (GimpActionGroup *group, for (i = 0; i < n_entries; i++) { GimpEnumAction *action; - const gchar *label; + gchar *label; const gchar *tooltip; label = gettext (entries[i].label); tooltip = gettext (entries[i].tooltip); + if (! group->mnemonics) + label = gimp_strip_uline (label); + action = gimp_enum_action_new (entries[i].name, label, tooltip, entries[i].stock_id, entries[i].value); + if (! group->mnemonics) + g_free (label); + if (callback) g_signal_connect (action, "selected", callback, @@ -561,16 +607,22 @@ gimp_action_group_add_string_actions (GimpActionGroup *group, for (i = 0; i < n_entries; i++) { GimpStringAction *action; - const gchar *label; + gchar *label; const gchar *tooltip; label = gettext (entries[i].label); tooltip = gettext (entries[i].tooltip); + if (! group->mnemonics) + label = gimp_strip_uline (label); + action = gimp_string_action_new (entries[i].name, label, tooltip, entries[i].stock_id, entries[i].value); + if (! group->mnemonics) + g_free (label); + if (callback) g_signal_connect (action, "selected", callback, @@ -610,13 +662,22 @@ gimp_action_group_add_plug_in_actions (GimpActionGroup *group, for (i = 0; i < n_entries; i++) { GimpPlugInAction *action; + gchar *label; + + label = (gchar *) entries[i].label; + + if (! group->mnemonics) + label = gimp_strip_uline (label); action = gimp_plug_in_action_new (entries[i].name, - entries[i].label, + label, entries[i].tooltip, entries[i].stock_id, entries[i].proc_def); + if (! group->mnemonics) + g_free (label); + if (callback) g_signal_connect (action, "selected", callback, diff --git a/app/widgets/gimpactiongroup.h b/app/widgets/gimpactiongroup.h index 2ff03b46ae..431d7452a9 100644 --- a/app/widgets/gimpactiongroup.h +++ b/app/widgets/gimpactiongroup.h @@ -42,6 +42,7 @@ struct _GimpActionGroup Gimp *gimp; gchar *label; gchar *stock_id; + gboolean mnemonics; gpointer user_data; @@ -134,6 +135,7 @@ GimpActionGroup *gimp_action_group_new (Gimp *gimp, const gchar *name, const gchar *label, const gchar *stock_id, + gboolean mnemonics, gpointer user_data, GimpActionGroupUpdateFunc update_func);