geany  1.38
About: Geany is a text editor (using GTK2) with basic features of an integrated development environment (syntax highlighting, code folding, symbol name auto-completion, ...). F: office T: editor programming GTK+ IDE
  Fossies Dox: geany-1.38.tar.bz2  ("unofficial" and yet experimental doxygen-generated source code documentation)  

geanyobject.c
Go to the documentation of this file.
1/*
2 * geanyobject.c - this file is part of Geany, a fast and lightweight IDE
3 *
4 * Copyright 2007 The Geany contributors
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License along
17 * with this program; if not, write to the Free Software Foundation, Inc.,
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 */
20
21/* A GObject used for connecting and emitting signals when certain events happen,
22 * e.g. opening a document.
23 * Mainly used for plugins - see the API docs.
24 *
25 * Core-only signals:
26 *
27 * signal void save_settings(GObject *obj, GKeyFile *keyfile, gpointer user_data);
28 * Emitted just before saving main keyfile settings.
29
30 * signal void load_settings(GObject *obj, GKeyFile *keyfile, gpointer user_data);
31 * Emitted just after loading main keyfile settings.
32 */
33
34#ifdef HAVE_CONFIG_H
35# include "config.h"
36#endif
37
38#include "geanyobject.h"
39
40/* extern in geany.h */
41GObject *geany_object;
42
43static guint geany_object_signals[GCB_MAX] = { 0 };
44
45
47
49{
50 /* to avoid warnings (g_type_class_add_private: assertion `private_size > 0' failed) */
51 gchar dummy;
52};
53
54/** @gironly
55 * Get the GObject-derived GType for GeanyObject
56 *
57 * @return GeanyObject type */
58GEANY_API_SYMBOL
60
61G_DEFINE_TYPE(GeanyObject, geany_object, G_TYPE_OBJECT)
62
63
64static gboolean boolean_handled_accumulator(GSignalInvocationHint *ihint, GValue *return_accu,
65 const GValue *handler_return, gpointer dummy)
66{
67 gboolean continue_emission, signal_handled;
68
69 signal_handled = g_value_get_boolean(handler_return);
70 g_value_set_boolean(return_accu, signal_handled);
71 continue_emission = !signal_handled;
72
73 return continue_emission;
74}
75
76
77static void create_signals(GObjectClass *g_object_class)
78{
79 /* Document signals */
81 "document-new",
82 G_OBJECT_CLASS_TYPE (g_object_class),
83 G_SIGNAL_RUN_FIRST,
84 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED,
85 G_TYPE_NONE, 1,
88 "document-open",
89 G_OBJECT_CLASS_TYPE (g_object_class),
90 G_SIGNAL_RUN_FIRST,
91 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED,
92 G_TYPE_NONE, 1,
95 "document-reload",
96 G_OBJECT_CLASS_TYPE (g_object_class),
97 G_SIGNAL_RUN_FIRST,
98 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED,
99 G_TYPE_NONE, 1,
102 "document-before-save",
103 G_OBJECT_CLASS_TYPE (g_object_class),
104 G_SIGNAL_RUN_FIRST,
105 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED,
106 G_TYPE_NONE, 1,
109 "document-save",
110 G_OBJECT_CLASS_TYPE (g_object_class),
111 G_SIGNAL_RUN_FIRST,
112 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED,
113 G_TYPE_NONE, 1,
116 "document-filetype-set",
117 G_OBJECT_CLASS_TYPE (g_object_class),
118 G_SIGNAL_RUN_FIRST,
119 0, NULL, NULL, NULL,
120 G_TYPE_NONE, 2,
123 "document-activate",
124 G_OBJECT_CLASS_TYPE (g_object_class),
125 G_SIGNAL_RUN_FIRST,
126 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED,
127 G_TYPE_NONE, 1,
130 "document-close",
131 G_OBJECT_CLASS_TYPE (g_object_class),
132 G_SIGNAL_RUN_FIRST,
133 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED,
134 G_TYPE_NONE, 1,
136
137 /* Project signals */
138 geany_object_signals[GCB_PROJECT_OPEN] = g_signal_new (
139 "project-open",
140 G_OBJECT_CLASS_TYPE (g_object_class),
141 G_SIGNAL_RUN_FIRST,
142 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED,
143 G_TYPE_NONE, 1,
144 G_TYPE_KEY_FILE);
145 geany_object_signals[GCB_PROJECT_SAVE] = g_signal_new (
146 "project-save",
147 G_OBJECT_CLASS_TYPE (g_object_class),
148 G_SIGNAL_RUN_FIRST,
149 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED,
150 G_TYPE_NONE, 1,
151 G_TYPE_KEY_FILE);
153 "project-close",
154 G_OBJECT_CLASS_TYPE (g_object_class),
155 G_SIGNAL_RUN_FIRST,
156 0, NULL, NULL, g_cclosure_marshal_VOID__VOID,
157 G_TYPE_NONE, 0);
159 "project-before-close",
160 G_OBJECT_CLASS_TYPE (g_object_class),
161 G_SIGNAL_RUN_FIRST,
162 0, NULL, NULL, g_cclosure_marshal_VOID__VOID,
163 G_TYPE_NONE, 0);
165 "project-dialog-open",
166 G_OBJECT_CLASS_TYPE (g_object_class),
167 G_SIGNAL_RUN_FIRST,
168 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT,
169 G_TYPE_NONE, 1,
170 GTK_TYPE_NOTEBOOK);
172 "project-dialog-confirmed",
173 G_OBJECT_CLASS_TYPE (g_object_class),
174 G_SIGNAL_RUN_FIRST,
175 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT,
176 G_TYPE_NONE, 1,
177 GTK_TYPE_NOTEBOOK);
179 "project-dialog-close",
180 G_OBJECT_CLASS_TYPE (g_object_class),
181 G_SIGNAL_RUN_FIRST,
182 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT,
183 G_TYPE_NONE, 1,
184 GTK_TYPE_NOTEBOOK);
185
186 /* Editor signals */
188 "update-editor-menu",
189 G_OBJECT_CLASS_TYPE (g_object_class),
190 G_SIGNAL_RUN_FIRST,
191 0, NULL, NULL, NULL,
192 G_TYPE_NONE, 3,
193 G_TYPE_STRING, G_TYPE_INT, GEANY_TYPE_DOCUMENT);
195 "editor-notify",
196 G_OBJECT_CLASS_TYPE (g_object_class),
197 G_SIGNAL_RUN_LAST,
199 G_TYPE_BOOLEAN, 2,
200 GEANY_TYPE_EDITOR, SCINTILLA_TYPE_NOTIFICATION);
201
202 /* General signals */
204 "geany-startup-complete",
205 G_OBJECT_CLASS_TYPE (g_object_class),
206 G_SIGNAL_RUN_FIRST,
207 0, NULL, NULL, g_cclosure_marshal_VOID__VOID,
208 G_TYPE_NONE, 0);
209 geany_object_signals[GCB_BUILD_START] = g_signal_new (
210 "build-start",
211 G_OBJECT_CLASS_TYPE (g_object_class),
212 G_SIGNAL_RUN_FIRST,
213 0, NULL, NULL, g_cclosure_marshal_VOID__VOID,
214 G_TYPE_NONE, 0);
215
216 /* Core-only signals */
218 "save-settings",
219 G_OBJECT_CLASS_TYPE (g_object_class),
220 G_SIGNAL_RUN_FIRST,
221 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED,
222 G_TYPE_NONE, 1,
223 G_TYPE_KEY_FILE);
225 "load-settings",
226 G_OBJECT_CLASS_TYPE (g_object_class),
227 G_SIGNAL_RUN_FIRST,
228 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED,
229 G_TYPE_NONE, 1,
230 G_TYPE_KEY_FILE);
231
232 /* Key press signal */
234 "key-press",
235 G_OBJECT_CLASS_TYPE (g_object_class),
236 G_SIGNAL_RUN_LAST,
238 G_TYPE_BOOLEAN, 1,
239 GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE);
240}
241
242
244{
245 GObjectClass *g_object_class;
246 g_object_class = G_OBJECT_CLASS(klass);
247
248 g_type_class_add_private(klass, sizeof(GeanyObjectPrivate));
249
250 create_signals(g_object_class);
251}
252
253
255{
256 /* nothing to do */
257}
258
259
260GObject *geany_object_new(void)
261{
262 return g_object_new(GEANY_OBJECT_TYPE, NULL);
263}
#define GEANY_TYPE_DOCUMENT
Definition: document.h:74
#define GEANY_TYPE_EDITOR
Definition: editor.h:145
#define GEANY_TYPE_FILETYPE
Definition: filetypes.h:191
static void geany_object_class_init(GeanyObjectClass *klass)
Definition: geanyobject.c:243
static void create_signals(GObjectClass *g_object_class)
Definition: geanyobject.c:77
static gboolean boolean_handled_accumulator(GSignalInvocationHint *ihint, GValue *return_accu, const GValue *handler_return, gpointer dummy)
Definition: geanyobject.c:64
GObject * geany_object
Definition: geanyobject.c:41
GType geany_object_get_type(void)
static void geany_object_init(GeanyObject *self)
Definition: geanyobject.c:254
static guint geany_object_signals[GCB_MAX]
Definition: geanyobject.c:43
GObject * geany_object_new(void)
Definition: geanyobject.c:260
@ GCB_EDITOR_NOTIFY
Definition: geanyobject.h:54
@ GCB_DOCUMENT_FILETYPE_SET
Definition: geanyobject.h:43
@ GCB_DOCUMENT_ACTIVATE
Definition: geanyobject.h:44
@ GCB_DOCUMENT_CLOSE
Definition: geanyobject.h:45
@ GCB_MAX
Definition: geanyobject.h:60
@ GCB_DOCUMENT_SAVE
Definition: geanyobject.h:42
@ GCB_PROJECT_CLOSE
Definition: geanyobject.h:48
@ GCB_PROJECT_DIALOG_OPEN
Definition: geanyobject.h:50
@ GCB_GEANY_STARTUP_COMPLETE
Definition: geanyobject.h:55
@ GCB_PROJECT_DIALOG_CLOSE
Definition: geanyobject.h:52
@ GCB_PROJECT_OPEN
Definition: geanyobject.h:46
@ GCB_KEY_PRESS_NOTIFY
Definition: geanyobject.h:59
@ GCB_DOCUMENT_BEFORE_SAVE
Definition: geanyobject.h:41
@ GCB_SAVE_SETTINGS
Definition: geanyobject.h:57
@ GCB_PROJECT_DIALOG_CONFIRMED
Definition: geanyobject.h:51
@ GCB_DOCUMENT_OPEN
Definition: geanyobject.h:39
@ GCB_LOAD_SETTINGS
Definition: geanyobject.h:58
@ GCB_DOCUMENT_NEW
Definition: geanyobject.h:38
@ GCB_PROJECT_SAVE
Definition: geanyobject.h:47
@ GCB_DOCUMENT_RELOAD
Definition: geanyobject.h:40
@ GCB_UPDATE_EDITOR_MENU
Definition: geanyobject.h:53
@ GCB_PROJECT_BEFORE_CLOSE
Definition: geanyobject.h:49
@ GCB_BUILD_START
Definition: geanyobject.h:56
#define GEANY_OBJECT_TYPE
Definition: geanyobject.h:65
static gboolean dummy
Definition: libmain.c:115
#define NULL
Definition: rbtree.h:150