glib2 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. data/ChangeLog +3023 -0
  2. data/README +28 -0
  3. data/Rakefile +87 -0
  4. data/extconf.rb +61 -0
  5. data/sample/bookmarkfile.rb +66 -0
  6. data/sample/completion.rb +45 -0
  7. data/sample/idle.rb +41 -0
  8. data/sample/iochannel.rb +44 -0
  9. data/sample/keyfile.rb +62 -0
  10. data/sample/shell.rb +36 -0
  11. data/sample/spawn.rb +25 -0
  12. data/sample/timeout.rb +28 -0
  13. data/sample/timeout2.rb +35 -0
  14. data/sample/timer.rb +40 -0
  15. data/sample/type-register.rb +103 -0
  16. data/sample/type-register2.rb +104 -0
  17. data/sample/utils.rb +54 -0
  18. data/src/glib-enum-types.c +1032 -0
  19. data/src/glib-enum-types.h +140 -0
  20. data/src/lib/glib-mkenums.rb +199 -0
  21. data/src/lib/glib2.rb +220 -0
  22. data/src/lib/mkmf-gnome2.rb +390 -0
  23. data/src/lib/pkg-config.rb +137 -0
  24. data/src/rbgcompat.h +30 -0
  25. data/src/rbglib.c +320 -0
  26. data/src/rbglib.h +96 -0
  27. data/src/rbglib_bookmarkfile.c +595 -0
  28. data/src/rbglib_completion.c +192 -0
  29. data/src/rbglib_convert.c +195 -0
  30. data/src/rbglib_error.c +95 -0
  31. data/src/rbglib_fileutils.c +83 -0
  32. data/src/rbglib_i18n.c +44 -0
  33. data/src/rbglib_int64.c +157 -0
  34. data/src/rbglib_iochannel.c +883 -0
  35. data/src/rbglib_keyfile.c +846 -0
  36. data/src/rbglib_maincontext.c +917 -0
  37. data/src/rbglib_mainloop.c +87 -0
  38. data/src/rbglib_messages.c +150 -0
  39. data/src/rbglib_pollfd.c +111 -0
  40. data/src/rbglib_shell.c +68 -0
  41. data/src/rbglib_source.c +190 -0
  42. data/src/rbglib_spawn.c +345 -0
  43. data/src/rbglib_threads.c +51 -0
  44. data/src/rbglib_timer.c +127 -0
  45. data/src/rbglib_unicode.c +611 -0
  46. data/src/rbglib_utils.c +386 -0
  47. data/src/rbglib_win32.c +136 -0
  48. data/src/rbgobj_boxed.c +251 -0
  49. data/src/rbgobj_closure.c +337 -0
  50. data/src/rbgobj_convert.c +167 -0
  51. data/src/rbgobj_enums.c +961 -0
  52. data/src/rbgobj_fundamental.c +30 -0
  53. data/src/rbgobj_object.c +892 -0
  54. data/src/rbgobj_param.c +390 -0
  55. data/src/rbgobj_paramspecs.c +305 -0
  56. data/src/rbgobj_signal.c +963 -0
  57. data/src/rbgobj_strv.c +61 -0
  58. data/src/rbgobj_type.c +851 -0
  59. data/src/rbgobj_typeinstance.c +121 -0
  60. data/src/rbgobj_typeinterface.c +148 -0
  61. data/src/rbgobj_typemodule.c +66 -0
  62. data/src/rbgobj_typeplugin.c +49 -0
  63. data/src/rbgobj_value.c +313 -0
  64. data/src/rbgobj_valuearray.c +59 -0
  65. data/src/rbgobj_valuetypes.c +298 -0
  66. data/src/rbgobject.c +406 -0
  67. data/src/rbgobject.h +265 -0
  68. data/src/rbgprivate.h +88 -0
  69. data/src/rbgutil.c +222 -0
  70. data/src/rbgutil.h +82 -0
  71. data/src/rbgutil_callback.c +231 -0
  72. data/test/glib-test-init.rb +6 -0
  73. data/test/glib-test-utils.rb +12 -0
  74. data/test/run-test.rb +25 -0
  75. data/test/test_enum.rb +99 -0
  76. data/test/test_file_utils.rb +15 -0
  77. data/test/test_glib2.rb +120 -0
  78. data/test/test_iochannel.rb +275 -0
  79. data/test/test_key_file.rb +38 -0
  80. data/test/test_mkenums.rb +25 -0
  81. data/test/test_signal.rb +20 -0
  82. data/test/test_timeout.rb +28 -0
  83. data/test/test_unicode.rb +369 -0
  84. data/test/test_utils.rb +37 -0
  85. data/test/test_win32.rb +13 -0
  86. metadata +165 -0
@@ -0,0 +1,846 @@
1
+ /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
+ /************************************************
3
+
4
+ rbglib_keyfile.c -
5
+
6
+ $Author: sakai $
7
+ $Date: 2007/06/16 02:46:28 $
8
+
9
+ Copyright (C) 2006 Masao Mutoh
10
+ ************************************************/
11
+
12
+ #include "rbgprivate.h"
13
+
14
+ #if GLIB_CHECK_VERSION(2,6,0)
15
+ /************************************************/
16
+ static GKeyFile*
17
+ keyfile_copy(const GKeyFile* keyfile)
18
+ {
19
+ // GKeyFile* new_keyfile;
20
+ g_return_val_if_fail (keyfile != NULL, NULL);
21
+ /*
22
+ new_keyfile = g_key_file_new();
23
+ *new_keyfile = (GKeyFile*)*keyfile;
24
+ return new_keyfile;
25
+ */
26
+ return (GKeyFile*)keyfile;
27
+ }
28
+
29
+
30
+ GType
31
+ g_key_file_get_type(void)
32
+ {
33
+ static GType our_type = 0;
34
+ if (our_type == 0)
35
+ our_type = g_boxed_type_register_static("GKeyFile",
36
+ (GBoxedCopyFunc)keyfile_copy,
37
+ (GBoxedFreeFunc)g_key_file_free);
38
+ return our_type;
39
+ }
40
+ /************************************************/
41
+
42
+ #define _SELF(self) ((GKeyFile*)(RVAL2BOXED(self, G_TYPE_KEY_FILE)))
43
+
44
+ static VALUE
45
+ keyfile_initialize(self)
46
+ VALUE self;
47
+ {
48
+ G_INITIALIZE(self, g_key_file_new());
49
+ return Qnil;
50
+ }
51
+
52
+ static VALUE
53
+ keyfile_set_list_separator(self, sep)
54
+ VALUE self, sep;
55
+ {
56
+ g_key_file_set_list_separator(_SELF(self), NUM2INT(sep));
57
+ return self;
58
+ }
59
+
60
+ static VALUE
61
+ keyfile_load_from_file(argc, argv, self)
62
+ int argc;
63
+ VALUE *argv;
64
+ VALUE self;
65
+ {
66
+ VALUE file, flags;
67
+ GError* error = NULL;
68
+ gboolean ret;
69
+ GKeyFileFlags gflags = G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS;
70
+
71
+ rb_scan_args(argc, argv, "11", &file, &flags);
72
+
73
+ if (!NIL_P(flags)){
74
+ gflags = RVAL2GFLAGS(flags, G_TYPE_KEY_FILE_FLAGS);
75
+ }
76
+
77
+ ret = g_key_file_load_from_file(_SELF(self),
78
+ (const gchar*)RVAL2CSTR(file),
79
+ gflags, &error);
80
+
81
+ if (! ret) RAISE_GERROR(error);
82
+
83
+ return self;
84
+ }
85
+
86
+ static VALUE
87
+ keyfile_load_from_data(argc, argv, self)
88
+ int argc;
89
+ VALUE *argv;
90
+ VALUE self;
91
+ {
92
+ VALUE data, flags;
93
+ GError* error = NULL;
94
+ gboolean ret;
95
+ GKeyFileFlags gflags = G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS;
96
+
97
+ rb_scan_args(argc, argv, "11", &data, &flags);
98
+
99
+ if (!NIL_P(flags)){
100
+ gflags = RVAL2GFLAGS(flags, G_TYPE_KEY_FILE_FLAGS);
101
+ }
102
+ StringValue(data);
103
+
104
+ ret = g_key_file_load_from_data(_SELF(self),
105
+ (const gchar*)RVAL2CSTR(data),
106
+ (gsize)RSTRING_LEN(data),
107
+ gflags, &error);
108
+
109
+ if (! ret) RAISE_GERROR(error);
110
+
111
+ return self;
112
+ }
113
+
114
+ static VALUE
115
+ keyfile_load_from_data_dirs(argc, argv, self)
116
+ int argc;
117
+ VALUE *argv;
118
+ VALUE self;
119
+ {
120
+ VALUE file, flags;
121
+ GError* error = NULL;
122
+ gboolean ret;
123
+ gchar* full_path;
124
+ GKeyFileFlags gflags = G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS;
125
+
126
+ rb_scan_args(argc, argv, "11", &file, &flags);
127
+
128
+ if (!NIL_P(flags)){
129
+ gflags = RVAL2GFLAGS(flags, G_TYPE_KEY_FILE_FLAGS);
130
+ }
131
+ StringValue(file);
132
+
133
+ ret = g_key_file_load_from_data_dirs(_SELF(self),
134
+ (const gchar*)RVAL2CSTR(file),
135
+ &full_path,
136
+ gflags, &error);
137
+
138
+ if (! ret) RAISE_GERROR(error);
139
+
140
+ return full_path ? CSTR2RVAL(full_path) : Qnil;
141
+ }
142
+
143
+ #if GLIB_CHECK_VERSION(2, 14, 0)
144
+ static VALUE
145
+ keyfile_load_from_dirs(int argc, VALUE *argv, VALUE self)
146
+ {
147
+ VALUE rb_file, rb_search_dirs, rb_flags;
148
+ GError* error = NULL;
149
+ gboolean success;
150
+ const gchar *file;
151
+ gchar **search_dirs;
152
+ gchar* full_path;
153
+ GKeyFileFlags flags;
154
+
155
+ rb_scan_args(argc, argv, "12", &rb_file, &rb_search_dirs, &rb_flags);
156
+
157
+ file = RVAL2CSTR(rb_file);
158
+ if (NIL_P(rb_search_dirs)) {
159
+ search_dirs = NULL;
160
+ }
161
+ else {
162
+ long i, len;
163
+
164
+ Check_Type(rb_search_dirs, T_ARRAY);
165
+ len = RARRAY_LEN(rb_search_dirs);
166
+ search_dirs = ALLOCA_N(gchar *, len + 1);
167
+ for (i = 0; i < len; i++) {
168
+ search_dirs[i] = RVAL2CSTR(RARRAY_PTR(rb_search_dirs)[i]);
169
+ }
170
+ search_dirs[i] = NULL;
171
+ }
172
+ flags = G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS;
173
+ if (!NIL_P(rb_flags))
174
+ flags = RVAL2GFLAGS(rb_flags, G_TYPE_KEY_FILE_FLAGS);
175
+
176
+ if (search_dirs)
177
+ success = g_key_file_load_from_dirs(_SELF(self), file,
178
+ (const gchar **)search_dirs,
179
+ &full_path, flags, &error);
180
+ else
181
+ success = g_key_file_load_from_data_dirs(_SELF(self), file,
182
+ &full_path, flags, &error);
183
+
184
+ if (!success)
185
+ RAISE_GERROR(error);
186
+
187
+ return CSTR2RVAL(full_path);
188
+ }
189
+ #endif
190
+
191
+ static VALUE
192
+ keyfile_to_data(self)
193
+ VALUE self;
194
+ {
195
+ gsize length;
196
+ GError* error = NULL;
197
+ gchar* data = g_key_file_to_data(_SELF(self), &length, &error);
198
+
199
+ if (error) RAISE_GERROR(error);
200
+
201
+ return rb_str_new(data, length);
202
+ }
203
+
204
+ static VALUE
205
+ keyfile_get_start_group(self)
206
+ VALUE self;
207
+ {
208
+ return CSTR2RVAL(g_key_file_get_start_group(_SELF(self)));
209
+ }
210
+
211
+ static VALUE
212
+ keyfile_get_groups(self)
213
+ VALUE self;
214
+ {
215
+ gsize length;
216
+ int i;
217
+ gchar** groups = g_key_file_get_groups(_SELF(self), &length);
218
+ VALUE ary = rb_ary_new();
219
+
220
+ for (i = 0; i < length; i++){
221
+ rb_ary_push(ary, CSTR2RVAL(groups[i]));
222
+ }
223
+
224
+ g_strfreev(groups);
225
+
226
+ return ary;
227
+ }
228
+
229
+ static VALUE
230
+ keyfile_get_keys(self, group_name)
231
+ VALUE self, group_name;
232
+ {
233
+ gsize length;
234
+ int i;
235
+ GError* error = NULL;
236
+ gchar** keys = g_key_file_get_keys(_SELF(self),
237
+ (const gchar*)RVAL2CSTR(group_name),
238
+ &length, &error);
239
+ VALUE ary = rb_ary_new();
240
+
241
+ if (error) RAISE_GERROR(error);
242
+
243
+ for (i = 0; i < length; i++){
244
+ rb_ary_push(ary, CSTR2RVAL(keys[i]));
245
+ }
246
+
247
+ g_strfreev(keys);
248
+
249
+ return ary;
250
+ }
251
+
252
+ static VALUE
253
+ keyfile_has_group(self, group_name)
254
+ VALUE self, group_name;
255
+ {
256
+ return CBOOL2RVAL(g_key_file_has_group(_SELF(self),
257
+ (const gchar*)RVAL2CSTR(group_name)));
258
+ }
259
+
260
+ static VALUE
261
+ keyfile_has_key(self, group_name, key)
262
+ VALUE self, group_name, key;
263
+ {
264
+ GError* error = NULL;
265
+ gboolean ret = g_key_file_has_key(_SELF(self),
266
+ (const gchar*)RVAL2CSTR(group_name),
267
+ (const gchar*)RVAL2CSTR(key),
268
+ &error);
269
+
270
+ if (error) RAISE_GERROR(error);
271
+
272
+ return CBOOL2RVAL(ret);
273
+ }
274
+
275
+ static VALUE
276
+ keyfile_get_value(self, group_name, key)
277
+ VALUE self, group_name, key;
278
+ {
279
+ GError* error = NULL;
280
+ gchar* ret = g_key_file_get_value(_SELF(self),
281
+ (const gchar*)RVAL2CSTR(group_name),
282
+ (const gchar*)RVAL2CSTR(key),
283
+ &error);
284
+
285
+ if (error) RAISE_GERROR(error);
286
+
287
+ return ret ? CSTR2RVAL2(ret) : Qnil;
288
+ }
289
+
290
+ static VALUE
291
+ keyfile_get_string(self, group_name, key)
292
+ VALUE self, group_name, key;
293
+ {
294
+ GError* error = NULL;
295
+ gchar* ret = g_key_file_get_string(_SELF(self),
296
+ (const gchar*)RVAL2CSTR(group_name),
297
+ (const gchar*)RVAL2CSTR(key),
298
+ &error);
299
+
300
+ if (error) RAISE_GERROR(error);
301
+
302
+ return ret ? CSTR2RVAL2(ret) : Qnil;
303
+ }
304
+
305
+ static VALUE
306
+ keyfile_get_locale_string(argc, argv, self)
307
+ int argc;
308
+ VALUE *argv;
309
+ VALUE self;
310
+ {
311
+ VALUE group_name, key, locale;
312
+ GError* error = NULL;
313
+ gchar* ret;
314
+
315
+ rb_scan_args(argc, argv, "21", &group_name, &key, &locale);
316
+
317
+ ret = g_key_file_get_locale_string(_SELF(self),
318
+ (const gchar*)RVAL2CSTR(group_name),
319
+ (const gchar*)RVAL2CSTR(key),
320
+ (const gchar*)(NIL_P(locale) ? NULL : RVAL2CSTR(locale)),
321
+ &error);
322
+
323
+ if (error) RAISE_GERROR(error);
324
+
325
+ return ret ? CSTR2RVAL2(ret) : Qnil;
326
+ }
327
+
328
+ static VALUE
329
+ keyfile_get_boolean(self, group_name, key)
330
+ VALUE self, group_name, key;
331
+ {
332
+ GError* error = NULL;
333
+ gboolean ret = g_key_file_get_boolean(_SELF(self),
334
+ (const gchar*)RVAL2CSTR(group_name),
335
+ (const gchar*)RVAL2CSTR(key),
336
+ &error);
337
+
338
+ if (error) RAISE_GERROR(error);
339
+
340
+ return CBOOL2RVAL(ret);
341
+ }
342
+
343
+ static VALUE
344
+ keyfile_get_integer(self, group_name, key)
345
+ VALUE self, group_name, key;
346
+ {
347
+ GError* error = NULL;
348
+ gint ret = g_key_file_get_integer(_SELF(self),
349
+ (const gchar*)RVAL2CSTR(group_name),
350
+ (const gchar*)RVAL2CSTR(key),
351
+ &error);
352
+
353
+ if (error) RAISE_GERROR(error);
354
+
355
+ return INT2NUM(ret);
356
+ }
357
+
358
+ #if GLIB_CHECK_VERSION(2,12,0)
359
+ static VALUE
360
+ keyfile_get_double(self, group_name, key)
361
+ VALUE self, group_name, key;
362
+ {
363
+ GError* error = NULL;
364
+ gdouble ret = g_key_file_get_double(_SELF(self),
365
+ (const gchar*)RVAL2CSTR(group_name),
366
+ (const gchar*)RVAL2CSTR(key),
367
+ &error);
368
+
369
+ if (error) RAISE_GERROR(error);
370
+
371
+ return rb_float_new(ret);
372
+ }
373
+ #endif
374
+
375
+ static VALUE
376
+ keyfile_get_string_list(self, group_name, key)
377
+ VALUE self, group_name, key;
378
+ {
379
+ VALUE ary;
380
+ gint i;
381
+ gsize length;
382
+ GError* error = NULL;
383
+ gchar** ret = g_key_file_get_string_list(_SELF(self),
384
+ (const gchar*)RVAL2CSTR(group_name),
385
+ (const gchar*)RVAL2CSTR(key),
386
+ &length, &error);
387
+
388
+ if (error) RAISE_GERROR(error);
389
+
390
+ ary = rb_ary_new();
391
+ for(i = 0; i < length; i++){
392
+ rb_ary_push(ary, CSTR2RVAL(ret[i]));
393
+ }
394
+
395
+ g_strfreev(ret);
396
+ return ary;
397
+ }
398
+
399
+ static VALUE
400
+ keyfile_get_locale_string_list(argc, argv, self)
401
+ int argc;
402
+ VALUE *argv;
403
+ VALUE self;
404
+ {
405
+ VALUE group_name, key, locale;
406
+ GError* error = NULL;
407
+ VALUE ary;
408
+ gint i;
409
+ gsize length;
410
+ gchar** ret;
411
+
412
+ rb_scan_args(argc, argv, "21", &group_name, &key, &locale);
413
+
414
+ ret = g_key_file_get_locale_string_list(_SELF(self),
415
+ (const gchar*)RVAL2CSTR(group_name),
416
+ (const gchar*)RVAL2CSTR(key),
417
+ (const gchar*)(NIL_P(locale) ? NULL : RVAL2CSTR(locale)),
418
+ &length, &error);
419
+
420
+ if (error) RAISE_GERROR(error);
421
+
422
+ ary = rb_ary_new();
423
+ for(i = 0; i < length; i++){
424
+ rb_ary_push(ary, CSTR2RVAL(ret[i]));
425
+ }
426
+
427
+ g_strfreev(ret);
428
+ return ary;
429
+ }
430
+
431
+ static VALUE
432
+ keyfile_get_boolean_list(self, group_name, key)
433
+ VALUE self, group_name, key;
434
+ {
435
+ VALUE ary;
436
+ gint i;
437
+ gsize length;
438
+ GError* error = NULL;
439
+ gboolean* ret = g_key_file_get_boolean_list(_SELF(self),
440
+ (const gchar*)RVAL2CSTR(group_name),
441
+ (const gchar*)RVAL2CSTR(key),
442
+ &length, &error);
443
+
444
+ if (error) RAISE_GERROR(error);
445
+
446
+ ary = rb_ary_new();
447
+ for(i = 0; i < length; i++){
448
+ rb_ary_push(ary, CBOOL2RVAL(ret[i]));
449
+ }
450
+ return ary;
451
+ }
452
+
453
+ static VALUE
454
+ keyfile_get_integer_list(self, group_name, key)
455
+ VALUE self, group_name, key;
456
+ {
457
+ VALUE ary;
458
+ gint i;
459
+ gsize length;
460
+ GError* error = NULL;
461
+ gint* ret = g_key_file_get_integer_list(_SELF(self),
462
+ (const gchar*)RVAL2CSTR(group_name),
463
+ (const gchar*)RVAL2CSTR(key),
464
+ &length, &error);
465
+
466
+ if (error) RAISE_GERROR(error);
467
+
468
+ ary = rb_ary_new();
469
+ for(i = 0; i < length; i++){
470
+ rb_ary_push(ary, INT2NUM(ret[i]));
471
+ }
472
+ return ary;
473
+ }
474
+
475
+ #if GLIB_CHECK_VERSION(2,12,0)
476
+ static VALUE
477
+ keyfile_get_double_list(self, group_name, key)
478
+ VALUE self, group_name, key;
479
+ {
480
+ VALUE ary;
481
+ gint i;
482
+ gsize length;
483
+ GError* error = NULL;
484
+ gdouble* ret = g_key_file_get_double_list(_SELF(self),
485
+ (const gchar*)RVAL2CSTR(group_name),
486
+ (const gchar*)RVAL2CSTR(key),
487
+ &length, &error);
488
+
489
+ if (error) RAISE_GERROR(error);
490
+
491
+ ary = rb_ary_new();
492
+ for(i = 0; i < length; i++){
493
+ rb_ary_push(ary, rb_float_new(ret[i]));
494
+ }
495
+ return ary;
496
+ }
497
+ #endif
498
+
499
+ static VALUE
500
+ keyfile_get_comment(self, group_name, key)
501
+ VALUE self, group_name, key;
502
+ {
503
+ GError* error = NULL;
504
+ gchar* ret = g_key_file_get_comment(_SELF(self),
505
+ (const gchar*)RVAL2CSTR(group_name),
506
+ (const gchar*)RVAL2CSTR(key),
507
+ &error);
508
+
509
+ if (error) RAISE_GERROR(error);
510
+
511
+ return CSTR2RVAL2(ret);
512
+ }
513
+
514
+ static VALUE
515
+ keyfile_set_value(self, group_name, key, value)
516
+ VALUE self, group_name, key, value;
517
+ {
518
+ g_key_file_set_value(_SELF(self), (const gchar*)RVAL2CSTR(group_name),
519
+ (const gchar*)RVAL2CSTR(key),
520
+ (const gchar*)RVAL2CSTR(value));
521
+ return self;
522
+ }
523
+
524
+ static VALUE
525
+ keyfile_set_string(self, group_name, key, string)
526
+ VALUE self, group_name, key, string;
527
+ {
528
+ g_key_file_set_string(_SELF(self), (const gchar*)RVAL2CSTR(group_name),
529
+ (const gchar*)RVAL2CSTR(key),
530
+ (const gchar*)RVAL2CSTR(string));
531
+ return self;
532
+ }
533
+
534
+ static VALUE
535
+ keyfile_set_locale_string(self, group_name, key, locale, locale_string)
536
+ VALUE self, group_name, key, locale, locale_string;
537
+ {
538
+ g_key_file_set_locale_string(_SELF(self), (const gchar*)RVAL2CSTR(group_name),
539
+ (const gchar*)RVAL2CSTR(key),
540
+ (const gchar*)RVAL2CSTR(locale),
541
+ (const gchar*)RVAL2CSTR(locale_string));
542
+ return self;
543
+ }
544
+
545
+ static VALUE
546
+ keyfile_set_boolean(self, group_name, key, value)
547
+ VALUE self, group_name, key, value;
548
+ {
549
+ g_key_file_set_boolean(_SELF(self), (const gchar*)RVAL2CSTR(group_name),
550
+ (const gchar*)RVAL2CSTR(key),
551
+ RVAL2CBOOL(value));
552
+ return self;
553
+ }
554
+
555
+ static VALUE
556
+ keyfile_set_integer(self, group_name, key, value)
557
+ VALUE self, group_name, key, value;
558
+ {
559
+ g_key_file_set_integer(_SELF(self), (const gchar*)RVAL2CSTR(group_name),
560
+ (const gchar*)RVAL2CSTR(key),
561
+ NUM2INT(value));
562
+ return self;
563
+ }
564
+
565
+ #if GLIB_CHECK_VERSION(2,12,0)
566
+ static VALUE
567
+ keyfile_set_double(self, group_name, key, value)
568
+ VALUE self, group_name, key, value;
569
+ {
570
+ g_key_file_set_double(_SELF(self), (const gchar*)RVAL2CSTR(group_name),
571
+ (const gchar*)RVAL2CSTR(key),
572
+ NUM2DBL(value));
573
+ return self;
574
+ }
575
+ #endif
576
+
577
+ static VALUE
578
+ keyfile_set_string_list(self, group_name, key, list)
579
+ VALUE self, group_name, key, list;
580
+ {
581
+ gint len = RARRAY_LEN(list);
582
+ gchar** glist = ALLOCA_N(gchar*, len);
583
+ gint i;
584
+
585
+ for (i = 0; i < len; i++){
586
+ glist[i] = RVAL2CSTR(RARRAY_PTR(list)[i]);
587
+ }
588
+
589
+ g_key_file_set_string_list(_SELF(self),
590
+ (const gchar*)RVAL2CSTR(group_name),
591
+ (const gchar*)RVAL2CSTR(key),
592
+ (const gchar**)glist, len);
593
+ return self;
594
+ }
595
+
596
+ static VALUE
597
+ keyfile_set_locale_string_list(self, group_name, key, locale, list)
598
+ VALUE self, group_name, key, locale, list;
599
+ {
600
+ gint len = RARRAY_LEN(list);
601
+ gchar** glist = ALLOCA_N(gchar*, len);
602
+ gint i;
603
+
604
+ for (i = 0; i < len; i++){
605
+ glist[i] = RVAL2CSTR(RARRAY_PTR(list)[i]);
606
+ }
607
+
608
+ g_key_file_set_locale_string_list(_SELF(self), (const gchar*)RVAL2CSTR(group_name),
609
+ (const gchar*)RVAL2CSTR(key),
610
+ (const gchar*)RVAL2CSTR(locale),
611
+ (const gchar**)glist, len);
612
+
613
+ return self;
614
+ }
615
+
616
+ static VALUE
617
+ keyfile_set_boolean_list(self, group_name, key, list)
618
+ VALUE self, group_name, key, list;
619
+ {
620
+ gint len = RARRAY_LEN(list);
621
+ gboolean* glist = ALLOCA_N(gboolean, len);
622
+ gint i;
623
+
624
+ for (i = 0; i < len; i++){
625
+ glist[i] = RVAL2CBOOL(RARRAY_PTR(list)[i]);
626
+ }
627
+
628
+ g_key_file_set_boolean_list(_SELF(self),
629
+ (const gchar*)RVAL2CSTR(group_name),
630
+ (const gchar*)RVAL2CSTR(key),
631
+ glist, len);
632
+ return self;
633
+ }
634
+
635
+ static VALUE
636
+ keyfile_set_integer_list(self, group_name, key, list)
637
+ VALUE self, group_name, key, list;
638
+ {
639
+ gint len = RARRAY_LEN(list);
640
+ gint* glist = ALLOCA_N(gint, len);
641
+ gint i;
642
+
643
+ for (i = 0; i < len; i++){
644
+ glist[i] = RVAL2CBOOL(RARRAY_PTR(list)[i]);
645
+ }
646
+
647
+ g_key_file_set_integer_list(_SELF(self),
648
+ (const gchar*)RVAL2CSTR(group_name),
649
+ (const gchar*)RVAL2CSTR(key),
650
+ glist, len);
651
+ return self;
652
+ }
653
+
654
+ #if GLIB_CHECK_VERSION(2,12,0)
655
+ static VALUE
656
+ keyfile_set_double_list(self, group_name, key, list)
657
+ VALUE self, group_name, key, list;
658
+ {
659
+ gint len = RARRAY_LEN(list);
660
+ gdouble* glist = ALLOCA_N(gdouble, len);
661
+ gint i;
662
+
663
+ for (i = 0; i < len; i++){
664
+ glist[i] = RVAL2CBOOL(RARRAY_PTR(list)[i]);
665
+ }
666
+
667
+ g_key_file_set_double_list(_SELF(self),
668
+ (const gchar*)RVAL2CSTR(group_name),
669
+ (const gchar*)RVAL2CSTR(key),
670
+ glist, len);
671
+ return self;
672
+ }
673
+ #endif
674
+
675
+ static VALUE
676
+ keyfile_set_comment(self, group_name, key, comment)
677
+ VALUE self, group_name, key, comment;
678
+ {
679
+ GError* error = NULL;
680
+ g_key_file_set_comment(_SELF(self), (const gchar*)RVAL2CSTR(group_name),
681
+ (const gchar*)(NIL_P(key) ? NULL : RVAL2CSTR(key)),
682
+ (const gchar*)RVAL2CSTR(comment), &error);
683
+
684
+ if (error) RAISE_GERROR(error);
685
+
686
+ return self;
687
+ }
688
+
689
+ static VALUE
690
+ keyfile_remove_group(self, group_name)
691
+ VALUE self, group_name;
692
+ {
693
+ GError* error = NULL;
694
+ g_key_file_remove_group(_SELF(self), (const gchar*)RVAL2CSTR(group_name), &error);
695
+
696
+ if (error) RAISE_GERROR(error);
697
+
698
+ return self;
699
+ }
700
+
701
+ static VALUE
702
+ keyfile_remove_key(self, group_name, key)
703
+ VALUE self, group_name, key;
704
+ {
705
+ GError* error = NULL;
706
+ g_key_file_remove_key(_SELF(self),
707
+ (const gchar*)RVAL2CSTR(group_name),
708
+ (const gchar*)RVAL2CSTR(key),
709
+ &error);
710
+
711
+ if (error) RAISE_GERROR(error);
712
+
713
+ return self;
714
+ }
715
+
716
+
717
+ static VALUE
718
+ keyfile_remove_comment(self, group_name, key)
719
+ VALUE self, group_name, key;
720
+ {
721
+ GError* error = NULL;
722
+ g_key_file_remove_comment(_SELF(self),
723
+ (const gchar*)RVAL2CSTR(group_name),
724
+ (const gchar*)RVAL2CSTR(key),
725
+ &error);
726
+
727
+ if (error) RAISE_GERROR(error);
728
+
729
+ return self;
730
+ }
731
+ #endif
732
+
733
+ void
734
+ Init_glib_keyfile()
735
+ {
736
+ #if GLIB_CHECK_VERSION(2,6,0)
737
+ VALUE kf = G_DEF_CLASS(G_TYPE_KEY_FILE, "KeyFile", mGLib);
738
+ G_DEF_ERROR(G_KEY_FILE_ERROR, "KeyFileError", mGLib,
739
+ rb_eRuntimeError, G_TYPE_KEY_FILE_ERROR);
740
+
741
+ rb_define_method(kf, "initialize", keyfile_initialize, 0);
742
+ rb_define_method(kf, "set_list_separator", keyfile_set_list_separator, 1);
743
+ rb_define_method(kf, "load_from_file", keyfile_load_from_file, -1);
744
+ rb_define_method(kf, "load_from_data", keyfile_load_from_data, -1);
745
+ rb_define_method(kf, "load_from_data_dirs", keyfile_load_from_data_dirs, -1);
746
+ #if GLIB_CHECK_VERSION(2, 14, 0)
747
+ rb_define_method(kf, "load_from_dirs", keyfile_load_from_dirs, -1);
748
+ #endif
749
+ rb_define_method(kf, "to_data", keyfile_to_data, 0);
750
+ rb_define_method(kf, "start_group", keyfile_get_start_group, 0);
751
+ rb_define_method(kf, "groups", keyfile_get_groups, 0);
752
+ rb_define_method(kf, "get_keys", keyfile_get_keys, 1);
753
+ rb_define_method(kf, "has_group?", keyfile_has_group, 1);
754
+ rb_define_method(kf, "has_key?", keyfile_has_key, 2);
755
+ rb_define_method(kf, "get_value", keyfile_get_value, 2);
756
+ rb_define_method(kf, "get_string", keyfile_get_string, 2);
757
+ rb_define_method(kf, "get_locale_string", keyfile_get_locale_string, -1);
758
+ rb_define_method(kf, "get_boolean", keyfile_get_boolean, 2);
759
+ rb_define_method(kf, "get_integer", keyfile_get_integer, 2);
760
+ #if GLIB_CHECK_VERSION(2,12,0)
761
+ rb_define_method(kf, "get_double", keyfile_get_double, 2);
762
+ #endif
763
+ rb_define_method(kf, "get_string_list", keyfile_get_string_list, 2);
764
+ rb_define_method(kf, "get_locale_string_list", keyfile_get_locale_string_list, -1);
765
+ rb_define_method(kf, "get_boolean_list", keyfile_get_boolean_list, 2);
766
+ rb_define_method(kf, "get_integer_list", keyfile_get_integer_list, 2);
767
+ #if GLIB_CHECK_VERSION(2,12,0)
768
+ rb_define_method(kf, "get_double_list", keyfile_get_double_list, 2);
769
+ #endif
770
+ rb_define_method(kf, "get_comment", keyfile_get_comment, 2);
771
+ rb_define_method(kf, "set_value", keyfile_set_value, 3);
772
+ rb_define_method(kf, "set_string", keyfile_set_string, 3);
773
+ rb_define_method(kf, "set_locale_string", keyfile_set_locale_string, 4);
774
+ rb_define_method(kf, "set_boolean", keyfile_set_boolean, 3);
775
+ rb_define_method(kf, "set_integer", keyfile_set_integer, 3);
776
+ #if GLIB_CHECK_VERSION(2,12,0)
777
+ rb_define_method(kf, "set_double", keyfile_set_double, 3);
778
+ #endif
779
+ rb_define_method(kf, "set_string_list", keyfile_set_string_list, 3);
780
+ rb_define_method(kf, "set_locale_string_list", keyfile_set_locale_string_list, 4);
781
+ rb_define_method(kf, "set_boolean_list", keyfile_set_boolean_list, 3);
782
+ rb_define_method(kf, "set_integer_list", keyfile_set_integer_list, 3);
783
+ #if GLIB_CHECK_VERSION(2,12,0)
784
+ rb_define_method(kf, "set_double_list", keyfile_set_double_list, 3);
785
+ #endif
786
+ rb_define_method(kf, "set_comment", keyfile_set_comment, 3);
787
+ rb_define_method(kf, "remove_group", keyfile_remove_group, 1);
788
+ rb_define_method(kf, "remove_key", keyfile_remove_key, 2);
789
+ rb_define_method(kf, "remove_comment", keyfile_remove_comment, 2);
790
+
791
+ /* GKeyFileFlags */
792
+ G_DEF_CLASS(G_TYPE_KEY_FILE_FLAGS, "Flags", kf);
793
+ G_DEF_CONSTANTS(kf, G_TYPE_KEY_FILE_FLAGS, "G_KEY_FILE_");
794
+
795
+ #if GLIB_CHECK_VERSION(2, 14, 0)
796
+ /* Defines for handling freedesktop.org Desktop files */
797
+ rb_define_const(kf, "DESKTOP_GROUP", CSTR2RVAL(G_KEY_FILE_DESKTOP_GROUP));
798
+
799
+ rb_define_const(kf, "DESKTOP_KEY_TYPE",
800
+ CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_TYPE));
801
+ rb_define_const(kf, "DESKTOP_KEY_VERSION",
802
+ CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_VERSION));
803
+ rb_define_const(kf, "DESKTOP_KEY_NAME",
804
+ CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_NAME));
805
+ rb_define_const(kf, "DESKTOP_KEY_GENERIC_NAME",
806
+ CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_GENERIC_NAME));
807
+ rb_define_const(kf, "DESKTOP_KEY_NO_DISPLAY",
808
+ CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY));
809
+ rb_define_const(kf, "DESKTOP_KEY_COMMENT",
810
+ CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_COMMENT));
811
+ rb_define_const(kf, "DESKTOP_KEY_ICON",
812
+ CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_ICON));
813
+ rb_define_const(kf, "DESKTOP_KEY_HIDDEN",
814
+ CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_HIDDEN));
815
+ rb_define_const(kf, "DESKTOP_KEY_ONLY_SHOW_IN",
816
+ CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_ONLY_SHOW_IN));
817
+ rb_define_const(kf, "DESKTOP_KEY_NOT_SHOW_IN",
818
+ CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_NOT_SHOW_IN));
819
+ rb_define_const(kf, "DESKTOP_KEY_TRY_EXEC",
820
+ CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_TRY_EXEC));
821
+ rb_define_const(kf, "DESKTOP_KEY_EXEC",
822
+ CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_EXEC));
823
+ rb_define_const(kf, "DESKTOP_KEY_PATH",
824
+ CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_PATH));
825
+ rb_define_const(kf, "DESKTOP_KEY_TERMINAL",
826
+ CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_TERMINAL));
827
+ rb_define_const(kf, "DESKTOP_KEY_MIME_TYPE",
828
+ CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_MIME_TYPE));
829
+ rb_define_const(kf, "DESKTOP_KEY_CATEGORIES",
830
+ CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_CATEGORIES));
831
+ rb_define_const(kf, "DESKTOP_KEY_STARTUP_NOTIFY",
832
+ CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_STARTUP_NOTIFY));
833
+ rb_define_const(kf, "DESKTOP_KEY_STARTUP_WM_CLASS",
834
+ CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_STARTUP_WM_CLASS));
835
+ rb_define_const(kf, "DESKTOP_KEY_URL",
836
+ CSTR2RVAL(G_KEY_FILE_DESKTOP_KEY_URL));
837
+
838
+ rb_define_const(kf, "DESKTOP_TYPE_APPLICATION",
839
+ CSTR2RVAL(G_KEY_FILE_DESKTOP_TYPE_APPLICATION));
840
+ rb_define_const(kf, "DESKTOP_TYPE_LINK",
841
+ CSTR2RVAL(G_KEY_FILE_DESKTOP_TYPE_LINK));
842
+ rb_define_const(kf, "DESKTOP_TYPE_DIRECTORY",
843
+ CSTR2RVAL(G_KEY_FILE_DESKTOP_TYPE_DIRECTORY));
844
+ #endif
845
+ #endif
846
+ }