diff --git a/docs/reference/gio/gio-docs.xml b/docs/reference/gio/gio-docs.xml index 950f7157e..8fe0d987b 100644 --- a/docs/reference/gio/gio-docs.xml +++ b/docs/reference/gio/gio-docs.xml @@ -158,6 +158,7 @@ Permissions + Extending GIO diff --git a/docs/reference/gio/gio-sections.txt b/docs/reference/gio/gio-sections.txt index 5cb52d275..f7e68d3df 100644 --- a/docs/reference/gio/gio-sections.txt +++ b/docs/reference/gio/gio-sections.txt @@ -2611,3 +2611,11 @@ g_permission_get_type GPermissionPrivate GPermissionClass + +
+gsimplepermission +GSimplePermission +g_simple_permission_new + +g_simple_permission_get_type +
diff --git a/docs/reference/gio/gio.types b/docs/reference/gio/gio.types index 27db6b17d..5a4ff84a7 100644 --- a/docs/reference/gio/gio.types +++ b/docs/reference/gio/gio.types @@ -77,6 +77,7 @@ g_seekable_get_type g_settings_get_type g_settings_backend_get_type g_simple_async_result_get_type +g_simple_permission_get_type g_socket_address_enumerator_get_type g_socket_address_get_type g_socket_client_get_type diff --git a/gio/Makefile.am b/gio/Makefile.am index 485ae4efe..a2efeea13 100644 --- a/gio/Makefile.am +++ b/gio/Makefile.am @@ -333,6 +333,7 @@ libgio_2_0_la_SOURCES = \ gresolver.c \ gseekable.c \ gsimpleasyncresult.c \ + gsimplepermission.c \ gsocket.c \ gsocketaddress.c \ gsocketaddressenumerator.c \ @@ -478,6 +479,7 @@ gio_headers = \ gresolver.h \ gseekable.h \ gsimpleasyncresult.h \ + gsimplepermission.h \ gsocket.h \ gsocketaddress.h \ gsocketaddressenumerator.h \ diff --git a/gio/gio.symbols b/gio/gio.symbols index 1717cbb89..55ff916ac 100644 --- a/gio/gio.symbols +++ b/gio/gio.symbols @@ -1746,3 +1746,10 @@ g_permission_release_async g_permission_release_finish #endif #endif + +#if IN_HEADER(__G_SIMPLE_PERMISSION_H__) +#if IN_FILE(__G_SIMPLE_PERMISSION_C__) +g_simple_permission_get_type +g_simple_permission_new +#endif +#endif diff --git a/gio/giotypes.h b/gio/giotypes.h index ac97fd959..980f3e311 100644 --- a/gio/giotypes.h +++ b/gio/giotypes.h @@ -44,6 +44,7 @@ typedef struct _GConverterInputStream GConverterInputStream; typedef struct _GConverterOutputStream GConverterOutputStream; typedef struct _GDataInputStream GDataInputStream; typedef struct _GPermission GPermission; +typedef struct _GSimplePermission GSimplePermission; typedef struct _GZlibCompressor GZlibCompressor; typedef struct _GZlibDecompressor GZlibDecompressor; diff --git a/gio/gsimplepermission.c b/gio/gsimplepermission.c new file mode 100644 index 000000000..a46f20934 --- /dev/null +++ b/gio/gsimplepermission.c @@ -0,0 +1,84 @@ +/* + * Copyright © 2010 Codethink Limited + * + * 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 licence, 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. + * + * Author: Ryan Lortie + */ + +#include "gsimplepermission.h" +#include "gpermission.h" + +#include "gioalias.h" + +/** + * SECTION:gsimplepermission + * @title: GSimplePermission + * @short_description: a #GPermission that doesn't change value + * + * #GSimplePermission is a trivial implementation of #GPermission that + * represents a permission that is either always or never allowed. The + * value is given at constuction and doesn't change. + * + * Calling request or release will result in errors. + **/ + +/** + * GSimplePermission: + * + * #GSimplePermission is an opaque data structure. There are no methods + * except for those defined by #GPermission. + **/ + +typedef GPermissionClass GSimplePermissionClass; + +struct _GSimplePermission +{ + GPermission parent_instance; +}; + +G_DEFINE_TYPE (GSimplePermission, g_simple_permission, G_TYPE_PERMISSION) + +static void +g_simple_permission_init (GSimplePermission *simple) +{ +} + +static void +g_simple_permission_class_init (GSimplePermissionClass *class) +{ +} + +/** + * g_simple_permission_new: + * @allowed: %TRUE if the action is allowed + * @returns: the #GSimplePermission, as a #GPermission + * + * Creates a new #GPermission instance that represents an action that is + * either always or never allowed. + **/ +GPermission * +g_simple_permission_new (gboolean allowed) +{ + GPermission *permission = g_object_new (G_TYPE_SIMPLE_PERMISSION, NULL); + + g_permission_impl_update (permission, allowed, FALSE, FALSE); + + return permission; +} + +#define __G_SIMPLE_PERMISSION_C__ +#include "gioaliasdef.c" diff --git a/gio/gsimplepermission.h b/gio/gsimplepermission.h new file mode 100644 index 000000000..367fe895c --- /dev/null +++ b/gio/gsimplepermission.h @@ -0,0 +1,45 @@ +/* + * Copyright © 2010 Codethink Limited + * + * 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 licence, 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. + * + * Author: Ryan Lortie + */ + +#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) +#error "Only can be included directly." +#endif + +#ifndef __G_SIMPLE_PERMISSION_H__ +#define __G_SIMPLE_PERMISSION_H__ + +#include + +G_BEGIN_DECLS + +#define G_TYPE_SIMPLE_PERMISSION (g_simple_permission_get_type ()) +#define G_SIMPLE_PERMISSION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ + G_TYPE_SIMPLE_PERMISSION, \ + GSimplePermission)) +#define G_IS_SIMPLE_PERMISSION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ + G_TYPE_SIMPLE_PERMISSION)) + +GType g_simple_permission_get_type (void); +GPermission * g_simple_permission_new (gboolean allowed); + +G_END_DECLS + +#endif /* __G_SIMPLE_PERMISSION_H__ */