1 /* config.c generated by valac 0.34.9, the Vala compiler
2  * generated from config.vala, do not modify */
3 
4 /*
5  * config.vala - This file is part of the Geany MultiTerm plugin
6  *
7  * Copyright (c) 2012 Matthew Brush <matt@geany.org>.
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
22  * MA 02110-1301, USA.
23  */
24 
25 #include <glib.h>
26 #include <glib-object.h>
27 #include "multiterm.h"
28 #include <stdlib.h>
29 #include <string.h>
30 #include <glib/gstdio.h>
31 #include <glib/gi18n-lib.h>
32 #include <gobject/gvaluecollector.h>
33 
34 #define _g_key_file_unref0(var) ((var == NULL) ? NULL : (var = (g_key_file_unref (var), NULL)))
35 #define _g_free0(var) (var = (g_free (var), NULL))
36 #define __g_list_free__multi_term_shell_config_unref0_0(var) ((var == NULL) ? NULL : (var = (_g_list_free__multi_term_shell_config_unref0_ (var), NULL)))
37 #define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
38 typedef struct _MultiTermParamSpecConfig MultiTermParamSpecConfig;
39 
40 struct _MultiTermConfigPrivate {
41 	gchar* _filename;
42 	GList* _shell_configs;
43 };
44 
45 struct _MultiTermParamSpecConfig {
46 	GParamSpec parent_instance;
47 };
48 
49 
50 static gpointer multi_term_config_parent_class = NULL;
51 
52 #define MULTI_TERM_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MULTI_TERM_TYPE_CONFIG, MultiTermConfigPrivate))
53 enum  {
54 	MULTI_TERM_CONFIG_DUMMY_PROPERTY
55 };
56 static void _multi_term_shell_config_unref0_ (gpointer var);
57 static void _g_list_free__multi_term_shell_config_unref0_ (GList* self);
58 static gboolean __lambda4_ (MultiTermConfig* self);
59 static gboolean ___lambda4__gsource_func (gpointer self);
60 static void multi_term_config_finalize (MultiTermConfig* obj);
61 static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
62 static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
63 
64 
_multi_term_shell_config_unref0_(gpointer var)65 static void _multi_term_shell_config_unref0_ (gpointer var) {
66 	(var == NULL) ? NULL : (var = (multi_term_shell_config_unref (var), NULL));
67 }
68 
69 
_g_list_free__multi_term_shell_config_unref0_(GList * self)70 static void _g_list_free__multi_term_shell_config_unref0_ (GList* self) {
71 	g_list_foreach (self, (GFunc) _multi_term_shell_config_unref0_, NULL);
72 	g_list_free (self);
73 }
74 
75 
multi_term_config_construct(GType object_type,const gchar * filename)76 MultiTermConfig* multi_term_config_construct (GType object_type, const gchar* filename) {
77 	MultiTermConfig* self = NULL;
78 	const gchar* _tmp0_ = NULL;
79 	gchar* _tmp1_ = NULL;
80 	g_return_val_if_fail (filename != NULL, NULL);
81 	self = (MultiTermConfig*) g_type_create_instance (object_type);
82 	_tmp0_ = filename;
83 	_tmp1_ = g_strdup (_tmp0_);
84 	_g_free0 (self->priv->_filename);
85 	self->priv->_filename = _tmp1_;
86 	multi_term_config_reload (self);
87 	return self;
88 }
89 
90 
multi_term_config_new(const gchar * filename)91 MultiTermConfig* multi_term_config_new (const gchar* filename) {
92 	return multi_term_config_construct (MULTI_TERM_TYPE_CONFIG, filename);
93 }
94 
95 
multi_term_config_store(MultiTermConfig * self)96 gboolean multi_term_config_store (MultiTermConfig* self) {
97 	gboolean result = FALSE;
98 	gchar* data = NULL;
99 	GKeyFile* _tmp0_ = NULL;
100 	gchar* _tmp1_ = NULL;
101 	gboolean _tmp8_ = FALSE;
102 	GError * _inner_error_ = NULL;
103 	g_return_val_if_fail (self != NULL, FALSE);
104 	_tmp0_ = self->kf;
105 	_tmp1_ = g_key_file_to_data (_tmp0_, NULL, NULL);
106 	data = _tmp1_;
107 	{
108 		const gchar* _tmp2_ = NULL;
109 		_tmp2_ = self->priv->_filename;
110 		g_file_set_contents (_tmp2_, data, (gssize) -1, &_inner_error_);
111 		if (G_UNLIKELY (_inner_error_ != NULL)) {
112 			gboolean _tmp3_ = FALSE;
113 			if (_inner_error_->domain == G_FILE_ERROR) {
114 				goto __catch0_g_file_error;
115 			}
116 			_g_free0 (data);
117 			g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
118 			g_clear_error (&_inner_error_);
119 			return _tmp3_;
120 		}
121 		result = FALSE;
122 		_g_free0 (data);
123 		return result;
124 	}
125 	goto __finally0;
126 	__catch0_g_file_error:
127 	{
128 		GError* err = NULL;
129 		const gchar* _tmp4_ = NULL;
130 		const gchar* _tmp5_ = NULL;
131 		GError* _tmp6_ = NULL;
132 		const gchar* _tmp7_ = NULL;
133 		err = _inner_error_;
134 		_inner_error_ = NULL;
135 		_tmp4_ = _ ("Unable to save config file %s: %s");
136 		_tmp5_ = self->priv->_filename;
137 		_tmp6_ = err;
138 		_tmp7_ = _tmp6_->message;
139 		g_warning (_tmp4_, _tmp5_, _tmp7_);
140 		result = TRUE;
141 		_g_error_free0 (err);
142 		_g_free0 (data);
143 		return result;
144 	}
145 	__finally0:
146 	_g_free0 (data);
147 	g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
148 	g_clear_error (&_inner_error_);
149 	return _tmp8_;
150 }
151 
152 
__lambda4_(MultiTermConfig * self)153 static gboolean __lambda4_ (MultiTermConfig* self) {
154 	gboolean result = FALSE;
155 	gboolean _tmp0_ = FALSE;
156 	_tmp0_ = multi_term_config_store (self);
157 	result = _tmp0_;
158 	return result;
159 }
160 
161 
___lambda4__gsource_func(gpointer self)162 static gboolean ___lambda4__gsource_func (gpointer self) {
163 	gboolean result;
164 	result = __lambda4_ ((MultiTermConfig*) self);
165 	return result;
166 }
167 
168 
multi_term_config_store_eventually(MultiTermConfig * self)169 void multi_term_config_store_eventually (MultiTermConfig* self) {
170 	g_return_if_fail (self != NULL);
171 	g_idle_add_full (G_PRIORITY_DEFAULT_IDLE, ___lambda4__gsource_func, multi_term_config_ref (self), multi_term_config_unref);
172 }
173 
174 
multi_term_config_reload(MultiTermConfig * self)175 void multi_term_config_reload (MultiTermConfig* self) {
176 	GError * _inner_error_ = NULL;
177 	g_return_if_fail (self != NULL);
178 	{
179 		GKeyFile* _tmp0_ = NULL;
180 		GKeyFile* _tmp1_ = NULL;
181 		gsize _tmp2_;
182 		gchar** _tmp3_ = NULL;
183 		GKeyFile* _tmp17_ = NULL;
184 		const gchar* _tmp18_ = NULL;
185 		GKeyFile* _tmp19_ = NULL;
186 		gsize _tmp20_;
187 		gchar** _tmp21_ = NULL;
188 		_tmp0_ = g_key_file_new ();
189 		_g_key_file_unref0 (self->kf);
190 		self->kf = _tmp0_;
191 		_tmp1_ = self->kf;
192 		_tmp3_ = g_key_file_get_groups (_tmp1_, &_tmp2_);
193 		{
194 			gchar** group_collection = NULL;
195 			gint group_collection_length1 = 0;
196 			gint _group_collection_size_ = 0;
197 			gint group_it = 0;
198 			group_collection = _tmp3_;
199 			group_collection_length1 = _tmp2_;
200 			for (group_it = 0; group_it < _tmp2_; group_it = group_it + 1) {
201 				gchar* _tmp4_ = NULL;
202 				gchar* group = NULL;
203 				_tmp4_ = g_strdup (group_collection[group_it]);
204 				group = _tmp4_;
205 				{
206 					gchar** _tmp5_ = NULL;
207 					GKeyFile* _tmp6_ = NULL;
208 					const gchar* _tmp7_ = NULL;
209 					gsize _tmp8_;
210 					gchar** _tmp9_ = NULL;
211 					gint _tmp5__length1 = 0;
212 					gint __tmp5__size_ = 0;
213 					gchar** _tmp10_ = NULL;
214 					gint _tmp10__length1 = 0;
215 					GKeyFile* _tmp15_ = NULL;
216 					const gchar* _tmp16_ = NULL;
217 					_tmp6_ = self->kf;
218 					_tmp7_ = group;
219 					_tmp9_ = g_key_file_get_keys (_tmp6_, _tmp7_, &_tmp8_, &_inner_error_);
220 					_tmp5_ = _tmp9_;
221 					_tmp5__length1 = _tmp8_;
222 					__tmp5__size_ = _tmp5__length1;
223 					if (G_UNLIKELY (_inner_error_ != NULL)) {
224 						_g_free0 (group);
225 						group_collection = (_vala_array_free (group_collection, group_collection_length1, (GDestroyNotify) g_free), NULL);
226 						if (_inner_error_->domain == G_KEY_FILE_ERROR) {
227 							goto __catch1_g_key_file_error;
228 						}
229 						if (_inner_error_->domain == G_FILE_ERROR) {
230 							goto __catch1_g_file_error;
231 						}
232 						_g_free0 (group);
233 						group_collection = (_vala_array_free (group_collection, group_collection_length1, (GDestroyNotify) g_free), NULL);
234 						g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
235 						g_clear_error (&_inner_error_);
236 						return;
237 					}
238 					_tmp10_ = _tmp5_;
239 					_tmp10__length1 = _tmp5__length1;
240 					_tmp5_ = NULL;
241 					_tmp5__length1 = 0;
242 					{
243 						gchar** key_collection = NULL;
244 						gint key_collection_length1 = 0;
245 						gint _key_collection_size_ = 0;
246 						gint key_it = 0;
247 						key_collection = _tmp10_;
248 						key_collection_length1 = _tmp10__length1;
249 						for (key_it = 0; key_it < _tmp10__length1; key_it = key_it + 1) {
250 							gchar* _tmp11_ = NULL;
251 							gchar* key = NULL;
252 							_tmp11_ = g_strdup (key_collection[key_it]);
253 							key = _tmp11_;
254 							{
255 								GKeyFile* _tmp12_ = NULL;
256 								const gchar* _tmp13_ = NULL;
257 								const gchar* _tmp14_ = NULL;
258 								_tmp12_ = self->kf;
259 								_tmp13_ = group;
260 								_tmp14_ = key;
261 								g_key_file_remove_key (_tmp12_, _tmp13_, _tmp14_, &_inner_error_);
262 								if (G_UNLIKELY (_inner_error_ != NULL)) {
263 									_g_free0 (key);
264 									key_collection = (_vala_array_free (key_collection, key_collection_length1, (GDestroyNotify) g_free), NULL);
265 									_tmp5_ = (_vala_array_free (_tmp5_, _tmp5__length1, (GDestroyNotify) g_free), NULL);
266 									_g_free0 (group);
267 									group_collection = (_vala_array_free (group_collection, group_collection_length1, (GDestroyNotify) g_free), NULL);
268 									if (_inner_error_->domain == G_KEY_FILE_ERROR) {
269 										goto __catch1_g_key_file_error;
270 									}
271 									if (_inner_error_->domain == G_FILE_ERROR) {
272 										goto __catch1_g_file_error;
273 									}
274 									_g_free0 (key);
275 									key_collection = (_vala_array_free (key_collection, key_collection_length1, (GDestroyNotify) g_free), NULL);
276 									_tmp5_ = (_vala_array_free (_tmp5_, _tmp5__length1, (GDestroyNotify) g_free), NULL);
277 									_g_free0 (group);
278 									group_collection = (_vala_array_free (group_collection, group_collection_length1, (GDestroyNotify) g_free), NULL);
279 									g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
280 									g_clear_error (&_inner_error_);
281 									return;
282 								}
283 								_g_free0 (key);
284 							}
285 						}
286 						key_collection = (_vala_array_free (key_collection, key_collection_length1, (GDestroyNotify) g_free), NULL);
287 					}
288 					_tmp15_ = self->kf;
289 					_tmp16_ = group;
290 					g_key_file_remove_group (_tmp15_, _tmp16_, &_inner_error_);
291 					if (G_UNLIKELY (_inner_error_ != NULL)) {
292 						_tmp5_ = (_vala_array_free (_tmp5_, _tmp5__length1, (GDestroyNotify) g_free), NULL);
293 						_g_free0 (group);
294 						group_collection = (_vala_array_free (group_collection, group_collection_length1, (GDestroyNotify) g_free), NULL);
295 						if (_inner_error_->domain == G_KEY_FILE_ERROR) {
296 							goto __catch1_g_key_file_error;
297 						}
298 						if (_inner_error_->domain == G_FILE_ERROR) {
299 							goto __catch1_g_file_error;
300 						}
301 						_tmp5_ = (_vala_array_free (_tmp5_, _tmp5__length1, (GDestroyNotify) g_free), NULL);
302 						_g_free0 (group);
303 						group_collection = (_vala_array_free (group_collection, group_collection_length1, (GDestroyNotify) g_free), NULL);
304 						g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
305 						g_clear_error (&_inner_error_);
306 						return;
307 					}
308 					_tmp5_ = (_vala_array_free (_tmp5_, _tmp5__length1, (GDestroyNotify) g_free), NULL);
309 					_g_free0 (group);
310 				}
311 			}
312 			group_collection = (_vala_array_free (group_collection, group_collection_length1, (GDestroyNotify) g_free), NULL);
313 		}
314 		_tmp17_ = self->kf;
315 		_tmp18_ = self->priv->_filename;
316 		g_key_file_load_from_file (_tmp17_, _tmp18_, G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS, &_inner_error_);
317 		if (G_UNLIKELY (_inner_error_ != NULL)) {
318 			if (_inner_error_->domain == G_KEY_FILE_ERROR) {
319 				goto __catch1_g_key_file_error;
320 			}
321 			if (_inner_error_->domain == G_FILE_ERROR) {
322 				goto __catch1_g_file_error;
323 			}
324 			g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
325 			g_clear_error (&_inner_error_);
326 			return;
327 		}
328 		__g_list_free__multi_term_shell_config_unref0_0 (self->priv->_shell_configs);
329 		self->priv->_shell_configs = NULL;
330 		_tmp19_ = self->kf;
331 		_tmp21_ = g_key_file_get_groups (_tmp19_, &_tmp20_);
332 		{
333 			gchar** section_collection = NULL;
334 			gint section_collection_length1 = 0;
335 			gint _section_collection_size_ = 0;
336 			gint section_it = 0;
337 			section_collection = _tmp21_;
338 			section_collection_length1 = _tmp20_;
339 			for (section_it = 0; section_it < _tmp20_; section_it = section_it + 1) {
340 				gchar* _tmp22_ = NULL;
341 				gchar* section = NULL;
342 				_tmp22_ = g_strdup (section_collection[section_it]);
343 				section = _tmp22_;
344 				{
345 					const gchar* _tmp23_ = NULL;
346 					gboolean _tmp24_ = FALSE;
347 					_tmp23_ = section;
348 					_tmp24_ = g_str_has_prefix (_tmp23_, "shell=");
349 					if (_tmp24_) {
350 						const gchar* _tmp25_ = NULL;
351 						MultiTermShellConfig* _tmp26_ = NULL;
352 						_tmp25_ = section;
353 						_tmp26_ = multi_term_shell_config_new (self, _tmp25_);
354 						self->priv->_shell_configs = g_list_append (self->priv->_shell_configs, _tmp26_);
355 					}
356 					_g_free0 (section);
357 				}
358 			}
359 			section_collection = (_vala_array_free (section_collection, section_collection_length1, (GDestroyNotify) g_free), NULL);
360 		}
361 	}
362 	goto __finally1;
363 	__catch1_g_key_file_error:
364 	{
365 		GError* err = NULL;
366 		const gchar* _tmp27_ = NULL;
367 		const gchar* _tmp28_ = NULL;
368 		GError* _tmp29_ = NULL;
369 		const gchar* _tmp30_ = NULL;
370 		err = _inner_error_;
371 		_inner_error_ = NULL;
372 		_tmp27_ = _ ("Unable to load config file %s: %s");
373 		_tmp28_ = self->priv->_filename;
374 		_tmp29_ = err;
375 		_tmp30_ = _tmp29_->message;
376 		g_warning (_tmp27_, _tmp28_, _tmp30_);
377 		_g_error_free0 (err);
378 	}
379 	goto __finally1;
380 	__catch1_g_file_error:
381 	{
382 		GError* err = NULL;
383 		const gchar* _tmp31_ = NULL;
384 		const gchar* _tmp32_ = NULL;
385 		GError* _tmp33_ = NULL;
386 		const gchar* _tmp34_ = NULL;
387 		err = _inner_error_;
388 		_inner_error_ = NULL;
389 		_tmp31_ = _ ("Unable to load config file %s: %s");
390 		_tmp32_ = self->priv->_filename;
391 		_tmp33_ = err;
392 		_tmp34_ = _tmp33_->message;
393 		g_warning (_tmp31_, _tmp32_, _tmp34_);
394 		_g_error_free0 (err);
395 	}
396 	__finally1:
397 	if (G_UNLIKELY (_inner_error_ != NULL)) {
398 		g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
399 		g_clear_error (&_inner_error_);
400 		return;
401 	}
402 }
403 
404 
multi_term_config_get_filename(MultiTermConfig * self)405 const gchar* multi_term_config_get_filename (MultiTermConfig* self) {
406 	const gchar* result;
407 	const gchar* _tmp0_ = NULL;
408 	g_return_val_if_fail (self != NULL, NULL);
409 	_tmp0_ = self->priv->_filename;
410 	result = _tmp0_;
411 	return result;
412 }
413 
414 
multi_term_config_get_show_tabs(MultiTermConfig * self)415 gboolean multi_term_config_get_show_tabs (MultiTermConfig* self) {
416 	gboolean result;
417 	gboolean _tmp4_ = FALSE;
418 	GError * _inner_error_ = NULL;
419 	g_return_val_if_fail (self != NULL, FALSE);
420 	{
421 		gboolean _tmp0_ = FALSE;
422 		GKeyFile* _tmp1_ = NULL;
423 		gboolean _tmp2_ = FALSE;
424 		_tmp1_ = self->kf;
425 		_tmp2_ = g_key_file_get_boolean (_tmp1_, "general", "show_tabs", &_inner_error_);
426 		_tmp0_ = _tmp2_;
427 		if (G_UNLIKELY (_inner_error_ != NULL)) {
428 			gboolean _tmp3_ = FALSE;
429 			if (_inner_error_->domain == G_KEY_FILE_ERROR) {
430 				goto __catch2_g_key_file_error;
431 			}
432 			g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
433 			g_clear_error (&_inner_error_);
434 			return _tmp3_;
435 		}
436 		result = _tmp0_;
437 		return result;
438 	}
439 	goto __finally2;
440 	__catch2_g_key_file_error:
441 	{
442 		GError* err = NULL;
443 		err = _inner_error_;
444 		_inner_error_ = NULL;
445 		result = TRUE;
446 		_g_error_free0 (err);
447 		return result;
448 	}
449 	__finally2:
450 	g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
451 	g_clear_error (&_inner_error_);
452 	return _tmp4_;
453 }
454 
455 
multi_term_config_set_show_tabs(MultiTermConfig * self,gboolean value)456 void multi_term_config_set_show_tabs (MultiTermConfig* self, gboolean value) {
457 	GKeyFile* _tmp0_ = NULL;
458 	gboolean _tmp1_ = FALSE;
459 	g_return_if_fail (self != NULL);
460 	_tmp0_ = self->kf;
461 	_tmp1_ = value;
462 	g_key_file_set_boolean (_tmp0_, "general", "show_tabs", _tmp1_);
463 	multi_term_config_store_eventually (self);
464 }
465 
466 
multi_term_config_get_external_terminal(MultiTermConfig * self)467 gchar* multi_term_config_get_external_terminal (MultiTermConfig* self) {
468 	gchar* result;
469 	GError * _inner_error_ = NULL;
470 	g_return_val_if_fail (self != NULL, NULL);
471 	{
472 		gchar* _tmp0_ = NULL;
473 		GKeyFile* _tmp1_ = NULL;
474 		gchar* _tmp2_ = NULL;
475 		gchar* _tmp3_ = NULL;
476 		_tmp1_ = self->kf;
477 		_tmp2_ = g_key_file_get_string (_tmp1_, "general", "external_terminal", &_inner_error_);
478 		_tmp0_ = _tmp2_;
479 		if (G_UNLIKELY (_inner_error_ != NULL)) {
480 			if (_inner_error_->domain == G_KEY_FILE_ERROR) {
481 				goto __catch3_g_key_file_error;
482 			}
483 			g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
484 			g_clear_error (&_inner_error_);
485 			return NULL;
486 		}
487 		_tmp3_ = _tmp0_;
488 		_tmp0_ = NULL;
489 		result = _tmp3_;
490 		_g_free0 (_tmp0_);
491 		return result;
492 	}
493 	goto __finally3;
494 	__catch3_g_key_file_error:
495 	{
496 		GError* err = NULL;
497 		gchar* _tmp4_ = NULL;
498 		err = _inner_error_;
499 		_inner_error_ = NULL;
500 		_tmp4_ = g_strdup ("xterm");
501 		result = _tmp4_;
502 		_g_error_free0 (err);
503 		return result;
504 	}
505 	__finally3:
506 	g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
507 	g_clear_error (&_inner_error_);
508 	return NULL;
509 }
510 
511 
multi_term_config_set_external_terminal(MultiTermConfig * self,const gchar * value)512 void multi_term_config_set_external_terminal (MultiTermConfig* self, const gchar* value) {
513 	GKeyFile* _tmp0_ = NULL;
514 	const gchar* _tmp1_ = NULL;
515 	g_return_if_fail (self != NULL);
516 	_tmp0_ = self->kf;
517 	_tmp1_ = value;
518 	g_key_file_set_string (_tmp0_, "general", "external_terminal", _tmp1_);
519 	multi_term_config_store_eventually (self);
520 }
521 
522 
multi_term_config_get_location(MultiTermConfig * self)523 gchar* multi_term_config_get_location (MultiTermConfig* self) {
524 	gchar* result;
525 	GError * _inner_error_ = NULL;
526 	g_return_val_if_fail (self != NULL, NULL);
527 	{
528 		gchar* _tmp0_ = NULL;
529 		GKeyFile* _tmp1_ = NULL;
530 		gchar* _tmp2_ = NULL;
531 		gchar* _tmp3_ = NULL;
532 		_tmp1_ = self->kf;
533 		_tmp2_ = g_key_file_get_string (_tmp1_, "general", "location", &_inner_error_);
534 		_tmp0_ = _tmp2_;
535 		if (G_UNLIKELY (_inner_error_ != NULL)) {
536 			if (_inner_error_->domain == G_KEY_FILE_ERROR) {
537 				goto __catch4_g_key_file_error;
538 			}
539 			g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
540 			g_clear_error (&_inner_error_);
541 			return NULL;
542 		}
543 		_tmp3_ = _tmp0_;
544 		_tmp0_ = NULL;
545 		result = _tmp3_;
546 		_g_free0 (_tmp0_);
547 		return result;
548 	}
549 	goto __finally4;
550 	__catch4_g_key_file_error:
551 	{
552 		GError* err = NULL;
553 		gchar* _tmp4_ = NULL;
554 		err = _inner_error_;
555 		_inner_error_ = NULL;
556 		_tmp4_ = g_strdup ("msgwin");
557 		result = _tmp4_;
558 		_g_error_free0 (err);
559 		return result;
560 	}
561 	__finally4:
562 	g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
563 	g_clear_error (&_inner_error_);
564 	return NULL;
565 }
566 
567 
multi_term_config_set_location(MultiTermConfig * self,const gchar * value)568 void multi_term_config_set_location (MultiTermConfig* self, const gchar* value) {
569 	GKeyFile* _tmp0_ = NULL;
570 	const gchar* _tmp1_ = NULL;
571 	g_return_if_fail (self != NULL);
572 	_tmp0_ = self->kf;
573 	_tmp1_ = value;
574 	g_key_file_set_string (_tmp0_, "general", "location", _tmp1_);
575 	multi_term_config_store_eventually (self);
576 }
577 
578 
multi_term_config_get_shell_configs(MultiTermConfig * self)579 GList* multi_term_config_get_shell_configs (MultiTermConfig* self) {
580 	GList* result;
581 	GList* _tmp0_ = NULL;
582 	g_return_val_if_fail (self != NULL, NULL);
583 	_tmp0_ = self->priv->_shell_configs;
584 	result = _tmp0_;
585 	return result;
586 }
587 
588 
multi_term_value_config_init(GValue * value)589 static void multi_term_value_config_init (GValue* value) {
590 	value->data[0].v_pointer = NULL;
591 }
592 
593 
multi_term_value_config_free_value(GValue * value)594 static void multi_term_value_config_free_value (GValue* value) {
595 	if (value->data[0].v_pointer) {
596 		multi_term_config_unref (value->data[0].v_pointer);
597 	}
598 }
599 
600 
multi_term_value_config_copy_value(const GValue * src_value,GValue * dest_value)601 static void multi_term_value_config_copy_value (const GValue* src_value, GValue* dest_value) {
602 	if (src_value->data[0].v_pointer) {
603 		dest_value->data[0].v_pointer = multi_term_config_ref (src_value->data[0].v_pointer);
604 	} else {
605 		dest_value->data[0].v_pointer = NULL;
606 	}
607 }
608 
609 
multi_term_value_config_peek_pointer(const GValue * value)610 static gpointer multi_term_value_config_peek_pointer (const GValue* value) {
611 	return value->data[0].v_pointer;
612 }
613 
614 
multi_term_value_config_collect_value(GValue * value,guint n_collect_values,GTypeCValue * collect_values,guint collect_flags)615 static gchar* multi_term_value_config_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
616 	if (collect_values[0].v_pointer) {
617 		MultiTermConfig* object;
618 		object = collect_values[0].v_pointer;
619 		if (object->parent_instance.g_class == NULL) {
620 			return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
621 		} else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
622 			return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
623 		}
624 		value->data[0].v_pointer = multi_term_config_ref (object);
625 	} else {
626 		value->data[0].v_pointer = NULL;
627 	}
628 	return NULL;
629 }
630 
631 
multi_term_value_config_lcopy_value(const GValue * value,guint n_collect_values,GTypeCValue * collect_values,guint collect_flags)632 static gchar* multi_term_value_config_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
633 	MultiTermConfig** object_p;
634 	object_p = collect_values[0].v_pointer;
635 	if (!object_p) {
636 		return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
637 	}
638 	if (!value->data[0].v_pointer) {
639 		*object_p = NULL;
640 	} else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
641 		*object_p = value->data[0].v_pointer;
642 	} else {
643 		*object_p = multi_term_config_ref (value->data[0].v_pointer);
644 	}
645 	return NULL;
646 }
647 
648 
multi_term_param_spec_config(const gchar * name,const gchar * nick,const gchar * blurb,GType object_type,GParamFlags flags)649 GParamSpec* multi_term_param_spec_config (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
650 	MultiTermParamSpecConfig* spec;
651 	g_return_val_if_fail (g_type_is_a (object_type, MULTI_TERM_TYPE_CONFIG), NULL);
652 	spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
653 	G_PARAM_SPEC (spec)->value_type = object_type;
654 	return G_PARAM_SPEC (spec);
655 }
656 
657 
multi_term_value_get_config(const GValue * value)658 gpointer multi_term_value_get_config (const GValue* value) {
659 	g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, MULTI_TERM_TYPE_CONFIG), NULL);
660 	return value->data[0].v_pointer;
661 }
662 
663 
multi_term_value_set_config(GValue * value,gpointer v_object)664 void multi_term_value_set_config (GValue* value, gpointer v_object) {
665 	MultiTermConfig* old;
666 	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, MULTI_TERM_TYPE_CONFIG));
667 	old = value->data[0].v_pointer;
668 	if (v_object) {
669 		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, MULTI_TERM_TYPE_CONFIG));
670 		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
671 		value->data[0].v_pointer = v_object;
672 		multi_term_config_ref (value->data[0].v_pointer);
673 	} else {
674 		value->data[0].v_pointer = NULL;
675 	}
676 	if (old) {
677 		multi_term_config_unref (old);
678 	}
679 }
680 
681 
multi_term_value_take_config(GValue * value,gpointer v_object)682 void multi_term_value_take_config (GValue* value, gpointer v_object) {
683 	MultiTermConfig* old;
684 	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, MULTI_TERM_TYPE_CONFIG));
685 	old = value->data[0].v_pointer;
686 	if (v_object) {
687 		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, MULTI_TERM_TYPE_CONFIG));
688 		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
689 		value->data[0].v_pointer = v_object;
690 	} else {
691 		value->data[0].v_pointer = NULL;
692 	}
693 	if (old) {
694 		multi_term_config_unref (old);
695 	}
696 }
697 
698 
multi_term_config_class_init(MultiTermConfigClass * klass)699 static void multi_term_config_class_init (MultiTermConfigClass * klass) {
700 	multi_term_config_parent_class = g_type_class_peek_parent (klass);
701 	((MultiTermConfigClass *) klass)->finalize = multi_term_config_finalize;
702 	g_type_class_add_private (klass, sizeof (MultiTermConfigPrivate));
703 }
704 
705 
multi_term_config_instance_init(MultiTermConfig * self)706 static void multi_term_config_instance_init (MultiTermConfig * self) {
707 	self->priv = MULTI_TERM_CONFIG_GET_PRIVATE (self);
708 	self->priv->_shell_configs = NULL;
709 	self->ref_count = 1;
710 }
711 
712 
multi_term_config_finalize(MultiTermConfig * obj)713 static void multi_term_config_finalize (MultiTermConfig* obj) {
714 	MultiTermConfig * self;
715 	self = G_TYPE_CHECK_INSTANCE_CAST (obj, MULTI_TERM_TYPE_CONFIG, MultiTermConfig);
716 	g_signal_handlers_destroy (self);
717 	_g_key_file_unref0 (self->kf);
718 	_g_free0 (self->priv->_filename);
719 	__g_list_free__multi_term_shell_config_unref0_0 (self->priv->_shell_configs);
720 }
721 
722 
multi_term_config_get_type(void)723 GType multi_term_config_get_type (void) {
724 	static volatile gsize multi_term_config_type_id__volatile = 0;
725 	if (g_once_init_enter (&multi_term_config_type_id__volatile)) {
726 		static const GTypeValueTable g_define_type_value_table = { multi_term_value_config_init, multi_term_value_config_free_value, multi_term_value_config_copy_value, multi_term_value_config_peek_pointer, "p", multi_term_value_config_collect_value, "p", multi_term_value_config_lcopy_value };
727 		static const GTypeInfo g_define_type_info = { sizeof (MultiTermConfigClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) multi_term_config_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (MultiTermConfig), 0, (GInstanceInitFunc) multi_term_config_instance_init, &g_define_type_value_table };
728 		static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
729 		GType multi_term_config_type_id;
730 		multi_term_config_type_id = g_type_register_fundamental (g_type_fundamental_next (), "MultiTermConfig", &g_define_type_info, &g_define_type_fundamental_info, 0);
731 		g_once_init_leave (&multi_term_config_type_id__volatile, multi_term_config_type_id);
732 	}
733 	return multi_term_config_type_id__volatile;
734 }
735 
736 
multi_term_config_ref(gpointer instance)737 gpointer multi_term_config_ref (gpointer instance) {
738 	MultiTermConfig* self;
739 	self = instance;
740 	g_atomic_int_inc (&self->ref_count);
741 	return instance;
742 }
743 
744 
multi_term_config_unref(gpointer instance)745 void multi_term_config_unref (gpointer instance) {
746 	MultiTermConfig* self;
747 	self = instance;
748 	if (g_atomic_int_dec_and_test (&self->ref_count)) {
749 		MULTI_TERM_CONFIG_GET_CLASS (self)->finalize (self);
750 		g_type_free_instance ((GTypeInstance *) self);
751 	}
752 }
753 
754 
_vala_array_destroy(gpointer array,gint array_length,GDestroyNotify destroy_func)755 static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
756 	if ((array != NULL) && (destroy_func != NULL)) {
757 		int i;
758 		for (i = 0; i < array_length; i = i + 1) {
759 			if (((gpointer*) array)[i] != NULL) {
760 				destroy_func (((gpointer*) array)[i]);
761 			}
762 		}
763 	}
764 }
765 
766 
_vala_array_free(gpointer array,gint array_length,GDestroyNotify destroy_func)767 static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
768 	_vala_array_destroy (array, array_length, destroy_func);
769 	g_free (array);
770 }
771 
772 
773 
774