/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- * * Plugin engine for Totem, heavily based on the code from Rhythmbox, * which is based heavily on the code from totem. * * Copyright (C) 2002-2005 Paolo Maggi * 2006 James Livingston * 2007 Bastien Nocera * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301 USA. * * Sunday 13th May 2007: Bastien Nocera: Add exception clause. * See license_change file for details. * */ #pragma once #include #include #include #include /** * TOTEM_PLUGIN_REGISTER: * @TYPE_NAME: the name of the plugin type, in UPPER_CASE * @TypeName: the name of the plugin type, in CamelCase * @type_name: the name of the plugin type, in lower_case * * Registers a plugin with the Totem plugin system, including registering the * type specified in the parameters and declaring its activate and * deactivate functions. **/ #define TOTEM_PLUGIN_REGISTER(TYPE_NAME, TypeName, type_name) \ typedef struct { \ PeasExtensionBaseClass parent_class; \ } TypeName##Class; \ GType type_name##_get_type (void) G_GNUC_CONST; \ static void impl_activate (PeasActivatable *plugin); \ static void impl_deactivate (PeasActivatable *plugin); \ G_MODULE_EXPORT void peas_register_types (PeasObjectModule *module); \ static void peas_activatable_iface_init (PeasActivatableInterface *iface); \ enum { \ PROP_0, \ PROP_OBJECT \ }; \ G_DEFINE_DYNAMIC_TYPE_EXTENDED (TypeName, \ type_name, \ PEAS_TYPE_EXTENSION_BASE, \ 0, \ G_IMPLEMENT_INTERFACE_DYNAMIC (PEAS_TYPE_ACTIVATABLE, \ peas_activatable_iface_init) \ ) \ static void \ peas_activatable_iface_init (PeasActivatableInterface *iface) \ { \ iface->activate = impl_activate; \ iface->deactivate = impl_deactivate; \ } \ static void \ set_property (GObject *object, \ guint prop_id, \ const GValue *value, \ GParamSpec *pspec) \ { \ switch (prop_id) { \ case PROP_OBJECT: \ g_object_set_data_full (object, "object", \ g_value_dup_object (value), \ g_object_unref); \ break; \ default: \ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); \ break; \ } \ } \ static void \ get_property (GObject *object, \ guint prop_id, \ GValue *value, \ GParamSpec *pspec) \ { \ switch (prop_id) { \ case PROP_OBJECT: \ g_value_set_object (value, g_object_get_data (object, "object")); \ break; \ default: \ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); \ break; \ } \ } \ static void \ type_name##_class_init (TypeName##Class *klass) \ { \ GObjectClass *object_class = G_OBJECT_CLASS (klass); \ \ object_class->set_property = set_property; \ object_class->get_property = get_property; \ \ g_object_class_override_property (object_class, PROP_OBJECT, "object"); \ } \ static void \ type_name##_class_finalize (TypeName##Class *klass) \ { \ } \ static void \ type_name##_init (TypeName *plugin) \ { \ } \ G_MODULE_EXPORT void \ peas_register_types (PeasObjectModule *module) \ { \ type_name##_register_type (G_TYPE_MODULE (module)); \ peas_object_module_register_extension_type (module, \ PEAS_TYPE_ACTIVATABLE, \ TYPE_NAME); \ }