1
#ifndef __EINA_EXTENSION_H__
2
#define __EINA_EXTENSION_H__
1
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
3
* Plugin engine for Eina, heavily based on the code from Rhythmbox,
4
* which is based heavily on the code from eina.
6
* Copyright (C) 2002-2005 Paolo Maggi
7
* 2006 James Livingston <jrl@ids.org.au>
8
* 2007 Bastien Nocera <hadess@hadess.net>
10
* This program is free software; you can redistribute it and/or modify
11
* it under the terms of the GNU General Public License as published by
12
* the Free Software Foundation; either version 2 of the License, or
13
* (at your option) any later version.
15
* This program is distributed in the hope that it will be useful,
16
* but WITHOUT ANY WARRANTY; without even the implied warranty of
17
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
* GNU General Public License for more details.
20
* You should have received a copy of the GNU General Public License
21
* along with this program; if not, write to the Free Software
22
* Foundation, Inc., 51 Franklin St, Fifth Floor,
23
* Boston, MA 02110-1301 USA.
25
* Sunday 13th May 2007: Bastien Nocera: Add exception clause.
26
* See license_change file for details.
30
#ifndef __EINA_PLUGIN_H__
31
#define __EINA_PLUGIN_H__
8
36
#include <glib/gi18n.h>
37
#include <libpeas/peas.h>
9
38
#include <gel/gel.h>
10
#include <libpeas/peas.h>
11
39
#include <eina/ext/eina-activatable.h>
13
#define EINA_DEFINE_EXTENSION_HEADERS(TypeName,type_name) \
14
typedef struct _##TypeName TypeName; \
15
typedef struct _##TypeName##Class TypeName##Class; \
16
struct _##TypeName { PeasExtensionBase parent_instance; }; \
17
struct _##TypeName##Class { PeasExtensionBaseClass parent_class; }; \
18
GType type_name##_get_type (void) G_GNUC_CONST; \
19
G_MODULE_EXPORT void peas_register_types (PeasObjectModule *module);
21
#define EINA_DEFINE_EXTENSION(TypeName,type_name,_G_TYPE_NAME) \
23
static void eina_activatable_iface_init (EinaActivatableInterface *iface); \
24
static void type_name##_init (TypeName *plugin) { } \
25
static void type_name##_class_init (TypeName##Class *klass) { } \
26
static void type_name##_class_finalize (TypeName##Class *klass) { } \
28
G_DEFINE_DYNAMIC_TYPE_EXTENDED (TypeName, \
30
PEAS_TYPE_EXTENSION_BASE, \
32
G_IMPLEMENT_INTERFACE_DYNAMIC (EINA_TYPE_ACTIVATABLE, eina_activatable_iface_init)) \
34
static gboolean type_name##_activate (EinaActivatable *activatable, EinaApplication *application, GError **error); \
35
static gboolean type_name##_deactivate (EinaActivatable *activatable, EinaApplication *application, GError **error); \
37
static void eina_activatable_iface_init (EinaActivatableInterface *iface) { \
38
iface->activate = type_name##_activate; \
39
iface->deactivate = type_name##_deactivate; \
42
G_MODULE_EXPORT void peas_register_types (PeasObjectModule *module) { \
43
type_name##_register_type (G_TYPE_MODULE (module)); \
44
peas_object_module_register_extension_type (module, \
45
EINA_TYPE_ACTIVATABLE, \
40
#include <eina/ext/eina-application.h>
44
#define EINA_PLUGIN_REGISTER_WITH_CODE(TYPE_NAME,TypeName,type_name,TYPE_CODE) \
46
PeasExtensionBaseClass parent_class; \
49
PeasExtensionBase parent; \
50
TypeName##Private *priv; \
53
GType type_name##_get_type (void) G_GNUC_CONST; \
54
static gboolean type_name##_activate (EinaActivatable *plugin, EinaApplication *application, GError **error); \
55
static gboolean type_name##_deactivate (EinaActivatable *plugin, EinaApplication *application, GError **error); \
56
G_MODULE_EXPORT void peas_register_types (PeasObjectModule *module); \
57
static void eina_activatable_iface_init (EinaActivatableInterface *iface); \
64
G_DEFINE_DYNAMIC_TYPE_EXTENDED (TypeName, \
66
PEAS_TYPE_EXTENSION_BASE, \
68
G_IMPLEMENT_INTERFACE_DYNAMIC (EINA_TYPE_ACTIVATABLE, eina_activatable_iface_init) TYPE_CODE) \
70
static void eina_activatable_iface_init (EinaActivatableInterface *iface) { \
71
iface->activate = type_name##_activate; \
72
iface->deactivate = type_name##_deactivate; \
75
static void type_name##_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { \
77
case PROP_APPLICATION: \
78
g_object_set_data_full (object, "application", g_value_dup_object (value), g_object_unref); \
81
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); \
86
static void type_name##_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { \
88
case PROP_APPLICATION: \
89
g_value_set_object (value, g_object_get_data (object, "application")); \
92
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); \
96
static void type_name##_class_init (TypeName##Class *klass) { \
97
GObjectClass *object_class = G_OBJECT_CLASS (klass); \
98
object_class->set_property = type_name##_set_property; \
99
object_class->get_property = type_name##_get_property; \
100
g_object_class_override_property (object_class, PROP_APPLICATION, "application"); \
101
g_type_class_add_private (klass, sizeof (TypeName##Private)); \
103
static void type_name##_class_finalize (TypeName##Class *klass) { } \
104
static void type_name##_init (TypeName *plugin) { \
105
plugin->priv = G_TYPE_INSTANCE_GET_PRIVATE (plugin, TYPE_NAME, TypeName##Private); \
107
G_MODULE_EXPORT void peas_register_types (PeasObjectModule *module) { \
108
type_name##_register_type (G_TYPE_MODULE (module)); \
109
peas_object_module_register_extension_type (module, EINA_TYPE_ACTIVATABLE, TYPE_NAME); \
112
#define EINA_PLUGIN_REGISTER(TYPE_NAME,TypeName,type_name) \
113
EINA_PLUGIN_REGISTER_WITH_CODE(TYPE_NAME,TypeName,type_name,)
117
#endif /* __EINA_PLUGIN_H__ */