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,
24 TILDA_TERMINAL_BACKSPACE_BINDING,
25 TILDA_TERMINAL_DELETE_BINDING,
26 TILDA_TERMINAL_DYNAMIC_TITLE,
27 TILDA_TERMINAL_EXIT_ACTION,
31 tilda_terminal_instance_init (GTypeInstance *instance,
34 TildaTerminal *self = (TildaTerminal *) instance;
36 /* Initialize instance members and allocate any necessary memory here.
37 * NOTE: any constructor-time values will be set later. */
38 self->dispose_has_run = FALSE;
43 tilda_terminal_set_property (GObject *object,
48 TildaTerminal *self = (TildaTerminal *) object;
50 switch (property_id) {
52 case TILDA_TERMINAL_NUMBER:
53 self->number = g_value_get_int (value);
54 g_print ("terminal number: %d\n", self->number);
57 case TILDA_TERMINAL_BACKGROUND_IMAGE:
58 g_free (self->background_image);
59 self->background_image = g_value_dup_string (value);
60 // TODO: Actually set it in self->vte_term
61 g_print ("terminal back img: %s\n", self->background_image);
64 case TILDA_TERMINAL_SHELL:
66 self->shell = g_value_dup_string (value);
67 g_print ("terminal shell: %s\n", self->shell);
70 case TILDA_TERMINAL_FONT:
72 self->font = g_value_dup_string (value);
73 g_print ("terminal font: %s\n", self->font);
76 case TILDA_TERMINAL_TITLE:
78 self->title = g_value_dup_string (value);
79 g_print ("terminal title: %s\n", self->title);
82 case TILDA_TERMINAL_WORKING_DIRECTORY:
83 g_free (self->working_directory);
84 self->working_directory = g_value_dup_string (value);
85 g_print ("terminal wrk dir: %s\n", self->working_directory);
88 case TILDA_TERMINAL_SCROLLBACK_LINES:
89 self->scrollback_lines = g_value_get_int (value);
90 g_print ("terminal scrollback lines: %d\n", self->scrollback_lines);
93 case TILDA_TERMINAL_TRANSPARENCY_PERCENT:
94 self->transparency_percent = g_value_get_int (value);
95 g_print ("terminal transp percent: %d\n", self->transparency_percent);
98 case TILDA_TERMINAL_BACKSPACE_BINDING:
99 self->backspace_binding = g_value_get_int (value);
100 //vte_terminal_set_backspace_binding (VTE_TERMINAL(self->vte_term), self->backspace_binding);
101 g_print ("terminal backspace key: %d\n", self->backspace_binding);
104 case TILDA_TERMINAL_DELETE_BINDING:
105 self->delete_binding = g_value_get_int (value);
106 //vte_terminal_set_delete_binding (VTE_TERMINAL(self->vte_term), self->delete_binding);
107 g_print ("terminal delete key: %d\n", self->delete_binding);
110 case TILDA_TERMINAL_DYNAMIC_TITLE:
111 self->dynamic_title = g_value_get_int (value);
112 g_print ("terminal dynamic title: %d\n", self->dynamic_title);
115 case TILDA_TERMINAL_EXIT_ACTION:
116 self->exit_action = g_value_get_int (value);
117 g_print ("terminal exit action: %d\n", self->exit_action);
121 /* We don't have this property... */
122 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
128 tilda_terminal_get_property (GObject *object,
133 TildaTerminal *self = (TildaTerminal *) object;
135 switch (property_id) {
137 case TILDA_TERMINAL_NUMBER:
138 g_value_set_int (value, self->number);
141 case TILDA_TERMINAL_BACKGROUND_IMAGE:
142 g_value_set_string (value, self->background_image);
145 case TILDA_TERMINAL_SHELL:
146 g_value_set_string (value, self->shell);
149 case TILDA_TERMINAL_FONT:
150 g_value_set_string (value, self->font);
153 case TILDA_TERMINAL_TITLE:
154 g_value_set_string (value, self->title);
157 case TILDA_TERMINAL_WORKING_DIRECTORY:
158 g_value_set_string (value, self->working_directory);
161 case TILDA_TERMINAL_SCROLLBACK_LINES:
162 g_value_set_int (value, self->scrollback_lines);
165 case TILDA_TERMINAL_TRANSPARENCY_PERCENT:
166 g_value_set_int (value, self->transparency_percent);
170 /* We don't have this property... */
171 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
177 tilda_terminal_constructor (GType type,
178 guint n_construct_properties,
179 GObjectConstructParam *construct_properties)
183 /* Invoke parent constructor */
184 TildaTerminalClass *klass;
185 klass = TILDA_TERMINAL_CLASS (g_type_class_peek (TILDA_TYPE_TERMINAL));
186 obj = parent_class->constructor (type,
187 n_construct_properties,
188 construct_properties);
190 /* Do other stuff here. The object is ready to go now, and all
191 * ctor properties have been set.
193 * TODO: This is the place to do DBus-init */
200 tilda_terminal_dispose (GObject *obj)
202 TildaTerminal *self = (TildaTerminal *) obj;
204 /* We don't want to run dispose twice, so just return immediately */
205 if (self->dispose_has_run)
208 self->dispose_has_run = TRUE;
211 * In dispose, you are supposed to free all types referenced from this
212 * object which might themselves hold a reference to self. Generally,
213 * the most simple solution is to unref all members on which you own a
217 /* Chain up to the parent class */
218 G_OBJECT_CLASS (parent_class)->dispose (obj);
222 tilda_terminal_finalize (GObject *obj)
224 TildaTerminal *self = (TildaTerminal *) obj;
227 * Here, complete object destruction.
228 * You might not need to do much...
231 // TODO: g_free() any primitives here
232 g_free (self->background_image);
233 g_free (self->shell);
235 g_free (self->title);
236 g_free (self->working_directory);
239 /* Chain up to the parent class */
240 G_OBJECT_CLASS (parent_class)->finalize (obj);
244 tilda_terminal_class_init (gpointer g_class,
245 gpointer g_class_data)
247 GObjectClass *gobject_class = G_OBJECT_CLASS (g_class);
248 TildaTerminalClass *klass = TILDA_TERMINAL_CLASS (g_class);
251 /* Hook our functions to this type */
252 gobject_class->set_property = tilda_terminal_set_property;
253 gobject_class->get_property = tilda_terminal_get_property;
254 gobject_class->dispose = tilda_terminal_dispose;
255 gobject_class->finalize = tilda_terminal_finalize;
256 gobject_class->constructor = tilda_terminal_constructor;
258 parent_class = g_type_class_peek_parent (klass);
260 /* Install all of the properties */
261 pspec = g_param_spec_int ("number",
263 "Set terminal's number",
265 INT_MAX, // max value
267 G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE);
269 g_object_class_install_property (gobject_class,
270 TILDA_TERMINAL_NUMBER,
273 pspec = g_param_spec_string ("background-image",
274 "Terminal's background image",
275 "Get/Set terminal's background image",
279 g_object_class_install_property (gobject_class,
280 TILDA_TERMINAL_BACKGROUND_IMAGE,
283 pspec = g_param_spec_string ("shell",
285 "Get/Set terminal's shell",
289 g_object_class_install_property (gobject_class,
290 TILDA_TERMINAL_SHELL,
293 pspec = g_param_spec_string ("font",
295 "Get/Set terminal's font",
299 g_object_class_install_property (gobject_class,
303 pspec = g_param_spec_string ("title",
305 "Get/Set terminal's title",
309 g_object_class_install_property (gobject_class,
310 TILDA_TERMINAL_TITLE,
313 pspec = g_param_spec_string ("working-directory",
314 "Terminal's initial working directory",
315 "Get/Set terminal's initial working directory",
319 g_object_class_install_property (gobject_class,
320 TILDA_TERMINAL_WORKING_DIRECTORY,
323 pspec = g_param_spec_int ("scrollback-lines",
324 "Terminal's scrollback amount (lines)",
325 "Get/Set terminal's scrollback amount",
327 INT_MAX, // TODO: artificially limit this?
331 g_object_class_install_property (gobject_class,
332 TILDA_TERMINAL_SCROLLBACK_LINES,
335 pspec = g_param_spec_int ("transparency-percent",
336 "Terminal's transparency (percent)",
337 "Get/Set terminal's transparency",
343 g_object_class_install_property (gobject_class,
344 TILDA_TERMINAL_TRANSPARENCY_PERCENT,
349 tilda_terminal_get_type (void)
351 static GType type = 0;
355 static const GTypeInfo info = {
356 sizeof (TildaTerminalClass),
357 NULL, /* base_init */
358 NULL, /* base_finalize */
359 tilda_terminal_class_init, /* class_init */
360 NULL, /* class_finalize */
361 NULL, /* class_data */
362 sizeof (TildaTerminal),
364 tilda_terminal_instance_init, /* instance_init */
367 type = g_type_register_static (G_TYPE_OBJECT,
376 int main (int argc, char *argv[])
379 gint test_number = INT_MIN;
380 gchar *test_string = NULL;
382 /* Initialize the GObject type system */
385 tt = g_object_new (TILDA_TYPE_TERMINAL, "number", 10, NULL);
386 g_object_get (G_OBJECT (tt), "number", &test_number, NULL);
387 g_assert (test_number == 10);
389 g_object_unref (G_OBJECT (tt));
391 tt = g_object_new (TILDA_TYPE_TERMINAL, "number", 22, NULL);
392 g_object_get (G_OBJECT (tt), "number", &test_number, NULL);
393 g_assert (test_number == 22);
395 g_object_set (G_OBJECT (tt), "font", "hello I'm a font");
396 g_object_set (G_OBJECT (tt), "font", "Bitstream Vera Sans Mono 13");
398 g_object_get (G_OBJECT (tt), "font", &test_string, NULL);
399 g_print ("Read Font: %s\n", test_string);
400 // NOTE: you MUST free the string!!!!
401 g_free (test_string);
403 g_object_set (G_OBJECT (tt), "transparency-percent", 50);
405 g_object_unref (G_OBJECT (tt));
410 /* vim: set ts=4 sts=4 sw=4 noet tw=112: */