if (remove_prompt (server, prompt_id, &is_extension_prompt)) {
if (is_extension_prompt) {
- GPtrArray *values = NULL;
+ gchar **values;
- if (!extension_values || !extension_values->len ||
- extension_values->pdata[extension_values->len - 1] != NULL) {
- gint ii;
-
- values = g_ptr_array_new ();
- for (ii = 0; extension_values && ii < extension_values->len; ii++) {
- g_ptr_array_add (values, extension_values->pdata[ii]);
- }
- g_ptr_array_add (values, NULL);
- extension_values = values;
- }
+ values = e_named_parameters_to_strv (extension_values);
e_dbus_user_prompter_emit_extension_response (server->priv->dbus_prompter, prompt_id, response,
- (const gchar * const *) extension_values->pdata);
+ (const gchar * const *) values);
if (values)
- g_ptr_array_free (values, TRUE);
+ g_strfreev (values);
} else {
e_dbus_user_prompter_emit_response (server->priv->dbus_prompter, prompt_id, response);
}
GError **error)
{
gboolean success;
- GPtrArray *params;
- gint ii;
+ gchar **params;
g_return_val_if_fail (dbus_prompter != NULL, FALSE);
g_return_val_if_fail (async_data != NULL, FALSE);
-
- params = g_ptr_array_new ();
- for (ii = 0; async_data->in_parameters && ii < async_data->in_parameters->len; ii++) {
- gchar *param = async_data->in_parameters->pdata[ii];
-
- if (param)
- g_ptr_array_add (params, param);
- }
-
- /* NULL-terminated array */
- g_ptr_array_add (params, NULL);
-
+
+ params = e_named_parameters_to_strv (async_data->in_parameters);
success = e_dbus_user_prompter_call_extension_prompt_sync (dbus_prompter,
async_data->dialog_name,
- (const gchar *const *) params->pdata,
+ (const gchar *const *) params,
&async_data->prompt_id,
cancellable,
error);
- g_ptr_array_free (params, TRUE);
+ g_strfreev (params);
return success;
}
ENamedParameters *
e_named_parameters_new (void)
{
- return g_ptr_array_new_with_free_func (g_free);
+ return (ENamedParameters*) g_ptr_array_new_with_free_func (g_free);
}
/**
parameters = e_named_parameters_new ();
for (ii = 0; strv[ii]; ii++) {
- g_ptr_array_add (parameters, g_strdup (strv[ii]));
+ g_ptr_array_add ((GPtrArray *) parameters, g_strdup (strv[ii]));
}
return parameters;
if (!parameters)
return;
- g_ptr_array_free (parameters, TRUE);
+ g_ptr_array_unref ((GPtrArray *) parameters);
}
/**
void
e_named_parameters_clear (ENamedParameters *parameters)
{
+ GPtrArray *array;
g_return_if_fail (parameters != NULL);
- if (parameters->len)
- g_ptr_array_remove_range (parameters, 0, parameters->len);
+ array = (GPtrArray *) parameters;
+
+ if (array->len)
+ g_ptr_array_remove_range (array, 0, array->len);
}
/**
if (from) {
gint ii;
+ GPtrArray *from_array = (GPtrArray *) from;
- for (ii = 0; ii < from->len; ii++) {
- g_ptr_array_add (parameters, g_strdup (from->pdata[ii]));
+ for (ii = 0; ii < from_array->len; ii++) {
+ g_ptr_array_add ((GPtrArray *) parameters, g_strdup (from_array->pdata[ii]));
}
}
}
get_parameter_index (const ENamedParameters *parameters,
const gchar *name)
{
+ GPtrArray *array;
gint ii, name_len;
g_return_val_if_fail (parameters != NULL, -1);
name_len = strlen (name);
- for (ii = 0; ii < parameters->len; ii++) {
- const gchar *name_and_value = g_ptr_array_index (parameters, ii);
+ array = (GPtrArray *) parameters;
+
+ for (ii = 0; ii < array->len; ii++) {
+ const gchar *name_and_value = g_ptr_array_index (array, ii);
if (name_and_value && g_ascii_strncasecmp (name_and_value, name, name_len) == 0 &&
name_and_value[name_len] == ':')
const gchar *name,
const gchar *value)
{
+ GPtrArray *array;
gint index;
gchar *name_and_value;
g_return_if_fail (strchr (name, ':') == NULL);
g_return_if_fail (*name != '\0');
+ array = (GPtrArray *) parameters;
+
index = get_parameter_index (parameters, name);
if (!value) {
if (index != -1)
- g_ptr_array_remove_index (parameters, index);
+ g_ptr_array_remove_index (array, index);
return;
}
name_and_value = g_strconcat (name, ":", value, NULL);
if (index != -1) {
- g_free (parameters->pdata[index]);
- parameters->pdata[index] = name_and_value;
+ g_free (array->pdata[index]);
+ array->pdata[index] = name_and_value;
} else {
- g_ptr_array_add (parameters, name_and_value);
+ g_ptr_array_add (array, name_and_value);
}
}
if (index == -1)
return NULL;
- name_and_value = g_ptr_array_index (parameters, index);
+ name_and_value = g_ptr_array_index ((GPtrArray *) parameters, index);
return name_and_value + strlen (name) + 1;
}
return g_ascii_strcasecmp (stored_value, value) == 0;
}
+
+/**
+ * e_named_parameters_to_strv:
+ * @parameters: an #ENamedParameters
+ *
+ * Returns: (transfer full): Contents of @parameters as a null-terminated strv
+ *
+ * Since: 3.8
+ */
+gchar **
+e_named_parameters_to_strv (const ENamedParameters *parameters)
+{
+ GPtrArray *array = (GPtrArray *) parameters;
+ GPtrArray *ret = g_ptr_array_new ();
+
+ if (array) {
+ guint i;
+ for (i = 0; i < array->len; i++) {
+ g_ptr_array_add (ret, g_strdup (array->pdata[i]));
+ }
+ }
+
+ g_ptr_array_add (ret, NULL);
+
+ return (gchar **) g_ptr_array_free (ret, FALSE);
+}
+
+static ENamedParameters *
+e_named_parameters_ref (ENamedParameters *params)
+{
+ return (ENamedParameters *) g_ptr_array_ref ((GPtrArray *) params);
+}
+
+static void
+e_named_parameters_unref (ENamedParameters *params)
+{
+ g_ptr_array_unref ((GPtrArray *) params);
+}
+
+G_DEFINE_BOXED_TYPE (ENamedParameters, e_named_parameters, e_named_parameters_ref, e_named_parameters_unref);