From 53bc6ffc531d7a7188e15be245a31f301090ee15 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 10 Sep 2011 11:47:15 -0400 Subject: The EExtension framework is now in libebackend. The EModule, EExtensible and EExtension classes as well as the e_type_traverse() function have been moved to Evolution-Data-Server's libebackend library to replace e-data-server-module.c. Now Evolution-Data-Server modules use the same framework as Evolution. --- e-util/e-extension.c | 186 --------------------------------------------------- 1 file changed, 186 deletions(-) delete mode 100644 e-util/e-extension.c (limited to 'e-util/e-extension.c') diff --git a/e-util/e-extension.c b/e-util/e-extension.c deleted file mode 100644 index 88912bc8dd..0000000000 --- a/e-util/e-extension.c +++ /dev/null @@ -1,186 +0,0 @@ -/* - * e-extension.c - * - * 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 - * - */ - -/** - * SECTION: e-extension - * @short_description: abstract base class for extensions - * @include: e-util/e-extension.h - * - * #EExtension provides a way to extend the functionality of objects - * that implement the #EExtensible interface. #EExtension subclasses - * can target a particular extensible object type. New instances of - * an extensible object type get paired with a new instance of each - * #EExtension subclass that targets the extensible object type. - * - * The first steps of writing a new extension are as follows: - * - * 1. Subclass #EExtension. - * - * 2. In the class initialization function, specify the #GType being - * extended. The #GType must implement the #EExtensible interface. - * - * 3. Register the extension's own #GType. If the extension is to - * be loaded dynamically using #GTypeModule, the type should be - * registered in the library module's e_module_load() function. - **/ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "e-extension.h" - -struct _EExtensionPrivate { - gpointer extensible; /* weak pointer */ -}; - -enum { - PROP_0, - PROP_EXTENSIBLE -}; - -G_DEFINE_ABSTRACT_TYPE ( - EExtension, - e_extension, - G_TYPE_OBJECT) - -static void -extension_set_extensible (EExtension *extension, - EExtensible *extensible) -{ - EExtensionClass *class; - GType extensible_type; - - g_return_if_fail (E_IS_EXTENSIBLE (extensible)); - g_return_if_fail (extension->priv->extensible == NULL); - - class = E_EXTENSION_GET_CLASS (extension); - extensible_type = G_OBJECT_TYPE (extensible); - - /* Verify the EExtensible object is the type we want. */ - if (!g_type_is_a (extensible_type, class->extensible_type)) { - g_warning ("%s is meant to extend %s but was given an %s", - G_OBJECT_TYPE_NAME (extension), - g_type_name (class->extensible_type), - g_type_name (extensible_type)); - return; - } - - extension->priv->extensible = extensible; - - g_object_add_weak_pointer ( - G_OBJECT (extensible), &extension->priv->extensible); -} - -static void -extension_set_property (GObject *object, - guint property_id, - const GValue *value, - GParamSpec *pspec) -{ - switch (property_id) { - case PROP_EXTENSIBLE: - extension_set_extensible ( - E_EXTENSION (object), - g_value_get_object (value)); - return; - } - - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); -} - -static void -extension_get_property (GObject *object, - guint property_id, - GValue *value, - GParamSpec *pspec) -{ - switch (property_id) { - case PROP_EXTENSIBLE: - g_value_set_object ( - value, e_extension_get_extensible ( - E_EXTENSION (object))); - return; - } - - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); -} - -static void -extension_dispose (GObject *object) -{ - EExtensionPrivate *priv; - - priv = E_EXTENSION (object)->priv; - - if (priv->extensible != NULL) { - g_object_remove_weak_pointer ( - G_OBJECT (priv->extensible), &priv->extensible); - priv->extensible = NULL; - } - - /* Chain up to parent's dispose() method. */ - G_OBJECT_CLASS (e_extension_parent_class)->dispose (object); -} - -static void -e_extension_class_init (EExtensionClass *class) -{ - GObjectClass *object_class; - - g_type_class_add_private (class, sizeof (EExtensionPrivate)); - - object_class = G_OBJECT_CLASS (class); - object_class->set_property = extension_set_property; - object_class->get_property = extension_get_property; - object_class->dispose = extension_dispose; - - g_object_class_install_property ( - object_class, - PROP_EXTENSIBLE, - g_param_spec_object ( - "extensible", - "Extensible Object", - "The object being extended", - E_TYPE_EXTENSIBLE, - G_PARAM_READWRITE | - G_PARAM_CONSTRUCT_ONLY)); -} - -static void -e_extension_init (EExtension *extension) -{ - extension->priv = G_TYPE_INSTANCE_GET_PRIVATE ( - extension, E_TYPE_EXTENSION, EExtensionPrivate); -} - -/** - * e_extension_get_extensible: - * @extension: an #EExtension - * - * Returns the object that @extension extends. - * - * Returns: the object being extended - **/ -EExtensible * -e_extension_get_extensible (EExtension *extension) -{ - g_return_val_if_fail (E_IS_EXTENSION (extension), NULL); - - return E_EXTENSIBLE (extension->priv->extensible); -} -- cgit v1.2.3