From 2aa325a55ebd13b6368fc7deecbd9941f9b349db Mon Sep 17 00:00:00 2001 From: Jehan Date: Mon, 23 Jan 2023 23:25:55 +0100 Subject: [PATCH] libgimpwidgets: new gimp_spin_scale_get_mnemonic_keyval() function. This solves part of #8524, for properties displaying as spin scale, which have a mnemonic, yet our code was not able to tell so. --- libgimp/gimpproceduredialog.c | 9 +++++--- libgimpwidgets/gimpspinscale.c | 17 ++++++++++++++ libgimpwidgets/gimpspinscale.h | 41 +++++++++++++++++----------------- libgimpwidgets/gimpwidgets.def | 1 + 4 files changed, 45 insertions(+), 23 deletions(-) diff --git a/libgimp/gimpproceduredialog.c b/libgimp/gimpproceduredialog.c index 935679b9b5..695868e5c2 100644 --- a/libgimp/gimpproceduredialog.c +++ b/libgimp/gimpproceduredialog.c @@ -2106,9 +2106,12 @@ gimp_procedure_dialog_check_mnemonic (GimpProcedureDialog *dialog, g_list_free (labels); } - if (label && - (mnemonic = gtk_label_get_mnemonic_keyval (GTK_LABEL (label))) && - mnemonic != GDK_KEY_VoidSymbol) + if (label) + mnemonic = gtk_label_get_mnemonic_keyval (GTK_LABEL (label)); + else if (GIMP_IS_SPIN_SCALE (widget)) + mnemonic = gimp_spin_scale_get_mnemonic_keyval (GIMP_SPIN_SCALE (widget)); + + if (mnemonic != GDK_KEY_VoidSymbol) { duplicate = g_hash_table_lookup (dialog->priv->core_mnemonics, GINT_TO_POINTER (mnemonic)); if (duplicate && g_strcmp0 (duplicate, id ? id : core_id) != 0) diff --git a/libgimpwidgets/gimpspinscale.c b/libgimpwidgets/gimpspinscale.c index 99c61902a7..9e5e6aa8b9 100644 --- a/libgimpwidgets/gimpspinscale.c +++ b/libgimpwidgets/gimpspinscale.c @@ -1484,3 +1484,20 @@ gimp_spin_scale_get_constrain_drag (GimpSpinScale *scale) return GET_PRIVATE (scale)->constrain_drag; } + +/** + * gimp_spin_scale_get_mnemonic_keyval: + * @scale: the #GimpSpinScale. + * + * If @scale has been set with a mnemonic key in its label text, this function + * returns the keyval used for the mnemonic accelerator. + * + * Returns: the keyval usable for accelerators, or [const@Gdk.KEY_VoidSymbol]. + */ +const guint +gimp_spin_scale_get_mnemonic_keyval (GimpSpinScale *scale) +{ + g_return_val_if_fail (GIMP_IS_SPIN_SCALE (scale), GDK_KEY_VoidSymbol); + + return GET_PRIVATE (scale)->mnemonic_keyval; +} diff --git a/libgimpwidgets/gimpspinscale.h b/libgimpwidgets/gimpspinscale.h index bce7e5f0b7..b0190cf15a 100644 --- a/libgimpwidgets/gimpspinscale.h +++ b/libgimpwidgets/gimpspinscale.h @@ -52,32 +52,33 @@ struct _GimpSpinScaleClass }; -GType gimp_spin_scale_get_type (void) G_GNUC_CONST; +GType gimp_spin_scale_get_type (void) G_GNUC_CONST; -GtkWidget * gimp_spin_scale_new (GtkAdjustment *adjustment, - const gchar *label, - gint digits); +GtkWidget * gimp_spin_scale_new (GtkAdjustment *adjustment, + const gchar *label, + gint digits); -void gimp_spin_scale_set_label (GimpSpinScale *scale, - const gchar *label); -const gchar * gimp_spin_scale_get_label (GimpSpinScale *scale); +void gimp_spin_scale_set_label (GimpSpinScale *scale, + const gchar *label); +const gchar * gimp_spin_scale_get_label (GimpSpinScale *scale); -void gimp_spin_scale_set_scale_limits (GimpSpinScale *scale, - gdouble lower, - gdouble upper); -void gimp_spin_scale_unset_scale_limits (GimpSpinScale *scale); -gboolean gimp_spin_scale_get_scale_limits (GimpSpinScale *scale, - gdouble *lower, - gdouble *upper); +void gimp_spin_scale_set_scale_limits (GimpSpinScale *scale, + gdouble lower, + gdouble upper); +void gimp_spin_scale_unset_scale_limits (GimpSpinScale *scale); +gboolean gimp_spin_scale_get_scale_limits (GimpSpinScale *scale, + gdouble *lower, + gdouble *upper); -void gimp_spin_scale_set_gamma (GimpSpinScale *scale, - gdouble gamma); -gdouble gimp_spin_scale_get_gamma (GimpSpinScale *scale); +void gimp_spin_scale_set_gamma (GimpSpinScale *scale, + gdouble gamma); +gdouble gimp_spin_scale_get_gamma (GimpSpinScale *scale); -void gimp_spin_scale_set_constrain_drag (GimpSpinScale *scale, - gboolean constrain); -gboolean gimp_spin_scale_get_constrain_drag (GimpSpinScale *scale); +void gimp_spin_scale_set_constrain_drag (GimpSpinScale *scale, + gboolean constrain); +gboolean gimp_spin_scale_get_constrain_drag (GimpSpinScale *scale); +const guint gimp_spin_scale_get_mnemonic_keyval (GimpSpinScale *scale); G_END_DECLS diff --git a/libgimpwidgets/gimpwidgets.def b/libgimpwidgets/gimpwidgets.def index ff45ddbfde..f39f327758 100644 --- a/libgimpwidgets/gimpwidgets.def +++ b/libgimpwidgets/gimpwidgets.def @@ -454,6 +454,7 @@ EXPORTS gimp_spin_scale_get_constrain_drag gimp_spin_scale_get_gamma gimp_spin_scale_get_label + gimp_spin_scale_get_mnemonic_keyval gimp_spin_scale_get_scale_limits gimp_spin_scale_get_type gimp_spin_scale_new