From 2e91ba3b3ec7f87d5090a9bd839808b3d03bb3fe Mon Sep 17 00:00:00 2001 From: Johan Dahlin Date: Sat, 5 Jun 2010 12:40:15 -0300 Subject: [PATCH] [girepository] Move GIArgInfo out of ginfo.ch --- Makefile.am | 2 + giarginfo.c | 301 +++++++++++++++++++++++++++++++++++++++++++++++++ giarginfo.h | 50 ++++++++ ginfo.c | 275 -------------------------------------------- girepository.h | 56 +-------- gitypes.h | 35 ++++++ 6 files changed, 389 insertions(+), 330 deletions(-) create mode 100644 giarginfo.c create mode 100644 giarginfo.h diff --git a/Makefile.am b/Makefile.am index b173dba51..07d70d0ac 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,5 +1,6 @@ girepodir = $(includedir)/gobject-introspection-1.0/ girepo_HEADERS = \ + giarginfo.h \ gibaseinfo.h \ gicallableinfo.h \ gifunctioninfo.h \ @@ -14,6 +15,7 @@ noinst_LTLIBRARIES = libgirepository-parser.la libgirepository_1_0_la_SOURCES = \ gdump.c \ gfield.c \ + giarginfo.c \ gibaseinfo.c \ gifunctioninfo.c \ gicallableinfo.c \ diff --git a/giarginfo.c b/giarginfo.c new file mode 100644 index 000000000..40dcd52b5 --- /dev/null +++ b/giarginfo.c @@ -0,0 +1,301 @@ +/* GObject introspection: Argument implementation + * + * Copyright (C) 2005 Matthias Clasen + * Copyright (C) 2008,2009 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include + +#include "gitypelib-internal.h" +#include "girepository-private.h" + + +/* GIArgInfo function */ + +/** + * SECTION:giarginfo + * @Short_description: Struct representing an argument + * @Title: GIArgInfo + * + * GIArgInfo represents an argument. An argument is always + * part of a #GICallableInfo. + * + * + */ + +/** + * g_arg_info_get_direction: + * @info: a #GIArgInfo + * + * Obtain the direction of the argument. Check #GIDirection for possible + * direction values. + * + * Returns: the direction + */ +GIDirection +g_arg_info_get_direction (GIArgInfo *info) +{ + GIRealInfo *rinfo = (GIRealInfo *)info; + ArgBlob *blob; + + g_return_val_if_fail (info != NULL, -1); + g_return_val_if_fail (GI_IS_ARG_INFO (info), -1); + + blob = (ArgBlob *)&rinfo->typelib->data[rinfo->offset]; + + if (blob->in && blob->out) + return GI_DIRECTION_INOUT; + else if (blob->out) + return GI_DIRECTION_OUT; + else + return GI_DIRECTION_IN; +} + +/** + * g_arg_info_is_return_value: + * @info: a #GIArgInfo + * + * Obtain if the argument is a return value. It can either be a + * parameter or a return value. + * + * Returns: %TRUE if it is a return value + */ +gboolean +g_arg_info_is_return_value (GIArgInfo *info) +{ + GIRealInfo *rinfo = (GIRealInfo *)info; + ArgBlob *blob; + + g_return_val_if_fail (info != NULL, FALSE); + g_return_val_if_fail (GI_IS_ARG_INFO (info), FALSE); + + blob = (ArgBlob *)&rinfo->typelib->data[rinfo->offset]; + + return blob->return_value; +} + +/** + * g_arg_info_is_caller_allocates: + * @info: a #GIArgInfo + * + * Obtain if the argument is a pointer to a struct or object that will + * receive an output of a function. The default assumption for + * %GI_DIRECTION_OUT arguments which have allocation is that the + * callee allocates; if this is %TRUE, then the caller must allocate. + * + * Returns: %TRUE if caller is required to have allocated the argument + */ +gboolean +g_arg_info_is_caller_allocates (GIArgInfo *info) +{ + GIRealInfo *rinfo = (GIRealInfo *)info; + ArgBlob *blob; + + g_return_val_if_fail (info != NULL, FALSE); + g_return_val_if_fail (GI_IS_ARG_INFO (info), FALSE); + + blob = (ArgBlob *)&rinfo->typelib->data[rinfo->offset]; + + return blob->caller_allocates; +} + +/** + * g_arg_info_is_optional: + * @info: a #GIArgInfo + * + * Obtain if the argument is optional. + * + * Returns: %TRUE if it is an optional argument + */ +gboolean +g_arg_info_is_optional (GIArgInfo *info) +{ + GIRealInfo *rinfo = (GIRealInfo *)info; + ArgBlob *blob; + + g_return_val_if_fail (info != NULL, FALSE); + g_return_val_if_fail (GI_IS_ARG_INFO (info), FALSE); + + blob = (ArgBlob *)&rinfo->typelib->data[rinfo->offset]; + + return blob->optional; +} + +/** + * g_arg_info_may_be_null: + * @info: a #GIArgInfo + * + * Obtain if the argument accepts %NULL. + * + * Returns: %TRUE if it accepts %NULL + */ +gboolean +g_arg_info_may_be_null (GIArgInfo *info) +{ + GIRealInfo *rinfo = (GIRealInfo *)info; + ArgBlob *blob; + + g_return_val_if_fail (info != NULL, FALSE); + g_return_val_if_fail (GI_IS_ARG_INFO (info), FALSE); + + blob = (ArgBlob *)&rinfo->typelib->data[rinfo->offset]; + + return blob->allow_none; +} + +/** + * g_arg_info_get_ownership_transfer: + * @info: a #GIArgInfo + * + * Obtain the ownership transfer for this argument. + * #GITransfer contains a list of possible values. + * + * Returns: the transfer + */ +GITransfer +g_arg_info_get_ownership_transfer (GIArgInfo *info) +{ + GIRealInfo *rinfo = (GIRealInfo *)info; + ArgBlob *blob; + + g_return_val_if_fail (info != NULL, -1); + g_return_val_if_fail (GI_IS_ARG_INFO (info), -1); + + blob = (ArgBlob *)&rinfo->typelib->data[rinfo->offset]; + + if (blob->transfer_ownership) + return GI_TRANSFER_EVERYTHING; + else if (blob->transfer_container_ownership) + return GI_TRANSFER_CONTAINER; + else + return GI_TRANSFER_NOTHING; +} + +/** + * g_arg_info_get_scope: + * @info: a #GIArgInfo + * + * Obtain the scope type for this argument. The scope type explains + * how a callback is going to be invoked, most importantly when + * the resources required to invoke it can be freed. + * #GIScopeType contains a list of possible values. + * + * Returns: the scope type + */ +GIScopeType +g_arg_info_get_scope (GIArgInfo *info) +{ + GIRealInfo *rinfo = (GIRealInfo *)info; + ArgBlob *blob; + + g_return_val_if_fail (info != NULL, -1); + g_return_val_if_fail (GI_IS_ARG_INFO (info), -1); + + blob = (ArgBlob *)&rinfo->typelib->data[rinfo->offset]; + + return blob->scope; +} + +/** + * g_arg_info_get_closure: + * @info: a #GIArgInfo + * + * Obtain the index of the user data argument. This is only valid + * for arguments which are callbacks. + * + * Returns: index of the user data argument or -1 if there is none + */ +gint +g_arg_info_get_closure (GIArgInfo *info) +{ + GIRealInfo *rinfo = (GIRealInfo *)info; + ArgBlob *blob; + + g_return_val_if_fail (info != NULL, -1); + g_return_val_if_fail (GI_IS_ARG_INFO (info), -1); + + blob = (ArgBlob *)&rinfo->typelib->data[rinfo->offset]; + + return blob->closure; +} + +/** + * g_arg_info_get_destroy: + * @info: a #GIArgInfo + * + * Obtains the index of the #GDestroyNotify argument. This is only valid + * for arguments which are callbacks. + * + * Returns: index of the #GDestroyNotify argument or -1 if there is none + */ +gint +g_arg_info_get_destroy (GIArgInfo *info) +{ + GIRealInfo *rinfo = (GIRealInfo *)info; + ArgBlob *blob; + + g_return_val_if_fail (info != NULL, -1); + g_return_val_if_fail (GI_IS_ARG_INFO (info), -1); + + blob = (ArgBlob *)&rinfo->typelib->data[rinfo->offset]; + + return blob->destroy; +} + +/** + * g_arg_info_get_type: + * @info: a #GIArgInfo + * + * Obtain the type information for @info. + * + * Returns: (transfer full): the #GIArgInfo, free it with + * g_base_info_unref() when done. + */ +GITypeInfo * +g_arg_info_get_type (GIArgInfo *info) +{ + GIRealInfo *rinfo = (GIRealInfo *)info; + + g_return_val_if_fail (info != NULL, NULL); + g_return_val_if_fail (GI_IS_ARG_INFO (info), NULL); + + return _g_type_info_new ((GIBaseInfo*)info, rinfo->typelib, rinfo->offset + G_STRUCT_OFFSET (ArgBlob, arg_type)); +} + +/** + * g_arg_info_load_type: + * @info: a #GIArgInfo + * @type: (out caller-allocates): Initialized with information about type of @info + * + * Obtain information about a the type of given argument @info; this + * function is a variant of g_arg_info_get_type() designed for stack + * allocation. + * + * The initialized @type must not be referenced after @info is deallocated. + */ +void +g_arg_info_load_type (GIArgInfo *info, + GITypeInfo *type) +{ + GIRealInfo *rinfo = (GIRealInfo*) info; + + g_return_if_fail (info != NULL); + g_return_if_fail (GI_IS_ARG_INFO (info)); + + _g_type_info_init (type, (GIBaseInfo*)info, rinfo->typelib, rinfo->offset + G_STRUCT_OFFSET (ArgBlob, arg_type)); +} diff --git a/giarginfo.h b/giarginfo.h new file mode 100644 index 000000000..e38d16fe1 --- /dev/null +++ b/giarginfo.h @@ -0,0 +1,50 @@ +/* GObject introspection: Argument + * + * Copyright (C) 2005 Matthias Clasen + * Copyright (C) 2008,2009 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef __GIARGINFO_H__ +#define __GIARGINFO_H__ + +#if !defined (__GIREPOSITORY_H_INSIDE__) && !defined (GI_COMPILATION) +#error "Only can be included directly." +#endif + +#include + +G_BEGIN_DECLS + +#define GI_IS_ARG_INFO(info) \ + (g_base_info_get_type((GIBaseInfo*)info) == GI_INFO_TYPE_ARG) + +GIDirection g_arg_info_get_direction (GIArgInfo *info); +gboolean g_arg_info_is_return_value (GIArgInfo *info); +gboolean g_arg_info_is_optional (GIArgInfo *info); +gboolean g_arg_info_is_caller_allocates (GIArgInfo *info); +gboolean g_arg_info_may_be_null (GIArgInfo *info); +GITransfer g_arg_info_get_ownership_transfer (GIArgInfo *info); +GIScopeType g_arg_info_get_scope (GIArgInfo *info); +gint g_arg_info_get_closure (GIArgInfo *info); +gint g_arg_info_get_destroy (GIArgInfo *info); +GITypeInfo * g_arg_info_get_type (GIArgInfo *info); +void g_arg_info_load_type (GIArgInfo *info, + GITypeInfo *type); +G_END_DECLS + +#endif /* __GIARGINFO_H__ */ diff --git a/ginfo.c b/ginfo.c index 7a6ecbfe1..3b55b80a7 100644 --- a/ginfo.c +++ b/ginfo.c @@ -29,281 +29,6 @@ #include "girepository-private.h" -/* GIArgInfo function */ - -/** - * SECTION:giarginfo - * @Short_description: Struct representing an argument - * @Title: GIArgInfo - * - * GIArgInfo represents an argument. An argument is always - * part of a #GICallableInfo. - * - * - */ - -/** - * g_arg_info_get_direction: - * @info: a #GIArgInfo - * - * Obtain the direction of the argument. Check #GIDirection for possible - * direction values. - * - * Returns: the direction - */ -GIDirection -g_arg_info_get_direction (GIArgInfo *info) -{ - GIRealInfo *rinfo = (GIRealInfo *)info; - ArgBlob *blob; - - g_return_val_if_fail (info != NULL, -1); - g_return_val_if_fail (GI_IS_ARG_INFO (info), -1); - - blob = (ArgBlob *)&rinfo->typelib->data[rinfo->offset]; - - if (blob->in && blob->out) - return GI_DIRECTION_INOUT; - else if (blob->out) - return GI_DIRECTION_OUT; - else - return GI_DIRECTION_IN; -} - -/** - * g_arg_info_is_return_value: - * @info: a #GIArgInfo - * - * Obtain if the argument is a return value. It can either be a - * parameter or a return value. - * - * Returns: %TRUE if it is a return value - */ -gboolean -g_arg_info_is_return_value (GIArgInfo *info) -{ - GIRealInfo *rinfo = (GIRealInfo *)info; - ArgBlob *blob; - - g_return_val_if_fail (info != NULL, FALSE); - g_return_val_if_fail (GI_IS_ARG_INFO (info), FALSE); - - blob = (ArgBlob *)&rinfo->typelib->data[rinfo->offset]; - - return blob->return_value; -} - -/** - * g_arg_info_is_caller_allocates: - * @info: a #GIArgInfo - * - * Obtain if the argument is a pointer to a struct or object that will - * receive an output of a function. The default assumption for - * %GI_DIRECTION_OUT arguments which have allocation is that the - * callee allocates; if this is %TRUE, then the caller must allocate. - * - * Returns: %TRUE if caller is required to have allocated the argument - */ -gboolean -g_arg_info_is_caller_allocates (GIArgInfo *info) -{ - GIRealInfo *rinfo = (GIRealInfo *)info; - ArgBlob *blob; - - g_return_val_if_fail (info != NULL, FALSE); - g_return_val_if_fail (GI_IS_ARG_INFO (info), FALSE); - - blob = (ArgBlob *)&rinfo->typelib->data[rinfo->offset]; - - return blob->caller_allocates; -} - -/** - * g_arg_info_is_optional: - * @info: a #GIArgInfo - * - * Obtain if the argument is optional. - * - * Returns: %TRUE if it is an optional argument - */ -gboolean -g_arg_info_is_optional (GIArgInfo *info) -{ - GIRealInfo *rinfo = (GIRealInfo *)info; - ArgBlob *blob; - - g_return_val_if_fail (info != NULL, FALSE); - g_return_val_if_fail (GI_IS_ARG_INFO (info), FALSE); - - blob = (ArgBlob *)&rinfo->typelib->data[rinfo->offset]; - - return blob->optional; -} - -/** - * g_arg_info_may_be_null: - * @info: a #GIArgInfo - * - * Obtain if the argument accepts %NULL. - * - * Returns: %TRUE if it accepts %NULL - */ -gboolean -g_arg_info_may_be_null (GIArgInfo *info) -{ - GIRealInfo *rinfo = (GIRealInfo *)info; - ArgBlob *blob; - - g_return_val_if_fail (info != NULL, FALSE); - g_return_val_if_fail (GI_IS_ARG_INFO (info), FALSE); - - blob = (ArgBlob *)&rinfo->typelib->data[rinfo->offset]; - - return blob->allow_none; -} - -/** - * g_arg_info_get_ownership_transfer: - * @info: a #GIArgInfo - * - * Obtain the ownership transfer for this argument. - * #GITransfer contains a list of possible values. - * - * Returns: the transfer - */ -GITransfer -g_arg_info_get_ownership_transfer (GIArgInfo *info) -{ - GIRealInfo *rinfo = (GIRealInfo *)info; - ArgBlob *blob; - - g_return_val_if_fail (info != NULL, -1); - g_return_val_if_fail (GI_IS_ARG_INFO (info), -1); - - blob = (ArgBlob *)&rinfo->typelib->data[rinfo->offset]; - - if (blob->transfer_ownership) - return GI_TRANSFER_EVERYTHING; - else if (blob->transfer_container_ownership) - return GI_TRANSFER_CONTAINER; - else - return GI_TRANSFER_NOTHING; -} - -/** - * g_arg_info_get_scope: - * @info: a #GIArgInfo - * - * Obtain the scope type for this argument. The scope type explains - * how a callback is going to be invoked, most importantly when - * the resources required to invoke it can be freed. - * #GIScopeType contains a list of possible values. - * - * Returns: the scope type - */ -GIScopeType -g_arg_info_get_scope (GIArgInfo *info) -{ - GIRealInfo *rinfo = (GIRealInfo *)info; - ArgBlob *blob; - - g_return_val_if_fail (info != NULL, -1); - g_return_val_if_fail (GI_IS_ARG_INFO (info), -1); - - blob = (ArgBlob *)&rinfo->typelib->data[rinfo->offset]; - - return blob->scope; -} - -/** - * g_arg_info_get_closure: - * @info: a #GIArgInfo - * - * Obtain the index of the user data argument. This is only valid - * for arguments which are callbacks. - * - * Returns: index of the user data argument or -1 if there is none - */ -gint -g_arg_info_get_closure (GIArgInfo *info) -{ - GIRealInfo *rinfo = (GIRealInfo *)info; - ArgBlob *blob; - - g_return_val_if_fail (info != NULL, -1); - g_return_val_if_fail (GI_IS_ARG_INFO (info), -1); - - blob = (ArgBlob *)&rinfo->typelib->data[rinfo->offset]; - - return blob->closure; -} - -/** - * g_arg_info_get_destroy: - * @info: a #GIArgInfo - * - * Obtains the index of the #GDestroyNotify argument. This is only valid - * for arguments which are callbacks. - * - * Returns: index of the #GDestroyNotify argument or -1 if there is none - */ -gint -g_arg_info_get_destroy (GIArgInfo *info) -{ - GIRealInfo *rinfo = (GIRealInfo *)info; - ArgBlob *blob; - - g_return_val_if_fail (info != NULL, -1); - g_return_val_if_fail (GI_IS_ARG_INFO (info), -1); - - blob = (ArgBlob *)&rinfo->typelib->data[rinfo->offset]; - - return blob->destroy; -} - -/** - * g_arg_info_get_type: - * @info: a #GIArgInfo - * - * Obtain the type information for @info. - * - * Returns: (transfer full): the #GIArgInfo, free it with - * g_base_info_unref() when done. - */ -GITypeInfo * -g_arg_info_get_type (GIArgInfo *info) -{ - GIRealInfo *rinfo = (GIRealInfo *)info; - - g_return_val_if_fail (info != NULL, NULL); - g_return_val_if_fail (GI_IS_ARG_INFO (info), NULL); - - return _g_type_info_new ((GIBaseInfo*)info, rinfo->typelib, rinfo->offset + G_STRUCT_OFFSET (ArgBlob, arg_type)); -} - -/** - * g_arg_info_load_type: - * @info: a #GIArgInfo - * @type: (out caller-allocates): Initialized with information about type of @info - * - * Obtain information about a the type of given argument @info; this - * function is a variant of g_arg_info_get_type() designed for stack - * allocation. - * - * The initialized @type must not be referenced after @info is deallocated. - */ -void -g_arg_info_load_type (GIArgInfo *info, - GITypeInfo *type) -{ - GIRealInfo *rinfo = (GIRealInfo*) info; - - g_return_if_fail (info != NULL); - g_return_if_fail (GI_IS_ARG_INFO (info)); - - _g_type_info_init (type, (GIBaseInfo*)info, rinfo->typelib, rinfo->offset + G_STRUCT_OFFSET (ArgBlob, arg_type)); -} - /* GITypeInfo functions */ /** diff --git a/girepository.h b/girepository.h index 543dab447..980049eb6 100644 --- a/girepository.h +++ b/girepository.h @@ -26,6 +26,7 @@ #include #include +#include #include #include #include @@ -146,61 +147,6 @@ void gi_cclosure_marshal_generic (GClosure *closure, gpointer invocation_hint, gpointer marshal_data); - -/* GIArgInfo */ - -#define GI_IS_ARG_INFO(info) \ - (g_base_info_get_type((GIBaseInfo*)info) == GI_INFO_TYPE_ARG) - -/** - * GIDirection: - * @GI_DIRECTION_IN: in argument. - * @GI_DIRECTION_OUT: out argument. - * @GI_DIRECTION_INOUT: in and out argument. - * - * The direction of a #GIArgInfo. - */ -typedef enum { - GI_DIRECTION_IN, - GI_DIRECTION_OUT, - GI_DIRECTION_INOUT -} GIDirection; - -/** - * GIScopeType: - * @GI_SCOPE_TYPE_INVALID: The argument is not of callback type. - * @GI_SCOPE_TYPE_CALL: The callback and associated user_data is only - * used during the call to this function. - * @GI_SCOPE_TYPE_ASYNC: The callback and associated user_data is - * only used until the callback is invoked, and the callback. - * is invoked always exactly once. - * @GI_SCOPE_TYPE_NOTIFIED: The callback and and associated - * user_data is used until the caller is notfied via the destroy_notify. - * - * Scope type of a #GIArgInfo representing callback, determines how the - * callback is invoked and is used to decided when the invoke structs - * can be freed. - */ -typedef enum { - GI_SCOPE_TYPE_INVALID, - GI_SCOPE_TYPE_CALL, - GI_SCOPE_TYPE_ASYNC, - GI_SCOPE_TYPE_NOTIFIED -} GIScopeType; - -GIDirection g_arg_info_get_direction (GIArgInfo *info); -gboolean g_arg_info_is_return_value (GIArgInfo *info); -gboolean g_arg_info_is_optional (GIArgInfo *info); -gboolean g_arg_info_is_caller_allocates (GIArgInfo *info); -gboolean g_arg_info_may_be_null (GIArgInfo *info); -GITransfer g_arg_info_get_ownership_transfer (GIArgInfo *info); -GIScopeType g_arg_info_get_scope (GIArgInfo *info); -gint g_arg_info_get_closure (GIArgInfo *info); -gint g_arg_info_get_destroy (GIArgInfo *info); -GITypeInfo * g_arg_info_get_type (GIArgInfo *info); -void g_arg_info_load_type (GIArgInfo *info, - GITypeInfo *type); - /* GITypeInfo */ #define GI_IS_TYPE_INFO(info) \ diff --git a/gitypes.h b/gitypes.h index 036ab2be4..6e35489a7 100644 --- a/gitypes.h +++ b/gitypes.h @@ -257,6 +257,41 @@ typedef enum { GI_TRANSFER_EVERYTHING } GITransfer; +/** + * GIDirection: + * @GI_DIRECTION_IN: in argument. + * @GI_DIRECTION_OUT: out argument. + * @GI_DIRECTION_INOUT: in and out argument. + * + * The direction of a #GIArgInfo. + */ +typedef enum { + GI_DIRECTION_IN, + GI_DIRECTION_OUT, + GI_DIRECTION_INOUT +} GIDirection; + +/** + * GIScopeType: + * @GI_SCOPE_TYPE_INVALID: The argument is not of callback type. + * @GI_SCOPE_TYPE_CALL: The callback and associated user_data is only + * used during the call to this function. + * @GI_SCOPE_TYPE_ASYNC: The callback and associated user_data is + * only used until the callback is invoked, and the callback. + * is invoked always exactly once. + * @GI_SCOPE_TYPE_NOTIFIED: The callback and and associated + * user_data is used until the caller is notfied via the destroy_notify. + * + * Scope type of a #GIArgInfo representing callback, determines how the + * callback is invoked and is used to decided when the invoke structs + * can be freed. + */ +typedef enum { + GI_SCOPE_TYPE_INVALID, + GI_SCOPE_TYPE_CALL, + GI_SCOPE_TYPE_ASYNC, + GI_SCOPE_TYPE_NOTIFIED +} GIScopeType; G_END_DECLS