Small update of the French translation
[geany-mirror.git] / src / geanyobject.c
blobb15e5378a859d8b6ade98f92e8c8840b7cb14428
1 /*
2 * geanyobject.c - this file is part of Geany, a fast and lightweight IDE
4 * Copyright 2007-2012 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
5 * Copyright 2007-2012 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
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.
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.
17 * You should have received a copy of the GNU General Public License along
18 * with this program; if not, write to the Free Software Foundation, Inc.,
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22 /* A GObject used for connecting and emitting signals when certain events happen,
23 * e.g. opening a document.
24 * Mainly used for plugins - see the API docs.
26 * Core-only signals:
28 * signal void save_settings(GObject *obj, GKeyFile *keyfile, gpointer user_data);
29 * Emitted just before saving main keyfile settings.
31 * signal void load_settings(GObject *obj, GKeyFile *keyfile, gpointer user_data);
32 * Emitted just after loading main keyfile settings.
35 #ifdef HAVE_CONFIG_H
36 # include "config.h"
37 #endif
39 #include "geanyobject.h"
41 /* extern in geany.h */
42 GObject *geany_object;
44 static guint geany_object_signals[GCB_MAX] = { 0 };
47 typedef struct _GeanyObjectPrivate GeanyObjectPrivate;
49 struct _GeanyObjectPrivate
51 /* to avoid warnings (g_type_class_add_private: assertion `private_size > 0' failed) */
52 gchar dummy;
55 /** @gironly
56 * Get the GObject-derived GType for GeanyObject
58 * @return GeanyObject type */
59 GEANY_API_SYMBOL
60 GType geany_object_get_type(void);
62 G_DEFINE_TYPE(GeanyObject, geany_object, G_TYPE_OBJECT)
65 static gboolean boolean_handled_accumulator(GSignalInvocationHint *ihint, GValue *return_accu,
66 const GValue *handler_return, gpointer dummy)
68 gboolean continue_emission, signal_handled;
70 signal_handled = g_value_get_boolean(handler_return);
71 g_value_set_boolean(return_accu, signal_handled);
72 continue_emission = !signal_handled;
74 return continue_emission;
78 static void create_signals(GObjectClass *g_object_class)
80 /* Document signals */
81 geany_object_signals[GCB_DOCUMENT_NEW] = g_signal_new (
82 "document-new",
83 G_OBJECT_CLASS_TYPE (g_object_class),
84 G_SIGNAL_RUN_FIRST,
85 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED,
86 G_TYPE_NONE, 1,
87 GEANY_TYPE_DOCUMENT);
88 geany_object_signals[GCB_DOCUMENT_OPEN] = g_signal_new (
89 "document-open",
90 G_OBJECT_CLASS_TYPE (g_object_class),
91 G_SIGNAL_RUN_FIRST,
92 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED,
93 G_TYPE_NONE, 1,
94 GEANY_TYPE_DOCUMENT);
95 geany_object_signals[GCB_DOCUMENT_RELOAD] = g_signal_new (
96 "document-reload",
97 G_OBJECT_CLASS_TYPE (g_object_class),
98 G_SIGNAL_RUN_FIRST,
99 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED,
100 G_TYPE_NONE, 1,
101 GEANY_TYPE_DOCUMENT);
102 geany_object_signals[GCB_DOCUMENT_BEFORE_SAVE] = g_signal_new (
103 "document-before-save",
104 G_OBJECT_CLASS_TYPE (g_object_class),
105 G_SIGNAL_RUN_FIRST,
106 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED,
107 G_TYPE_NONE, 1,
108 GEANY_TYPE_DOCUMENT);
109 geany_object_signals[GCB_DOCUMENT_SAVE] = g_signal_new (
110 "document-save",
111 G_OBJECT_CLASS_TYPE (g_object_class),
112 G_SIGNAL_RUN_FIRST,
113 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED,
114 G_TYPE_NONE, 1,
115 GEANY_TYPE_DOCUMENT);
116 geany_object_signals[GCB_DOCUMENT_FILETYPE_SET] = g_signal_new (
117 "document-filetype-set",
118 G_OBJECT_CLASS_TYPE (g_object_class),
119 G_SIGNAL_RUN_FIRST,
120 0, NULL, NULL, NULL,
121 G_TYPE_NONE, 2,
122 GEANY_TYPE_DOCUMENT, GEANY_TYPE_FILETYPE);
123 geany_object_signals[GCB_DOCUMENT_ACTIVATE] = g_signal_new (
124 "document-activate",
125 G_OBJECT_CLASS_TYPE (g_object_class),
126 G_SIGNAL_RUN_FIRST,
127 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED,
128 G_TYPE_NONE, 1,
129 GEANY_TYPE_DOCUMENT);
130 geany_object_signals[GCB_DOCUMENT_CLOSE] = g_signal_new (
131 "document-close",
132 G_OBJECT_CLASS_TYPE (g_object_class),
133 G_SIGNAL_RUN_FIRST,
134 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED,
135 G_TYPE_NONE, 1,
136 GEANY_TYPE_DOCUMENT);
138 /* Project signals */
139 geany_object_signals[GCB_PROJECT_OPEN] = g_signal_new (
140 "project-open",
141 G_OBJECT_CLASS_TYPE (g_object_class),
142 G_SIGNAL_RUN_FIRST,
143 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED,
144 G_TYPE_NONE, 1,
145 G_TYPE_KEY_FILE);
146 geany_object_signals[GCB_PROJECT_SAVE] = g_signal_new (
147 "project-save",
148 G_OBJECT_CLASS_TYPE (g_object_class),
149 G_SIGNAL_RUN_FIRST,
150 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED,
151 G_TYPE_NONE, 1,
152 G_TYPE_KEY_FILE);
153 geany_object_signals[GCB_PROJECT_CLOSE] = g_signal_new (
154 "project-close",
155 G_OBJECT_CLASS_TYPE (g_object_class),
156 G_SIGNAL_RUN_FIRST,
157 0, NULL, NULL, g_cclosure_marshal_VOID__VOID,
158 G_TYPE_NONE, 0);
159 geany_object_signals[GCB_PROJECT_DIALOG_OPEN] = g_signal_new (
160 "project-dialog-open",
161 G_OBJECT_CLASS_TYPE (g_object_class),
162 G_SIGNAL_RUN_FIRST,
163 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT,
164 G_TYPE_NONE, 1,
165 GTK_TYPE_NOTEBOOK);
166 geany_object_signals[GCB_PROJECT_DIALOG_CONFIRMED] = g_signal_new (
167 "project-dialog-confirmed",
168 G_OBJECT_CLASS_TYPE (g_object_class),
169 G_SIGNAL_RUN_FIRST,
170 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT,
171 G_TYPE_NONE, 1,
172 GTK_TYPE_NOTEBOOK);
173 geany_object_signals[GCB_PROJECT_DIALOG_CLOSE] = g_signal_new (
174 "project-dialog-close",
175 G_OBJECT_CLASS_TYPE (g_object_class),
176 G_SIGNAL_RUN_FIRST,
177 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT,
178 G_TYPE_NONE, 1,
179 GTK_TYPE_NOTEBOOK);
181 /* Editor signals */
182 geany_object_signals[GCB_UPDATE_EDITOR_MENU] = g_signal_new (
183 "update-editor-menu",
184 G_OBJECT_CLASS_TYPE (g_object_class),
185 G_SIGNAL_RUN_FIRST,
186 0, NULL, NULL, NULL,
187 G_TYPE_NONE, 3,
188 G_TYPE_STRING, G_TYPE_INT, GEANY_TYPE_DOCUMENT);
189 geany_object_signals[GCB_EDITOR_NOTIFY] = g_signal_new (
190 "editor-notify",
191 G_OBJECT_CLASS_TYPE (g_object_class),
192 G_SIGNAL_RUN_LAST,
193 0, boolean_handled_accumulator, NULL, NULL,
194 G_TYPE_BOOLEAN, 2,
195 GEANY_TYPE_EDITOR, SCINTILLA_TYPE_NOTIFICATION);
197 /* General signals */
198 geany_object_signals[GCB_GEANY_STARTUP_COMPLETE] = g_signal_new (
199 "geany-startup-complete",
200 G_OBJECT_CLASS_TYPE (g_object_class),
201 G_SIGNAL_RUN_FIRST,
202 0, NULL, NULL, g_cclosure_marshal_VOID__VOID,
203 G_TYPE_NONE, 0);
204 geany_object_signals[GCB_BUILD_START] = g_signal_new (
205 "build-start",
206 G_OBJECT_CLASS_TYPE (g_object_class),
207 G_SIGNAL_RUN_FIRST,
208 0, NULL, NULL, g_cclosure_marshal_VOID__VOID,
209 G_TYPE_NONE, 0);
211 /* Core-only signals */
212 geany_object_signals[GCB_SAVE_SETTINGS] = g_signal_new (
213 "save-settings",
214 G_OBJECT_CLASS_TYPE (g_object_class),
215 G_SIGNAL_RUN_FIRST,
216 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED,
217 G_TYPE_NONE, 1,
218 G_TYPE_KEY_FILE);
219 geany_object_signals[GCB_LOAD_SETTINGS] = g_signal_new (
220 "load-settings",
221 G_OBJECT_CLASS_TYPE (g_object_class),
222 G_SIGNAL_RUN_FIRST,
223 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED,
224 G_TYPE_NONE, 1,
225 G_TYPE_KEY_FILE);
229 static void geany_object_class_init(GeanyObjectClass *klass)
231 GObjectClass *g_object_class;
232 g_object_class = G_OBJECT_CLASS(klass);
234 g_type_class_add_private(klass, sizeof(GeanyObjectPrivate));
236 create_signals(g_object_class);
240 static void geany_object_init(GeanyObject *self)
242 /* nothing to do */
246 GObject *geany_object_new(void)
248 return g_object_new(GEANY_OBJECT_TYPE, NULL);