diff --git a/libgimp/gimpgpparams-body.c b/libgimp/gimpgpparams-body.c index 92d3e69475..8db9814668 100644 --- a/libgimp/gimpgpparams-body.c +++ b/libgimp/gimpgpparams-body.c @@ -537,13 +537,12 @@ _gimp_param_spec_to_gp_param_def (GParamSpec *pspec, /* Must be before G_IS_PARAM_SPEC_STRING() because it's a parent. */ else if (pspec_type == GIMP_TYPE_PARAM_CHOICE) { - GimpParamSpecChoice *cspec = GIMP_PARAM_SPEC_CHOICE (pspec); - GParamSpecString *sspec = G_PARAM_SPEC_STRING (pspec); + GParamSpecString *sspec = G_PARAM_SPEC_STRING (pspec); param_def->param_def_type = GP_PARAM_DEF_TYPE_CHOICE; param_def->meta.m_choice.default_val = sspec->default_value; - param_def->meta.m_choice.choice = cspec->choice; + param_def->meta.m_choice.choice = gimp_param_spec_choice_get_choice (pspec); } else if (G_IS_PARAM_SPEC_STRING (pspec) && #ifdef LIBGIMP_COMPILATION diff --git a/libgimp/gimpparamspecs-desc.c b/libgimp/gimpparamspecs-desc.c index 556d301130..be7e7950e2 100644 --- a/libgimp/gimpparamspecs-desc.c +++ b/libgimp/gimpparamspecs-desc.c @@ -57,11 +57,12 @@ gimp_param_spec_unit_desc (GParamSpec *pspec) static gchar * gimp_param_spec_choice_desc (GParamSpec *pspec) { - GimpParamSpecChoice *cspec = GIMP_PARAM_SPEC_CHOICE (pspec); - GList *choices; - GString *desc; + GimpChoice *choice; + GList *choices; + GString *desc; - choices = gimp_choice_list_nicks (cspec->choice); + choice = gimp_param_spec_choice_get_choice (pspec); + choices = gimp_choice_list_nicks (choice); desc = g_string_new ("\n"); g_string_append_printf (desc, "%s", _("Allowed values:")); @@ -72,7 +73,7 @@ gimp_param_spec_choice_desc (GParamSpec *pspec) gchar *label = NULL; gchar *help = NULL; - gimp_choice_get_documentation (cspec->choice, (const gchar *) nick, (const gchar **) &label, (const gchar **) &help); + gimp_choice_get_documentation (choice, (const gchar *) nick, (const gchar **) &label, (const gchar **) &help); nick = g_markup_escape_text (nick, -1); label = g_markup_escape_text (label, -1); help = (help != NULL ? g_markup_escape_text (help, -1) : NULL); diff --git a/libgimp/gimpprocedureconfig.c b/libgimp/gimpprocedureconfig.c index ee0cafee37..0769fe874f 100644 --- a/libgimp/gimpprocedureconfig.c +++ b/libgimp/gimpprocedureconfig.c @@ -671,11 +671,11 @@ gimp_procedure_config_set_color_array (GimpProcedureConfig *config, /** * gimp_procedure_config_get_choice_id: * @config: a #GimpProcedureConfig - * @property_name: the name of a [struct@ParamSpecChoice] property. + * @property_name: the name of a #GimpParamSpecChoice property. * * A utility function which will get the current string value of a - * [struct@ParamSpecChoice] property in @config and convert it to the integer ID - * mapped to this value. + * #GimpParamSpecChoice property in @config and convert it to the + * integer ID mapped to this value. * This makes it easy to work with an Enum type locally, within a plug-in code. * * Since: 3.0 @@ -684,10 +684,10 @@ gint gimp_procedure_config_get_choice_id (GimpProcedureConfig *config, const gchar *property_name) { - GParamSpec *param_spec; - GimpParamSpecChoice *cspec; - gchar *value = NULL; - gint id; + GParamSpec *param_spec; + GimpChoice *choice; + gchar *value = NULL; + gint id; param_spec = g_object_class_find_property (G_OBJECT_GET_CLASS (config), property_name); @@ -711,11 +711,11 @@ gimp_procedure_config_get_choice_id (GimpProcedureConfig *config, return 0; } - cspec = GIMP_PARAM_SPEC_CHOICE (param_spec); + choice = gimp_param_spec_choice_get_choice (param_spec); g_object_get (config, property_name, &value, NULL); - id = gimp_choice_get_id (cspec->choice, value); + id = gimp_choice_get_id (choice, value); g_free (value); diff --git a/libgimpbase/gimpbase.def b/libgimpbase/gimpbase.def index a0701b6c98..2a3257c618 100644 --- a/libgimpbase/gimpbase.def +++ b/libgimpbase/gimpbase.def @@ -140,6 +140,8 @@ EXPORTS gimp_param_parasite_get_type gimp_param_spec_array gimp_param_spec_choice + gimp_param_spec_choice_get_choice + gimp_param_spec_choice_get_default gimp_param_spec_core_object_array gimp_param_spec_core_object_array_get_object_type gimp_param_spec_double_array diff --git a/libgimpbase/gimpchoice.c b/libgimpbase/gimpchoice.c index ce35c8facd..93d435dcaa 100644 --- a/libgimpbase/gimpchoice.c +++ b/libgimpbase/gimpchoice.c @@ -401,6 +401,17 @@ gimp_choice_desc_free (GimpChoiceDesc *desc) * GIMP_TYPE_PARAM_CHOICE */ +#define GIMP_PARAM_SPEC_CHOICE(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), GIMP_TYPE_PARAM_CHOICE, GimpParamSpecChoice)) + +typedef struct _GimpParamSpecChoice GimpParamSpecChoice; + +struct _GimpParamSpecChoice +{ + GParamSpecString parent_instance; + + GimpChoice *choice; +}; + static void gimp_param_choice_class_init (GParamSpecClass *klass); static void gimp_param_choice_init (GParamSpec *pspec); static void gimp_param_choice_finalize (GParamSpec *pspec); @@ -568,3 +579,39 @@ gimp_param_spec_choice (const gchar *name, return G_PARAM_SPEC (choice_spec); } + +/** + * gimp_param_spec_choice_get_choice: + * @pspec: a #GParamSpec to hold a #GimpParamSpecChoice value. + * + * Returns: (transfer none): the choice object defining the valid values. + * + * Since: 3.0 + **/ +GimpChoice * +gimp_param_spec_choice_get_choice (GParamSpec *pspec) +{ + g_return_val_if_fail (GIMP_IS_PARAM_SPEC_CHOICE (pspec), NULL); + + return GIMP_PARAM_SPEC_CHOICE (pspec)->choice; +} + +/** + * gimp_param_spec_choice_get_default: + * @pspec: a #GParamSpec to hold a #GimpParamSpecChoice value. + * + * Returns: the default value. + * + * Since: 3.0 + **/ +const gchar * +gimp_param_spec_choice_get_default (GParamSpec *pspec) +{ + const GValue *value; + + g_return_val_if_fail (GIMP_IS_PARAM_SPEC_CHOICE (pspec), NULL); + + value = g_param_spec_get_default_value (pspec); + + return g_value_get_string (value); +} diff --git a/libgimpbase/gimpchoice.h b/libgimpbase/gimpchoice.h index d8aba915a6..b1e53e3774 100644 --- a/libgimpbase/gimpchoice.h +++ b/libgimpbase/gimpchoice.h @@ -73,26 +73,20 @@ void gimp_choice_set_sensitive (GimpChoice *choice, */ #define GIMP_TYPE_PARAM_CHOICE (gimp_param_choice_get_type ()) -#define GIMP_PARAM_SPEC_CHOICE(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), GIMP_TYPE_PARAM_CHOICE, GimpParamSpecChoice)) #define GIMP_IS_PARAM_SPEC_CHOICE(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), GIMP_TYPE_PARAM_CHOICE)) -typedef struct _GimpParamSpecChoice GimpParamSpecChoice; -struct _GimpParamSpecChoice -{ - GParamSpecString parent_instance; +GType gimp_param_choice_get_type (void) G_GNUC_CONST; - GimpChoice *choice; -}; +GParamSpec * gimp_param_spec_choice (const gchar *name, + const gchar *nick, + const gchar *blurb, + GimpChoice *choice, + const gchar *default_value, + GParamFlags flags); -GType gimp_param_choice_get_type (void) G_GNUC_CONST; - -GParamSpec * gimp_param_spec_choice (const gchar *name, - const gchar *nick, - const gchar *blurb, - GimpChoice *choice, - const gchar *default_value, - GParamFlags flags); +GimpChoice * gimp_param_spec_choice_get_choice (GParamSpec *pspec); +const gchar * gimp_param_spec_choice_get_default (GParamSpec *pspec); G_END_DECLS diff --git a/libgimpconfig/gimpconfig-params.c b/libgimpconfig/gimpconfig-params.c index d8fcfb2983..6e6afd18f5 100644 --- a/libgimpconfig/gimpconfig-params.c +++ b/libgimpconfig/gimpconfig-params.c @@ -96,11 +96,9 @@ gimp_config_param_spec_duplicate (GParamSpec *pspec) if (GIMP_IS_PARAM_SPEC_CHOICE (pspec)) { - GimpParamSpecChoice *cspec = GIMP_PARAM_SPEC_CHOICE (pspec); - copy = gimp_param_spec_choice (name, nick, blurb, - g_object_ref (cspec->choice), - spec->default_value, + g_object_ref (gimp_param_spec_choice_get_choice (pspec)), + gimp_param_spec_choice_get_default (pspec), flags); } else if (GEGL_IS_PARAM_SPEC_FILE_PATH (pspec)) diff --git a/libgimpwidgets/gimppropwidgets.c b/libgimpwidgets/gimppropwidgets.c index d9a36b1c49..7777b30ba2 100644 --- a/libgimpwidgets/gimppropwidgets.c +++ b/libgimpwidgets/gimppropwidgets.c @@ -2622,12 +2622,12 @@ GtkWidget * gimp_prop_choice_combo_box_new (GObject *config, const gchar *property_name) { - GParamSpec *param_spec; - GimpParamSpecChoice *cspec; - GtkWidget *combo_box; - GtkListStore *store; - GList *values; - GList *iter; + GParamSpec *param_spec; + GimpChoice *choice; + GtkWidget *combo_box; + GtkListStore *store; + GList *values; + GList *iter; g_return_val_if_fail (G_IS_OBJECT (config), NULL); g_return_val_if_fail (property_name != NULL, NULL); @@ -2637,14 +2637,14 @@ gimp_prop_choice_combo_box_new (GObject *config, if (! param_spec) return NULL; - cspec = GIMP_PARAM_SPEC_CHOICE (param_spec); - values = gimp_choice_list_nicks (cspec->choice); + choice = gimp_param_spec_choice_get_choice (param_spec); + values = gimp_choice_list_nicks (choice); store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING); for (iter = values; iter; iter = iter->next) { const gchar *nick = iter->data; - const gchar *label = gimp_choice_get_label (cspec->choice, nick); + const gchar *label = gimp_choice_get_label (choice, nick); gtk_list_store_insert_with_values (store, NULL, -1, 0, nick, @@ -2658,8 +2658,8 @@ gimp_prop_choice_combo_box_new (GObject *config, gimp_string_combo_box_set_sensitivity (GIMP_STRING_COMBO_BOX (combo_box), (GimpStringSensitivityFunc) gimp_prop_choice_combo_box_is_sensitive, - cspec->choice, NULL); - g_signal_connect_swapped (cspec->choice, "sensitivity-changed", + choice, NULL); + g_signal_connect_swapped (choice, "sensitivity-changed", G_CALLBACK (gtk_widget_queue_draw), combo_box); @@ -2764,12 +2764,12 @@ GtkWidget * gimp_prop_choice_radio_frame_new (GObject *config, const gchar *property_name) { - GParamSpec *param_spec; - GimpParamSpecChoice *cspec; - GtkWidget *frame; - GimpIntStore *store; - GList *values; - GList *iter; + GParamSpec *param_spec; + GimpChoice *choice; + GtkWidget *frame; + GimpIntStore *store; + GList *values; + GList *iter; g_return_val_if_fail (G_IS_OBJECT (config), NULL); g_return_val_if_fail (property_name != NULL, NULL); @@ -2779,15 +2779,15 @@ gimp_prop_choice_radio_frame_new (GObject *config, if (! param_spec) return NULL; - cspec = GIMP_PARAM_SPEC_CHOICE (param_spec); - values = gimp_choice_list_nicks (cspec->choice); + choice = gimp_param_spec_choice_get_choice (param_spec); + values = gimp_choice_list_nicks (choice); store = g_object_new (GIMP_TYPE_INT_STORE, NULL); for (iter = values; iter; iter = iter->next) { const gchar *nick = iter->data; - const gchar *label = gimp_choice_get_label (cspec->choice, nick); - gint id = gimp_choice_get_id (cspec->choice, nick); + const gchar *label = gimp_choice_get_label (choice, nick); + gint id = gimp_choice_get_id (choice, nick); gtk_list_store_insert_with_values (GTK_LIST_STORE (store), NULL, -1, GIMP_INT_STORE_VALUE, id, @@ -2803,14 +2803,14 @@ gimp_prop_choice_radio_frame_new (GObject *config, gimp_int_radio_frame_set_sensitivity (GIMP_INT_RADIO_FRAME (frame), (GimpIntRadioFrameSensitivityFunc) gimp_prop_widget_choice_is_sensitive, - cspec->choice, NULL); + choice, NULL); g_object_bind_property_full (config, property_name, frame, "value", G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE, gimp_prop_widget_choice_string_to_int, gimp_prop_widget_choice_int_to_string, - cspec->choice, NULL); + choice, NULL); gimp_widget_set_bound_property (frame, config, property_name); diff --git a/plug-ins/common/file-jp2-load.c b/plug-ins/common/file-jp2-load.c index 10c48106ec..207d8c2f07 100644 --- a/plug-ins/common/file-jp2-load.c +++ b/plug-ins/common/file-jp2-load.c @@ -936,11 +936,12 @@ open_dialog (GimpProcedure *procedure, gint num_components, GError **error) { - const gchar *title; - GtkWidget *dialog; - gboolean run; - GimpParamSpecChoice *cspec; - OPJ_COLOR_SPACE color_space = OPJ_CLRSPC_SRGB; + const gchar *title; + GtkWidget *dialog; + gboolean run; + GParamSpec *cspec; + GimpChoice *choice; + OPJ_COLOR_SPACE color_space = OPJ_CLRSPC_SRGB; if (format == OPJ_CODEC_J2K) /* Not having color information is expected. */ @@ -955,21 +956,19 @@ open_dialog (GimpProcedure *procedure, GIMP_PROCEDURE_CONFIG (config), _(title)); - cspec = - GIMP_PARAM_SPEC_CHOICE (g_object_class_find_property (G_OBJECT_GET_CLASS (config), - "colorspace")); - + cspec = g_object_class_find_property (G_OBJECT_GET_CLASS (config), "colorspace"); + choice = gimp_param_spec_choice_get_choice (cspec); if (num_components == 3) { /* Can be RGB, YUV and YCC. */ - gimp_choice_set_sensitive (cspec->choice, "grayscale", FALSE); - gimp_choice_set_sensitive (cspec->choice, "cmyk", FALSE); + gimp_choice_set_sensitive (choice, "grayscale", FALSE); + gimp_choice_set_sensitive (choice, "cmyk", FALSE); } else if (num_components == 4) { /* Can be RGB, YUV and YCC with alpha or CMYK. */ - gimp_choice_set_sensitive (cspec->choice, "grayscale", FALSE); + gimp_choice_set_sensitive (choice, "grayscale", FALSE); } else { @@ -984,7 +983,7 @@ open_dialog (GimpProcedure *procedure, if (num_components == 3 || num_components == 4) { /* By default, RGB is active. */ - gimp_choice_set_sensitive (cspec->choice, "unknown", FALSE); + gimp_choice_set_sensitive (choice, "unknown", FALSE); g_object_set (config, "colorspace", "srgb", NULL); gimp_procedure_dialog_fill (GIMP_PROCEDURE_DIALOG (dialog), diff --git a/plug-ins/common/file-mng.c b/plug-ins/common/file-mng.c index 6a17a3428b..4868279f89 100644 --- a/plug-ins/common/file-mng.c +++ b/plug-ins/common/file-mng.c @@ -1607,14 +1607,14 @@ mng_save_dialog (GimpImage *image, if (num_layers == 1) { - GimpParamSpecChoice *cspec; + GParamSpec *cspec; + GimpChoice *choice; - cspec = - GIMP_PARAM_SPEC_CHOICE (g_object_class_find_property (G_OBJECT_GET_CLASS (config), - "default-chunks")); + cspec = g_object_class_find_property (G_OBJECT_GET_CLASS (config), "default-chunks"); + choice = gimp_param_spec_choice_get_choice (cspec); - gimp_choice_set_sensitive (cspec->choice, "all-png", FALSE); - gimp_choice_set_sensitive (cspec->choice, "all-jng", FALSE); + gimp_choice_set_sensitive (choice, "all-png", FALSE); + gimp_choice_set_sensitive (choice, "all-jng", FALSE); } combo = gimp_procedure_dialog_get_widget (GIMP_PROCEDURE_DIALOG (dialog), diff --git a/plug-ins/file-dds/ddswrite.c b/plug-ins/file-dds/ddswrite.c index a5fce27a03..b78cc420f8 100644 --- a/plug-ins/file-dds/ddswrite.c +++ b/plug-ins/file-dds/ddswrite.c @@ -1748,8 +1748,9 @@ config_notify (GimpProcedureConfig *config, } else if (! strcmp (pspec->name, "save-type")) { - gint savetype; - GimpParamSpecChoice *pspec; + GParamSpec *cspec; + GimpChoice *choice; + gint savetype; savetype = gimp_procedure_config_get_choice_id (config, "save-type"); @@ -1774,9 +1775,9 @@ config_notify (GimpProcedureConfig *config, break; } - pspec = GIMP_PARAM_SPEC_CHOICE (g_object_class_find_property (G_OBJECT_GET_CLASS (config), - "mipmaps")); - gimp_choice_set_sensitive (pspec->choice, "existing", check_mipmaps (savetype)); + cspec = g_object_class_find_property (G_OBJECT_GET_CLASS (config), "mipmaps"); + choice = gimp_param_spec_choice_get_choice (cspec); + gimp_choice_set_sensitive (choice, "existing", check_mipmaps (savetype)); } else if (! strcmp (pspec->name, "mipmaps")) { @@ -1906,10 +1907,11 @@ save_dialog (GimpImage *image, GimpProcedure *procedure, GimpProcedureConfig *config) { - GtkWidget *dialog; - GimpParamSpecChoice *cspec; - GimpImageBaseType base_type; - gboolean run; + GtkWidget *dialog; + GParamSpec *cspec; + GimpChoice *choice; + GimpImageBaseType base_type; + gboolean run; base_type = gimp_image_get_base_type (image); @@ -1956,17 +1958,17 @@ save_dialog (GimpImage *image, gimp_procedure_dialog_get_widget (GIMP_PROCEDURE_DIALOG (dialog), "save-type", G_TYPE_NONE); - cspec = GIMP_PARAM_SPEC_CHOICE (g_object_class_find_property (G_OBJECT_GET_CLASS (config), - "save-type")); - gimp_choice_set_sensitive (cspec->choice, "cube", is_cubemap); - gimp_choice_set_sensitive (cspec->choice, "volume", is_volume); - gimp_choice_set_sensitive (cspec->choice, "array", is_array); + cspec = g_object_class_find_property (G_OBJECT_GET_CLASS (config), "save-type"); + choice = gimp_param_spec_choice_get_choice (cspec); + gimp_choice_set_sensitive (choice, "cube", is_cubemap); + gimp_choice_set_sensitive (choice, "volume", is_volume); + gimp_choice_set_sensitive (choice, "array", is_array); gimp_procedure_dialog_get_widget (GIMP_PROCEDURE_DIALOG (dialog), "mipmaps", G_TYPE_NONE); - cspec = GIMP_PARAM_SPEC_CHOICE (g_object_class_find_property (G_OBJECT_GET_CLASS (config), - "mipmaps")); - gimp_choice_set_sensitive (cspec->choice, "existing", + cspec = g_object_class_find_property (G_OBJECT_GET_CLASS (config), "mipmaps"); + choice = gimp_param_spec_choice_get_choice (cspec); + gimp_choice_set_sensitive (choice, "existing", ! (is_volume || is_cubemap) && is_mipmap_chain_valid); gimp_procedure_dialog_fill (GIMP_PROCEDURE_DIALOG (dialog), diff --git a/plug-ins/file-tiff/file-tiff-export.c b/plug-ins/file-tiff/file-tiff-export.c index d67a27ee4c..2841e3f510 100644 --- a/plug-ins/file-tiff/file-tiff-export.c +++ b/plug-ins/file-tiff/file-tiff-export.c @@ -1234,22 +1234,22 @@ save_dialog (GimpImage *image, gboolean is_multi_layer, gboolean classic_tiff_failed) { - GtkWidget *dialog; - GtkWidget *profile_label; - gchar **parasites; - GimpCompression compression; - gboolean run; - gboolean has_geotiff = FALSE; - gint i; - GimpColorProfile *cmyk_profile = NULL; - GParamSpec *comp_spec; - GimpParamSpecChoice *cspec; + GtkWidget *dialog; + GtkWidget *profile_label; + gchar **parasites; + GimpCompression compression; + gboolean run; + gboolean has_geotiff = FALSE; + gint i; + GimpColorProfile *cmyk_profile = NULL; + GParamSpec *cspec; + GimpChoice *choice; - comp_spec = g_object_class_find_property (G_OBJECT_GET_CLASS (config), "compression"); - cspec = GIMP_PARAM_SPEC_CHOICE (comp_spec); - gimp_choice_set_sensitive (cspec->choice, "ccittfax3", is_monochrome); - gimp_choice_set_sensitive (cspec->choice, "ccittfax4", is_monochrome); - gimp_choice_set_sensitive (cspec->choice, "jpeg", ! is_indexed); + cspec = g_object_class_find_property (G_OBJECT_GET_CLASS (config), "compression"); + choice = gimp_param_spec_choice_get_choice (cspec); + gimp_choice_set_sensitive (choice, "ccittfax3", is_monochrome); + gimp_choice_set_sensitive (choice, "ccittfax4", is_monochrome); + gimp_choice_set_sensitive (choice, "jpeg", ! is_indexed); parasites = gimp_image_get_parasite_list (image); for (i = 0; i < g_strv_length (parasites); i++)