diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2010-03-20 05:18:19 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@redhat.com> | 2010-03-20 23:49:46 +0800 |
commit | 84feab41bb9aae3362414ee818139a149a705903 (patch) | |
tree | 8c1538fdec5a32e1a24e619e8d5d3707f668393c /e-util/e-extension.h | |
parent | 3a6669b8da6ef619dccee17c8ff24d4eb1f89ab9 (diff) | |
download | gsoc2013-evolution-84feab41bb9aae3362414ee818139a149a705903.tar.gz gsoc2013-evolution-84feab41bb9aae3362414ee818139a149a705903.tar.zst gsoc2013-evolution-84feab41bb9aae3362414ee818139a149a705903.zip |
Introduce a simple extension system for objects.
This introduces a simple means of extending Evolution objects.
Any GObject subclass wishing to be extensible need only call
g_type_add_interface_static (type, E_TYPE_EXTENSIBLE, NULL);
when registering its GType, and then at some point during initialization
call e_extensible_load_extensions() to load extensions for that subclass.
Extensions are implemented by subclassing EExtension, setting the GType
being extended in EExtensionClass, and making sure its own GType gets
registered at startup. This usually done while loading a GTypeModule.
e_extension_get_extensible() provides extensions access to the object
being extended.
Diffstat (limited to 'e-util/e-extension.h')
-rw-r--r-- | e-util/e-extension.h | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/e-util/e-extension.h b/e-util/e-extension.h new file mode 100644 index 0000000000..905ef412f3 --- /dev/null +++ b/e-util/e-extension.h @@ -0,0 +1,67 @@ +/* + * e-extension.h + * + * This program 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) version 3. + * + * This program 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 the program; if not, see <http://www.gnu.org/licenses/> + * + */ + +#ifndef E_EXTENSION_H +#define E_EXTENSION_H + +#include <glib-object.h> +#include <e-util/e-extensible.h> + +/* Standard GObject macros */ +#define E_TYPE_EXTENSION \ + (e_extension_get_type ()) +#define E_EXTENSION(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST \ + ((obj), E_TYPE_EXTENSION, EExtension)) +#define E_EXTENSION_CLASS(cls) \ + (G_TYPE_CHECK_CLASS_CAST \ + ((cls), E_TYPE_EXTENSION, EExtensionClass)) +#define E_IS_EXTENSION(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE \ + ((obj), E_TYPE_EXTENSION)) +#define E_IS_EXTENSION_CLASS(cls) \ + (G_TYPE_CHECK_CLASS_TYPE \ + ((cls), E_TYPE_EXTENSION)) +#define E_EXTENSION_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS \ + ((obj), E_TYPE_EXTENSION, EExtensionClass)) + +G_BEGIN_DECLS + +typedef struct _EExtension EExtension; +typedef struct _EExtensionClass EExtensionClass; +typedef struct _EExtensionPrivate EExtensionPrivate; + +struct _EExtension { + GObject parent; + EExtensionPrivate *priv; +}; + +struct _EExtensionClass { + GObjectClass parent_class; + + /* The type to extend. */ + GType extensible_type; +}; + +GType e_extension_get_type (void); +EExtensible * e_extension_get_extensible (EExtension *extension); + +G_END_DECLS + +#endif /* E_EXTENSION_H */ |