Commit 8df06eb5 authored by Michael Natterer's avatar Michael Natterer 😴

app: get rid of GParameter and g_object_newv() (deprecated in GLib 2.54)

Replace gimp_parameter_*() utility functions with equivalent
gimp_properties_*() functions which deal with separate arrays of names
and values, and use g_object_new_with_properties() instead of
g_object_newv().
parent 2b65ff45
......@@ -236,37 +236,42 @@ gimp_get_default_unit (void)
return GIMP_UNIT_MM;
}
GParameter *
gimp_parameters_append (GType object_type,
GParameter *params,
gint *n_params,
gchar **
gimp_properties_append (GType object_type,
gint *n_properties,
gchar **names,
GValue **values,
...)
{
va_list args;
g_return_val_if_fail (g_type_is_a (object_type, G_TYPE_OBJECT), NULL);
g_return_val_if_fail (n_params != NULL, NULL);
g_return_val_if_fail (params != NULL || *n_params == 0, NULL);
g_return_val_if_fail (n_properties != NULL, NULL);
g_return_val_if_fail (names != NULL || *n_properties == 0, NULL);
g_return_val_if_fail (values != NULL || *n_properties == 0, NULL);
va_start (args, n_params);
params = gimp_parameters_append_valist (object_type, params, n_params, args);
va_start (args, values);
names = gimp_properties_append_valist (object_type, n_properties,
names, values, args);
va_end (args);
return params;
return names;
}
GParameter *
gimp_parameters_append_valist (GType object_type,
GParameter *params,
gint *n_params,
va_list args)
gchar **
gimp_properties_append_valist (GType object_type,
gint *n_properties,
gchar **names,
GValue **values,
va_list args)
{
GObjectClass *object_class;
gchar *param_name;
g_return_val_if_fail (g_type_is_a (object_type, G_TYPE_OBJECT), NULL);
g_return_val_if_fail (n_params != NULL, NULL);
g_return_val_if_fail (params != NULL || *n_params == 0, NULL);
g_return_val_if_fail (n_properties != NULL, NULL);
g_return_val_if_fail (names != NULL || *n_properties == 0, NULL);
g_return_val_if_fail (values != NULL || *n_properties == 0, NULL);
object_class = g_type_class_ref (object_type);
......@@ -274,6 +279,7 @@ gimp_parameters_append_valist (GType object_type,
while (param_name)
{
GValue *value;
gchar *error = NULL;
GParamSpec *pspec = g_object_class_find_property (object_class,
param_name);
......@@ -285,47 +291,57 @@ gimp_parameters_append_valist (GType object_type,
break;
}
params = g_renew (GParameter, params, *n_params + 1);
names = g_renew (gchar *, names, *n_properties + 1);
*values = g_renew (GValue, *values, *n_properties + 1);
params[*n_params].name = param_name;
params[*n_params].value.g_type = 0;
value = &((*values)[*n_properties]);
g_value_init (&params[*n_params].value, G_PARAM_SPEC_VALUE_TYPE (pspec));
names[*n_properties] = g_strdup (param_name);
value->g_type = 0;
G_VALUE_COLLECT (&params[*n_params].value, args, 0, &error);
g_value_init (value, G_PARAM_SPEC_VALUE_TYPE (pspec));
G_VALUE_COLLECT (value, args, 0, &error);
if (error)
{
g_warning ("%s: %s", G_STRFUNC, error);
g_free (error);
g_value_unset (&params[*n_params].value);
g_free (names[*n_properties]);
g_value_unset (value);
break;
}
*n_params = *n_params + 1;
*n_properties = *n_properties + 1;
param_name = va_arg (args, gchar *);
}
g_type_class_unref (object_class);
return params;
return names;
}
void
gimp_parameters_free (GParameter *params,
gint n_params)
gimp_properties_free (gint n_properties,
gchar **names,
GValue *values)
{
g_return_if_fail (params != NULL || n_params == 0);
g_return_if_fail (names != NULL || n_properties == 0);
g_return_if_fail (values != NULL || n_properties == 0);
if (params)
if (names && values)
{
gint i;
for (i = 0; i < n_params; i++)
g_value_unset (&params[i].value);
for (i = 0; i < n_properties; i++)
{
g_free (names[i]);
g_value_unset (&values[i]);
}
g_free (params);
g_free (names);
g_free (values);
}
}
......
......@@ -38,16 +38,19 @@ gchar * gimp_get_backtrace (void);
gchar * gimp_get_default_language (const gchar *category);
GimpUnit gimp_get_default_unit (void);
GParameter * gimp_parameters_append (GType object_type,
GParameter *params,
gint *n_params,
gchar ** gimp_properties_append (GType object_type,
gint *n_properties,
gchar **names,
GValue **values,
...) G_GNUC_NULL_TERMINATED;
GParameter * gimp_parameters_append_valist (GType object_type,
GParameter *params,
gint *n_params,
gchar ** gimp_properties_append_valist (GType object_type,
gint *n_properties,
gchar **names,
GValue **values,
va_list args);
void gimp_parameters_free (GParameter *params,
gint n_params);
void gimp_properties_free (gint n_properties,
gchar **names,
GValue *values);
gchar * gimp_markup_extract_text (const gchar *markup);
......
......@@ -360,11 +360,12 @@ gimp_image_undo_push (GimpImage *image,
GimpDirtyMask dirty_mask,
...)
{
GimpImagePrivate *private;
GParameter *params = NULL;
gint n_params = 0;
va_list args;
GimpUndo *undo;
GimpImagePrivate *private;
gint n_properties = 0;
gchar **names = NULL;
GValue *values = NULL;
va_list args;
GimpUndo *undo;
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
g_return_val_if_fail (g_type_is_a (object_type, GIMP_TYPE_UNDO), NULL);
......@@ -384,20 +385,26 @@ gimp_image_undo_push (GimpImage *image,
if (! name)
name = gimp_undo_type_to_name (undo_type);
params = gimp_parameters_append (object_type, params, &n_params,
"name", name,
"image", image,
"undo-type", undo_type,
"dirty-mask", dirty_mask,
NULL);
names = gimp_properties_append (object_type,
&n_properties, names, &values,
"name", name,
"image", image,
"undo-type", undo_type,
"dirty-mask", dirty_mask,
NULL);
va_start (args, dirty_mask);
params = gimp_parameters_append_valist (object_type, params, &n_params, args);
names = gimp_properties_append_valist (object_type,
&n_properties, names, &values,
args);
va_end (args);
undo = g_object_newv (object_type, n_params, params);
undo = (GimpUndo *) g_object_new_with_properties (object_type,
n_properties,
(const gchar **) names,
(const GValue *) values);
gimp_parameters_free (params, n_params);
gimp_properties_free (n_properties, names, values);
/* nuke the redo stack */
gimp_image_undo_free_redo (image);
......
......@@ -519,31 +519,37 @@ gui_pdb_dialog_new (Gimp *gimp,
if (object)
{
GParameter *params = NULL;
gint n_params = 0;
gint n_properties = 0;
gchar **names = NULL;
GValue *values = NULL;
GtkWidget *dialog;
GtkWidget *view;
params = gimp_parameters_append (dialog_type, params, &n_params,
"title", title,
"role", dialog_role,
"help-func", gimp_standard_help_func,
"help-id", help_id,
"pdb", gimp->pdb,
"context", context,
"select-type", gimp_container_get_children_type (container),
"initial-object", object,
"callback-name", callback_name,
"menu-factory", global_menu_factory,
NULL);
params = gimp_parameters_append_valist (dialog_type,
params, &n_params,
args);
dialog = g_object_newv (dialog_type, n_params, params);
gimp_parameters_free (params, n_params);
names = gimp_properties_append (dialog_type,
&n_properties, names, &values,
"title", title,
"role", dialog_role,
"help-func", gimp_standard_help_func,
"help-id", help_id,
"pdb", gimp->pdb,
"context", context,
"select-type", gimp_container_get_children_type (container),
"initial-object", object,
"callback-name", callback_name,
"menu-factory", global_menu_factory,
NULL);
names = gimp_properties_append_valist (dialog_type,
&n_properties, names, &values,
args);
dialog = (GtkWidget *)
g_object_new_with_properties (dialog_type,
n_properties,
(const gchar **) names,
(const GValue *) values);
gimp_properties_free (n_properties, names, values);
view = GIMP_PDB_DIALOG (dialog)->view;
if (view)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment