~ubuntu-branches/debian/experimental/geany/experimental

« back to all changes in this revision

Viewing changes to src/geanyobject.c

  • Committer: Bazaar Package Importer
  • Author(s): Damián Viano
  • Date: 2008-05-02 11:37:45 UTC
  • mfrom: (1.2.1 upstream) (3.1.6 hardy)
  • Revision ID: james.westby@ubuntu.com-20080502113745-xzp4g6dmovrpoj17
Tags: 0.14-1
New upstream release (Closes: #478126)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 *      geanyobject.c - this file is part of Geany, a fast and lightweight IDE
 
3
 *
 
4
 *      Copyright 2007-2008 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
 
5
 *      Copyright 2007-2008 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
 
6
 *
 
7
 *      This program is free software; you can redistribute it and/or modify
 
8
 *      it under the terms of the GNU General Public License as published by
 
9
 *      the Free Software Foundation; either version 2 of the License, or
 
10
 *      (at your option) any later version.
 
11
 *
 
12
 *      This program is distributed in the hope that it will be useful,
 
13
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 
14
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
15
 *      GNU General Public License for more details.
 
16
 *
 
17
 *      You should have received a copy of the GNU General Public License
 
18
 *      along with this program; if not, write to the Free Software
 
19
 *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 
20
 *      MA 02110-1301, USA.
 
21
 *
 
22
 * $Id: geanyobject.c 2287 2008-02-27 13:17:29Z eht16 $
 
23
 */
 
24
 
 
25
/* GObject used for connecting and emitting signals when certain events happen,
 
26
 * e.g. opening a document.
 
27
 * Mainly used for plugins - geany_object is created in plugins_init(). */
 
28
 
 
29
#include "geany.h"
 
30
#include "geanyobject.h"
 
31
 
 
32
GObject *geany_object;
 
33
 
 
34
static guint geany_object_signals[GCB_MAX] = { 0 };
 
35
 
 
36
 
 
37
typedef struct _GeanyObjectPrivate GeanyObjectPrivate;
 
38
 
 
39
#define GEANY_OBJECT_GET_PRIVATE(obj)           (G_TYPE_INSTANCE_GET_PRIVATE((obj),\
 
40
                GEANY_OBJECT_TYPE, GeanyObjectPrivate))
 
41
 
 
42
struct _GeanyObjectPrivate
 
43
{
 
44
        /* to avoid warnings (g_type_class_add_private: assertion `private_size > 0' failed) */
 
45
        gchar dummy;
 
46
};
 
47
 
 
48
static void geany_object_class_init                     (GeanyObjectClass *klass);
 
49
static void geany_object_init                           (GeanyObject *self);
 
50
static void geany_object_finalize                       (GObject *object);
 
51
 
 
52
/* Local data */
 
53
static GObjectClass *parent_class = NULL;
 
54
 
 
55
 
 
56
GType geany_object_get_type(void)
 
57
{
 
58
        static GType self_type = 0;
 
59
        if (! self_type)
 
60
        {
 
61
                static const GTypeInfo self_info =
 
62
                {
 
63
                        sizeof(GeanyObjectClass),
 
64
                        NULL, /* base_init */
 
65
                        NULL, /* base_finalize */
 
66
                        (GClassInitFunc)geany_object_class_init,
 
67
                        NULL, /* class_finalize */
 
68
                        NULL, /* class_data */
 
69
                        sizeof(GeanyObject),
 
70
                        0,
 
71
                        (GInstanceInitFunc)geany_object_init,
 
72
                        NULL
 
73
                };
 
74
 
 
75
                self_type = g_type_register_static(G_TYPE_OBJECT, "GeanyObject", &self_info, 0);        }
 
76
 
 
77
        return self_type;
 
78
}
 
79
 
 
80
 
 
81
static void create_signals(GObjectClass *g_object_class)
 
82
{
 
83
        geany_object_signals[GCB_DOCUMENT_NEW] = g_signal_new (
 
84
                "document-new",
 
85
                G_OBJECT_CLASS_TYPE (g_object_class),
 
86
                G_SIGNAL_RUN_FIRST,
 
87
                G_STRUCT_OFFSET (GeanyObjectClass, document_new),
 
88
                NULL, NULL,
 
89
                gtk_marshal_NONE__INT,
 
90
                G_TYPE_NONE, 1,
 
91
                G_TYPE_INT);
 
92
        geany_object_signals[GCB_DOCUMENT_OPEN] = g_signal_new (
 
93
                "document-open",
 
94
                G_OBJECT_CLASS_TYPE (g_object_class),
 
95
                G_SIGNAL_RUN_FIRST,
 
96
                G_STRUCT_OFFSET (GeanyObjectClass, document_open),
 
97
                NULL, NULL,
 
98
                gtk_marshal_NONE__INT,
 
99
                G_TYPE_NONE, 1,
 
100
                G_TYPE_INT);
 
101
        geany_object_signals[GCB_DOCUMENT_SAVE] = g_signal_new (
 
102
                "document-save",
 
103
                G_OBJECT_CLASS_TYPE (g_object_class),
 
104
                G_SIGNAL_RUN_FIRST,
 
105
                G_STRUCT_OFFSET (GeanyObjectClass, document_save),
 
106
                NULL, NULL,
 
107
                gtk_marshal_NONE__INT,
 
108
                G_TYPE_NONE, 1,
 
109
                G_TYPE_INT);
 
110
        geany_object_signals[GCB_DOCUMENT_ACTIVATE] = g_signal_new (
 
111
                "document-activate",
 
112
                G_OBJECT_CLASS_TYPE (g_object_class),
 
113
                G_SIGNAL_RUN_FIRST,
 
114
                G_STRUCT_OFFSET (GeanyObjectClass, document_activate),
 
115
                NULL, NULL,
 
116
                gtk_marshal_NONE__INT,
 
117
                G_TYPE_NONE, 1,
 
118
                G_TYPE_INT);
 
119
 
 
120
        geany_object_signals[GCB_PROJECT_OPEN] = g_signal_new (
 
121
                "project-open",
 
122
                G_OBJECT_CLASS_TYPE (g_object_class),
 
123
                G_SIGNAL_RUN_FIRST,
 
124
                G_STRUCT_OFFSET (GeanyObjectClass, project_open),
 
125
                NULL, NULL,
 
126
                gtk_marshal_NONE__INT,
 
127
                G_TYPE_NONE, 1,
 
128
                G_TYPE_POINTER);
 
129
        geany_object_signals[GCB_PROJECT_SAVE] = g_signal_new (
 
130
                "project-save",
 
131
                G_OBJECT_CLASS_TYPE (g_object_class),
 
132
                G_SIGNAL_RUN_FIRST,
 
133
                G_STRUCT_OFFSET (GeanyObjectClass, project_save),
 
134
                NULL, NULL,
 
135
                gtk_marshal_NONE__INT,
 
136
                G_TYPE_NONE, 1,
 
137
                G_TYPE_POINTER);
 
138
        geany_object_signals[GCB_PROJECT_CLOSE] = g_signal_new (
 
139
                "project-close",
 
140
                G_OBJECT_CLASS_TYPE (g_object_class),
 
141
                G_SIGNAL_RUN_FIRST,
 
142
                G_STRUCT_OFFSET (GeanyObjectClass, project_close),
 
143
                NULL, NULL,
 
144
                gtk_marshal_NONE__NONE,
 
145
                G_TYPE_NONE, 0);
 
146
}
 
147
 
 
148
 
 
149
static void geany_object_class_init(GeanyObjectClass *klass)
 
150
{
 
151
        GObjectClass *g_object_class;
 
152
 
 
153
        g_object_class = G_OBJECT_CLASS(klass);
 
154
 
 
155
        g_object_class->finalize = geany_object_finalize;
 
156
 
 
157
        parent_class = (GObjectClass*)g_type_class_peek(G_TYPE_OBJECT);
 
158
        g_type_class_add_private((gpointer)klass, sizeof(GeanyObjectPrivate));
 
159
 
 
160
        create_signals(g_object_class);
 
161
}
 
162
 
 
163
 
 
164
static void geany_object_init(GeanyObject *self)
 
165
{
 
166
 
 
167
}
 
168
 
 
169
 
 
170
GObject* geany_object_new(void)
 
171
{
 
172
        return (GObject*)g_object_new(GEANY_OBJECT_TYPE, NULL);
 
173
}
 
174
 
 
175
 
 
176
static void geany_object_finalize(GObject *object)
 
177
{
 
178
        GeanyObject *self;
 
179
 
 
180
        g_return_if_fail(object != NULL);
 
181
        g_return_if_fail(IS_GEANY_OBJECT(object));
 
182
 
 
183
        self = GEANY_OBJECT(object);
 
184
 
 
185
        if (G_OBJECT_CLASS(parent_class)->finalize)
 
186
                (* G_OBJECT_CLASS(parent_class)->finalize)(object);
 
187
}
 
188