1 #include "tilda-terminal.h"
3 static GObjectClass *parent_class = NULL;
8 * All GObject stuff is below. You probably don't need to change this...
11 enum tilda_terminal_properties {
12 TILDA_TERMINAL_NUMBER = 1,
14 /* All non-constructor-only properties */
15 TILDA_TERMINAL_BACKGROUND_IMAGE,
19 TILDA_TERMINAL_WORKING_DIRECTORY,
21 TILDA_TERMINAL_SCROLLBACK_LINES,
22 TILDA_TERMINAL_TRANSPARENCY_PERCENT,
26 tilda_terminal_instance_init (GTypeInstance *instance,
29 TildaTerminal *self = (TildaTerminal *) instance;
31 /* Initialize instance members and allocate any necessary memory here.
32 * NOTE: any constructor-time values will be set later. */
33 self->dispose_has_run = FALSE;
38 tilda_terminal_set_property (GObject *object,
43 TildaTerminal *self = (TildaTerminal *) object;
45 switch (property_id) {
47 case TILDA_TERMINAL_NUMBER:
48 self->number = g_value_get_int (value);
49 g_print ("terminal number: %d\n", self->number);
52 case TILDA_TERMINAL_BACKGROUND_IMAGE:
53 g_free (self->background_image);
54 self->background_image = g_value_dup_string (value);
55 // TODO: Actually set it in self->vte_term
56 g_print ("terminal back img: %s\n", self->background_image);
59 case TILDA_TERMINAL_SHELL:
61 self->shell = g_value_dup_string (value);
62 g_print ("terminal shell: %s\n", self->shell);
65 case TILDA_TERMINAL_FONT:
67 self->font = g_value_dup_string (value);
68 g_print ("terminal font: %s\n", self->font);
71 case TILDA_TERMINAL_TITLE:
73 self->title = g_value_dup_string (value);
74 g_print ("terminal title: %s\n", self->title);
77 case TILDA_TERMINAL_WORKING_DIRECTORY:
78 g_free (self->working_directory);
79 self->working_directory = g_value_dup_string (value);
80 g_print ("terminal wrk dir: %s\n", self->working_directory);
83 case TILDA_TERMINAL_SCROLLBACK_LINES:
84 self->scrollback_lines = g_value_get_int (value);
85 g_print ("terminal scrollback lines: %d\n", self->scrollback_lines);
88 case TILDA_TERMINAL_TRANSPARENCY_PERCENT:
89 self->transparency_percent = g_value_get_int (value);
90 g_print ("terminal transp percent: %d\n", self->transparency_percent);
94 /* We don't have this property... */
95 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
101 tilda_terminal_get_property (GObject *object,
106 TildaTerminal *self = (TildaTerminal *) object;
108 switch (property_id) {
110 case TILDA_TERMINAL_NUMBER:
111 g_value_set_int (value, self->number);
114 case TILDA_TERMINAL_BACKGROUND_IMAGE:
115 g_value_set_string (value, self->background_image);
118 case TILDA_TERMINAL_SHELL:
119 g_value_set_string (value, self->shell);
122 case TILDA_TERMINAL_FONT:
123 g_value_set_string (value, self->font);
126 case TILDA_TERMINAL_TITLE:
127 g_value_set_string (value, self->title);
130 case TILDA_TERMINAL_WORKING_DIRECTORY:
131 g_value_set_string (value, self->working_directory);
134 case TILDA_TERMINAL_SCROLLBACK_LINES:
135 g_value_set_int (value, self->scrollback_lines);
138 case TILDA_TERMINAL_TRANSPARENCY_PERCENT:
139 g_value_set_int (value, self->transparency_percent);
143 /* We don't have this property... */
144 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
150 tilda_terminal_constructor (GType type,
151 guint n_construct_properties,
152 GObjectConstructParam *construct_properties)
156 /* Invoke parent constructor */
157 TildaTerminalClass *klass;
158 klass = TILDA_TERMINAL_CLASS (g_type_class_peek (TILDA_TYPE_TERMINAL));
159 obj = parent_class->constructor (type,
160 n_construct_properties,
161 construct_properties);
163 /* Do other stuff here. The object is ready to go now, and all
164 * ctor properties have been set.
166 * TODO: This is the place to do DBus-init */
173 tilda_terminal_dispose (GObject *obj)
175 TildaTerminal *self = (TildaTerminal *) obj;
177 /* We don't want to run dispose twice, so just return immediately */
178 if (self->dispose_has_run)
181 self->dispose_has_run = TRUE;
184 * In dispose, you are supposed to free all types referenced from this
185 * object which might themselves hold a reference to self. Generally,
186 * the most simple solution is to unref all members on which you own a
190 /* Chain up to the parent class */
191 G_OBJECT_CLASS (parent_class)->dispose (obj);
195 tilda_terminal_finalize (GObject *obj)
197 TildaTerminal *self = (TildaTerminal *) obj;
200 * Here, complete object destruction.
201 * You might not need to do much...
204 // TODO: g_free() any primitives here
205 g_free (self->background_image);
206 g_free (self->shell);
208 g_free (self->title);
209 g_free (self->working_directory);
212 /* Chain up to the parent class */
213 G_OBJECT_CLASS (parent_class)->finalize (obj);
217 tilda_terminal_class_init (gpointer g_class,
218 gpointer g_class_data)
220 GObjectClass *gobject_class = G_OBJECT_CLASS (g_class);
221 TildaTerminalClass *klass = TILDA_TERMINAL_CLASS (g_class);
224 /* Hook our functions to this type */
225 gobject_class->set_property = tilda_terminal_set_property;
226 gobject_class->get_property = tilda_terminal_get_property;
227 gobject_class->dispose = tilda_terminal_dispose;
228 gobject_class->finalize = tilda_terminal_finalize;
229 gobject_class->constructor = tilda_terminal_constructor;
231 parent_class = g_type_class_peek_parent (klass);
233 /* Install all of the properties */
234 pspec = g_param_spec_int ("number",
236 "Set terminal's number",
238 INT_MAX, // max value
240 G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE);
242 g_object_class_install_property (gobject_class,
243 TILDA_TERMINAL_NUMBER,
246 pspec = g_param_spec_string ("background-image",
247 "Terminal's background image",
248 "Get/Set terminal's background image",
252 g_object_class_install_property (gobject_class,
253 TILDA_TERMINAL_BACKGROUND_IMAGE,
256 pspec = g_param_spec_string ("shell",
258 "Get/Set terminal's shell",
262 g_object_class_install_property (gobject_class,
263 TILDA_TERMINAL_SHELL,
266 pspec = g_param_spec_string ("font",
268 "Get/Set terminal's font",
272 g_object_class_install_property (gobject_class,
276 pspec = g_param_spec_string ("title",
278 "Get/Set terminal's title",
282 g_object_class_install_property (gobject_class,
283 TILDA_TERMINAL_TITLE,
286 pspec = g_param_spec_string ("working-directory",
287 "Terminal's initial working directory",
288 "Get/Set terminal's initial working directory",
292 g_object_class_install_property (gobject_class,
293 TILDA_TERMINAL_WORKING_DIRECTORY,
296 pspec = g_param_spec_int ("scrollback-lines",
297 "Terminal's scrollback amount (lines)",
298 "Get/Set terminal's scrollback amount",
300 INT_MAX, // TODO: artificially limit this?
304 g_object_class_install_property (gobject_class,
305 TILDA_TERMINAL_SCROLLBACK_LINES,
308 pspec = g_param_spec_int ("transparency-percent",
309 "Terminal's transparency (percent)",
310 "Get/Set terminal's transparency",
316 g_object_class_install_property (gobject_class,
317 TILDA_TERMINAL_TRANSPARENCY_PERCENT,
322 tilda_terminal_get_type (void)
324 static GType type = 0;
328 static const GTypeInfo info = {
329 sizeof (TildaTerminalClass),
330 NULL, /* base_init */
331 NULL, /* base_finalize */
332 tilda_terminal_class_init, /* class_init */
333 NULL, /* class_finalize */
334 NULL, /* class_data */
335 sizeof (TildaTerminal),
337 tilda_terminal_instance_init, /* instance_init */
340 type = g_type_register_static (G_TYPE_OBJECT,
349 int main (int argc, char *argv[])
352 gint test_number = INT_MIN;
353 gchar *test_string = NULL;
355 /* Initialize the GObject type system */
358 tt = g_object_new (TILDA_TYPE_TERMINAL, "number", 10, NULL);
359 g_object_get (G_OBJECT (tt), "number", &test_number, NULL);
360 g_assert (test_number == 10);
362 g_object_unref (G_OBJECT (tt));
364 tt = g_object_new (TILDA_TYPE_TERMINAL, "number", 22, NULL);
365 g_object_get (G_OBJECT (tt), "number", &test_number, NULL);
366 g_assert (test_number == 22);
368 g_object_set (G_OBJECT (tt), "font", "hello I'm a font");
369 g_object_set (G_OBJECT (tt), "font", "Bitstream Vera Sans Mono 13");
371 g_object_get (G_OBJECT (tt), "font", &test_string, NULL);
372 g_print ("Read Font: %s\n", test_string);
373 // NOTE: you MUST free the string!!!!
374 g_free (test_string);
376 g_object_set (G_OBJECT (tt), "transparency-percent", 50);
378 g_object_unref (G_OBJECT (tt));
383 /* vim: set ts=4 sts=4 sw=4 noet tw=112: */