glib2 0.20.0

Sign up to get free protection for your applications and to get access to all the features.
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
+ }