diff options
author | Steve Frécinaux <code@istique.net> | 2010-09-01 00:18:46 +0200 |
---|---|---|
committer | Steve Frécinaux <code@istique.net> | 2010-09-01 00:26:01 +0200 |
commit | 83c9a62db4e0df41c80a7166fcd81a53854c308c (patch) | |
tree | 1940e473a46183716342c2698ee0b9cd010e1afe | |
parent | c6acccd52b830dff26741366d5e84b0c45df0e7b (diff) | |
download | libpeas-83c9a62db4e0df41c80a7166fcd81a53854c308c.tar.gz |
Use GArgument instead of va_list in peas_extension_set_call()
This allows us to drop our G_VA_COPY usage, as we now just pass the
same GArgument array several times instead.
-rw-r--r-- | docs/reference/libpeas-sections.txt | 1 | ||||
-rw-r--r-- | libpeas/peas-extension-set.c | 50 | ||||
-rw-r--r-- | libpeas/peas-extension-set.h | 7 |
3 files changed, 49 insertions, 9 deletions
diff --git a/docs/reference/libpeas-sections.txt b/docs/reference/libpeas-sections.txt index d801468..ab88799 100644 --- a/docs/reference/libpeas-sections.txt +++ b/docs/reference/libpeas-sections.txt @@ -112,6 +112,7 @@ PeasExtensionSetClass PeasParameterArray peas_extension_set_call peas_extension_set_call_valist +peas_extension_set_callv peas_extension_set_get_extension peas_extension_set_new peas_extension_set_newv diff --git a/libpeas/peas-extension-set.c b/libpeas/peas-extension-set.c index d2e6418..ea5a19e 100644 --- a/libpeas/peas-extension-set.c +++ b/libpeas/peas-extension-set.c @@ -29,6 +29,7 @@ #include "peas-plugin-info.h" #include "peas-marshal.h" #include "peas-helpers.h" +#include "peas-introspection.h" /** * SECTION:peas-extension-set @@ -308,17 +309,17 @@ peas_extension_set_finalize (GObject *object) static gboolean peas_extension_set_call_real (PeasExtensionSet *set, - const gchar *method, - va_list args) + const gchar *method_name, + GArgument *args) { gboolean ret = TRUE; GList *l; - va_list args_copy; + GArgument dummy; for (l = set->priv->extensions; l; l = l->next) { - G_VA_COPY (args_copy, args); - ret = peas_extension_call_valist (((ExtensionItem *) l->data)->exten, method, args_copy) && ret; + ExtensionItem *item = (ExtensionItem *) l->data; + ret = peas_extension_callv (item->exten, method_name, args, &dummy) && ret; } return ret; @@ -481,7 +482,7 @@ peas_extension_set_call (PeasExtensionSet *set, * peas_extension_set_call_valist: * @set: A #PeasExtensionSet. * @method_name: the name of the method that should be called. - * @args: the arguments for the method. + * @va_args: the arguments for the method. * * Call a method on all the #PeasExtension instances contained in @set. * @@ -492,7 +493,42 @@ peas_extension_set_call (PeasExtensionSet *set, gboolean peas_extension_set_call_valist (PeasExtensionSet *set, const gchar *method_name, - va_list args) + va_list va_args) +{ + GICallableInfo *callable_info; + GArgument *args; + gboolean ret; + + g_return_val_if_fail (PEAS_IS_EXTENSION_SET (set), FALSE); + g_return_val_if_fail (method_name != NULL, FALSE); + + callable_info = peas_gi_get_method_info (set->priv->exten_type, method_name); + args = g_new (GArgument, g_callable_info_get_n_args (callable_info)); + peas_gi_valist_to_arguments (callable_info, va_args, args, NULL); + + ret = peas_extension_set_callv (set, method_name, args); + + g_free (args); + + return ret; +} + +/** + * peas_extension_set_callv: + * @set: A #PeasExtensionSet. + * @method_name: the name of the method that should be called. + * @args: the arguments for the method. + * + * Call a method on all the #PeasExtension instances contained in @set. + * + * See peas_extension_callv() for more information. + * + * Return value: %TRUE on successful call. + */ +gboolean +peas_extension_set_callv (PeasExtensionSet *set, + const gchar *method_name, + GArgument *args) { PeasExtensionSetClass *klass; diff --git a/libpeas/peas-extension-set.h b/libpeas/peas-extension-set.h index 33c3bf4..5bee385 100644 --- a/libpeas/peas-extension-set.h +++ b/libpeas/peas-extension-set.h @@ -59,7 +59,7 @@ struct _PeasExtensionSetClass { /* Virtual public methods */ gboolean (*call) (PeasExtensionSet *set, const gchar *method, - va_list args); + GArgument *args); /* Signals */ void (*extension_added) (PeasExtensionSet *set, @@ -93,7 +93,10 @@ gboolean peas_extension_set_call (PeasExtensionSet *set, ...); gboolean peas_extension_set_call_valist (PeasExtensionSet *set, const gchar *method_name, - va_list args); + va_list va_args); +gboolean peas_extension_set_callv (PeasExtensionSet *set, + const gchar *method_name, + GArgument *args); PeasExtension *peas_extension_set_get_extension (PeasExtensionSet *set, PeasPluginInfo *info); |