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,192 @@
1
+ /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
+ /************************************************
3
+
4
+ rbglib_completion.c -
5
+
6
+ $Author: sakai $
7
+ $Date: 2007/07/08 02:40:12 $
8
+
9
+ Copyright (C) 2005,2006 Masao Mutoh
10
+ ************************************************/
11
+
12
+ #include "rbgprivate.h"
13
+
14
+ static ID id_compfunc;
15
+ static ID id_call;
16
+ static ID id_to_s;
17
+ static ID id_clear;
18
+ static ID id_items_internal;
19
+
20
+ /*****************************************/
21
+ static GCompletion*
22
+ completion_copy(comp)
23
+ GCompletion* comp;
24
+ {
25
+ GCompletion* new_comp;
26
+ g_return_val_if_fail (comp != NULL, NULL);
27
+
28
+ new_comp = g_new(GCompletion, 1);
29
+ *new_comp = *comp;
30
+ return new_comp;
31
+ }
32
+
33
+ GType
34
+ g_completion_get_type(void)
35
+ {
36
+ static GType our_type = 0;
37
+ if (our_type == 0)
38
+ our_type = g_boxed_type_register_static ("GCompletion",
39
+ (GBoxedCopyFunc)completion_copy,
40
+ (GBoxedFreeFunc)g_completion_free);
41
+ return our_type;
42
+ }
43
+ /*****************************************/
44
+
45
+ #define G_TYPE_COMPLETION (g_completion_get_type())
46
+
47
+ #define _SELF(s) ((GCompletion*)RVAL2BOXED(s, G_TYPE_COMPLETION))
48
+
49
+ /* data should be [self, data] */
50
+ static gchar*
51
+ comp_func(compdata)
52
+ gpointer compdata;
53
+ {
54
+ VALUE ret;
55
+ VALUE self = RARRAY_PTR((VALUE)compdata)[0];
56
+ VALUE data = RARRAY_PTR((VALUE)compdata)[1];
57
+
58
+ VALUE func = rb_ivar_get(self, id_compfunc);
59
+
60
+ if (NIL_P(func)){
61
+ ret = rb_funcall(data, id_to_s, 0);
62
+ } else {
63
+ ret = rb_funcall(func, id_call, 1, data);
64
+ }
65
+ return RVAL2CSTR(ret);
66
+ }
67
+
68
+ static VALUE
69
+ comp_initialize(self)
70
+ VALUE self;
71
+ {
72
+ VALUE block = Qnil;
73
+
74
+ if (rb_block_given_p()) {
75
+ block = rb_block_proc();
76
+ }
77
+
78
+ rb_ivar_set(self, id_compfunc, block);
79
+ /* This is used for memory management(GC) */
80
+ rb_ivar_set(self, id_items_internal, rb_hash_new());
81
+
82
+ G_INITIALIZE(self, g_completion_new((GCompletionFunc)comp_func));
83
+
84
+ return Qnil;
85
+ }
86
+
87
+ static VALUE
88
+ comp_add_items(self, items)
89
+ VALUE self, items;
90
+ {
91
+ gint i, len;
92
+ GList* list = (GList*)NULL;
93
+ VALUE items_internal = rb_ivar_get(self, id_items_internal);
94
+
95
+ Check_Type(items, T_ARRAY);
96
+ len = RARRAY_LEN(items);
97
+ for (i = 0; i < len; i ++){
98
+ VALUE data = RARRAY_PTR(items)[i];
99
+ VALUE item = rb_assoc_new(self, data);
100
+ list = g_list_append(list, (gpointer)item);
101
+ rb_hash_aset(items_internal, data, item);
102
+ }
103
+ g_completion_add_items(_SELF(self), list);
104
+
105
+ return self;
106
+ }
107
+
108
+ static VALUE
109
+ comp_remove_items(self, items)
110
+ VALUE self, items;
111
+ {
112
+ gint i, len;
113
+ GList* list = (GList*)NULL;
114
+ VALUE items_internal = rb_ivar_get(self, id_items_internal);
115
+
116
+ Check_Type(items, T_ARRAY);
117
+ len = RARRAY_LEN(items);
118
+ for (i = 0; i < len; i ++){
119
+ VALUE data = RARRAY_PTR(items)[i];
120
+ VALUE item = rb_hash_aref(items_internal, data);
121
+ list = g_list_append(list, (gpointer)item);
122
+ rb_hash_delete(items_internal, data);
123
+ }
124
+ g_completion_remove_items(_SELF(self), list);
125
+
126
+ return self;
127
+ }
128
+
129
+ static VALUE
130
+ comp_clear_items(self)
131
+ VALUE self;
132
+ {
133
+ VALUE items_internal = rb_ivar_get(self, id_items_internal);
134
+ rb_funcall(items_internal, id_clear, 0);
135
+ g_completion_clear_items(_SELF(self));
136
+ return self;
137
+ }
138
+
139
+ static VALUE
140
+ comp_items(self)
141
+ VALUE self;
142
+ {
143
+ return rb_ivar_get(self, id_items_internal);
144
+ }
145
+
146
+ static VALUE
147
+ comp_complete(self, prefix)
148
+ VALUE self, prefix;
149
+ {
150
+ gchar* new_prefix;
151
+ VALUE ary = rb_ary_new();
152
+ #if GLIB_CHECK_VERSION(2,4,0)
153
+ GList* list = g_completion_complete_utf8(_SELF(self),
154
+ (const gchar*)RVAL2CSTR(prefix),
155
+ &new_prefix);
156
+ #else
157
+ GList* list = g_completion_complete(_SELF(self),
158
+ RVAL2CSTR(prefix),
159
+ &new_prefix);
160
+ #endif
161
+ while (list) {
162
+ rb_ary_push(ary, RARRAY_PTR((VALUE)list->data)[1]);
163
+ list = list->next;
164
+ }
165
+
166
+ return rb_assoc_new(ary, new_prefix ? CSTR2RVAL(new_prefix) : Qnil);
167
+ }
168
+
169
+ /* We don't use this.
170
+ void g_completion_set_compare (GCompletion *cmp,
171
+ GCompletionStrncmpFunc strncmp_func);
172
+ */
173
+
174
+ void
175
+ Init_glib_completion()
176
+ {
177
+ VALUE comp = G_DEF_CLASS(G_TYPE_COMPLETION, "Completion", mGLib);
178
+
179
+ id_call = rb_intern("call");
180
+ id_to_s = rb_intern("to_s");
181
+ id_clear = rb_intern("clear");
182
+ id_compfunc = rb_intern("completion_proc");
183
+ id_items_internal = rb_intern("items_internal");
184
+
185
+ rb_define_method(comp, "initialize", comp_initialize, 0);
186
+ rb_define_method(comp, "add_items", comp_add_items, 1);
187
+ rb_define_method(comp, "remove_items", comp_remove_items, 1);
188
+ rb_define_method(comp, "clear_items", comp_clear_items, 0);
189
+ rb_define_method(comp, "complete", comp_complete, 1);
190
+
191
+ rb_define_method(comp, "items", comp_items, 0);
192
+ }
@@ -0,0 +1,195 @@
1
+ /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
+ /**********************************************************************
3
+
4
+ rbglib_convert.c -
5
+
6
+ $Author: sakai $
7
+ $Date: 2007/06/16 02:46:28 $
8
+
9
+ Copyright (C) 2002,2003 KUBO Takehiro
10
+ Copyright (C) 2009 Ruby-GNOME2 Project Team
11
+
12
+ **********************************************************************/
13
+ #include "rbgprivate.h"
14
+ #include "rbglib.h"
15
+
16
+ static VALUE
17
+ rbglib_m_convert(self, str, to, from)
18
+ VALUE self, str, to, from;
19
+ {
20
+ GError *err = NULL;
21
+ gchar* ret;
22
+ gsize written;
23
+ VALUE s = Qnil;
24
+
25
+ StringValue(str);
26
+ ret = g_convert(RSTRING_PTR(str), RSTRING_LEN(str),
27
+ StringValuePtr(to), StringValuePtr(from),
28
+ NULL, &written, &err);
29
+
30
+ if (err != NULL)
31
+ RAISE_GERROR(err);
32
+ s = rb_str_new(ret, written);
33
+ g_free(ret);
34
+ return s;
35
+ }
36
+
37
+ static VALUE
38
+ rbglib_m_locale_to_utf8(self, str)
39
+ VALUE self, str;
40
+ {
41
+ GError *err = NULL;
42
+ VALUE s = Qnil;
43
+ gchar* ret;
44
+ gsize written;
45
+
46
+ StringValue(str);
47
+ ret = g_locale_to_utf8(RSTRING_PTR(str), RSTRING_LEN(str),
48
+ NULL, &written, &err);
49
+
50
+ if (err != NULL)
51
+ RAISE_GERROR(err);
52
+ s = rb_str_new(ret, written);
53
+ g_free(ret);
54
+ return s;
55
+ }
56
+
57
+ static VALUE
58
+ rbglib_m_locale_from_utf8(self, str)
59
+ VALUE self, str;
60
+ {
61
+ GError *err = NULL;
62
+ VALUE s = Qnil;
63
+ gchar* ret;
64
+ gsize written;
65
+
66
+ StringValue(str);
67
+ ret = g_locale_from_utf8(RSTRING_PTR(str), RSTRING_LEN(str),
68
+ NULL, &written, &err);
69
+
70
+ if (err != NULL)
71
+ RAISE_GERROR(err);
72
+ s = rb_str_new(ret, written);
73
+ g_free(ret);
74
+ return s;
75
+ }
76
+
77
+ static VALUE
78
+ rbglib_m_filename_to_utf8(self, str)
79
+ VALUE self, str;
80
+ {
81
+ GError *err = NULL;
82
+ VALUE s = Qnil;
83
+ gchar* ret;
84
+ gsize written;
85
+
86
+ StringValue(str);
87
+ ret = g_filename_to_utf8(RSTRING_PTR(str), RSTRING_LEN(str),
88
+ NULL, &written, &err);
89
+
90
+ if (err != NULL)
91
+ RAISE_GERROR(err);
92
+ s = rb_str_new(ret, written);
93
+ g_free(ret);
94
+ return s;
95
+ }
96
+
97
+ static VALUE
98
+ rbglib_m_filename_from_utf8(self, str)
99
+ VALUE self, str;
100
+ {
101
+ GError *err = NULL;
102
+ VALUE s = Qnil;
103
+ gchar* ret;
104
+ gsize written;
105
+
106
+ StringValue(str);
107
+ ret = g_filename_from_utf8(RSTRING_PTR(str), RSTRING_LEN(str),
108
+ NULL, &written, &err);
109
+
110
+ if (err != NULL)
111
+ RAISE_GERROR(err);
112
+ s = rb_str_new(ret, written);
113
+ g_free(ret);
114
+ return s;
115
+ }
116
+
117
+ static VALUE
118
+ rbglib_m_filename_to_uri(argc, argv, self)
119
+ int argc;
120
+ VALUE *argv;
121
+ VALUE self;
122
+ {
123
+ VALUE filename, hostname, s;
124
+ GError *err = NULL;
125
+ gchar* ret;
126
+
127
+ rb_scan_args(argc, argv, "11", &filename, &hostname);
128
+
129
+ ret = g_filename_to_uri(StringValuePtr(filename),
130
+ NIL_P(hostname) ? NULL : StringValuePtr(hostname),
131
+ &err);
132
+
133
+ if (err)
134
+ RAISE_GERROR(err);
135
+ s = rb_str_new2(ret);
136
+ g_free(ret);
137
+ return s;
138
+ }
139
+
140
+ static VALUE
141
+ rbglib_m_filename_from_uri(self, str)
142
+ VALUE self, str;
143
+ {
144
+ GError *err = NULL;
145
+ VALUE s;
146
+ gchar* filename;
147
+ char* hostname;
148
+
149
+ filename = g_filename_from_uri(StringValuePtr(str), &hostname, &err);
150
+
151
+ if (err)
152
+ RAISE_GERROR(err);
153
+ s = rb_ary_new3(2, rb_str_new2(filename),
154
+ hostname ? rb_str_new2(hostname) : Qnil);
155
+ g_free(filename);
156
+ g_free(hostname);
157
+ return s;
158
+ }
159
+
160
+ static VALUE
161
+ rbglib_m_utf8_validate(self, str)
162
+ VALUE self, str;
163
+ {
164
+ rb_warning("GLib.utf8_validate is deprecated. Use GLib::UTF8.validate instead.");
165
+ StringValue(str);
166
+ return CBOOL2RVAL(g_utf8_validate(RSTRING_PTR(str), RSTRING_LEN(str), NULL));
167
+ }
168
+
169
+ void
170
+ Init_glib_convert()
171
+ {
172
+ VALUE cCharError = G_DEF_ERROR2(G_CONVERT_ERROR, "ConvertError", mGLib, rb_eIOError);
173
+
174
+ rb_define_const(cCharError, "NO_CONVERSION", INT2NUM(G_CONVERT_ERROR_NO_CONVERSION));
175
+ rb_define_const(cCharError, "ILLEGAL_SEQUENCE", INT2NUM(G_CONVERT_ERROR_ILLEGAL_SEQUENCE));
176
+ rb_define_const(cCharError, "FAILED", INT2NUM(G_CONVERT_ERROR_FAILED));
177
+ rb_define_const(cCharError, "PARTIAL_INPUT", INT2NUM(G_CONVERT_ERROR_PARTIAL_INPUT));
178
+ rb_define_const(cCharError, "BAD_URI", INT2NUM(G_CONVERT_ERROR_BAD_URI));
179
+ rb_define_const(cCharError, "NOT_ABSOLUTE_PATH", INT2NUM(G_CONVERT_ERROR_NOT_ABSOLUTE_PATH));
180
+
181
+ /* glib/gunicode.h */
182
+ /* just for backward compatibility.
183
+ Use GLib::UTF8.validate instead. */
184
+ rb_define_module_function(mGLib, "utf8_validate", rbglib_m_utf8_validate, 1);
185
+
186
+ /* glib/gconvert.h */
187
+ rb_define_module_function(mGLib, "convert", rbglib_m_convert, 3);
188
+ rb_define_module_function(mGLib, "locale_to_utf8", rbglib_m_locale_to_utf8, 1);
189
+ rb_define_module_function(mGLib, "locale_from_utf8", rbglib_m_locale_from_utf8, 1);
190
+ rb_define_module_function(mGLib, "filename_to_utf8", rbglib_m_filename_to_utf8, 1);
191
+ rb_define_module_function(mGLib, "filename_from_utf8", rbglib_m_filename_from_utf8, 1);
192
+
193
+ rb_define_module_function(mGLib, "filename_to_uri", rbglib_m_filename_to_uri, -1);
194
+ rb_define_module_function(mGLib, "filename_from_uri", rbglib_m_filename_from_uri, 1);
195
+ }
@@ -0,0 +1,95 @@
1
+ /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
+ /************************************************
3
+
4
+ rbgerror.c -
5
+
6
+ $Author: mutoh $
7
+ $Date: 2004/08/22 13:27:47 $
8
+
9
+ Copyright (C) 2004 Masao Mutoh
10
+ ************************************************/
11
+
12
+ #include "rbgprivate.h"
13
+ #include <ctype.h>
14
+
15
+ static ID id_code;
16
+ static ID id_domain;
17
+ static VALUE gerror_table;
18
+ static VALUE generic_error;
19
+
20
+ VALUE
21
+ rbgerr_gerror2exception(error)
22
+ GError *error;
23
+ {
24
+ VALUE exc = Qnil;
25
+ VALUE klass = Qnil;
26
+
27
+ if (! error){
28
+ return rb_exc_new2(rb_eRuntimeError, "GError parameter doesn't have a value.");
29
+ }
30
+
31
+ klass = rb_hash_aref(gerror_table, UINT2NUM(error->domain));
32
+ if NIL_P(klass){
33
+ exc = rb_exc_new2(generic_error, error->message);
34
+ rb_ivar_set(exc, id_domain, CSTR2RVAL(g_quark_to_string(error->domain)));
35
+ rb_ivar_set(exc, id_code, INT2NUM(error->code));
36
+ } else {
37
+ exc = rb_exc_new2(klass, error->message);
38
+ rb_ivar_set(exc, id_domain, CSTR2RVAL(g_quark_to_string(error->domain)));
39
+ rb_ivar_set(exc, id_code, INT2NUM(error->code));
40
+ }
41
+ g_error_free(error);
42
+ return exc;
43
+ }
44
+
45
+ VALUE
46
+ rbgerr_define_gerror(domain, name, module, parent, gtype)
47
+ GQuark domain;
48
+ const gchar* name;
49
+ VALUE module;
50
+ VALUE parent;
51
+ VALUE gtype;
52
+ {
53
+ VALUE klass = rb_define_class_under(module, name, parent);
54
+ rb_funcall(klass, rbgutil_id_module_eval, 1, CSTR2RVAL("def code; @code; end\n"));
55
+ rb_funcall(klass, rbgutil_id_module_eval, 1, CSTR2RVAL("def domain; @domain; end\n"));
56
+
57
+ rb_hash_aset(gerror_table, UINT2NUM(domain), klass);
58
+
59
+ if (! NIL_P(gtype)){
60
+ GEnumClass* gclass = g_type_class_ref(gtype);
61
+ int i;
62
+
63
+ for (i = 0; i < gclass->n_values; i++) {
64
+ GEnumValue* entry = &(gclass->values[i]);
65
+ gchar* nick = g_strdup(entry->value_nick);
66
+ gchar* p;
67
+
68
+ for (p = nick; *p; p++) {
69
+ if (*p == '-')
70
+ *p = '_';
71
+ else
72
+ *p = g_ascii_toupper(*p);
73
+ }
74
+ rbgobj_define_const(klass, nick, INT2NUM(i));
75
+ g_free(nick);
76
+ }
77
+
78
+ g_type_class_unref(gclass);
79
+ }
80
+
81
+ return klass;
82
+ }
83
+
84
+ void
85
+ Init_glib_error()
86
+ {
87
+ id_code = rb_intern("@code");
88
+ id_domain = rb_intern("@domain");
89
+ gerror_table = rb_hash_new();
90
+ rb_global_variable(&gerror_table);
91
+
92
+ generic_error = rb_define_class_under(mGLib, "Error", rb_eRuntimeError);
93
+ rb_funcall(generic_error, rbgutil_id_module_eval, 1, CSTR2RVAL("def code; @code; end\n"));
94
+ rb_funcall(generic_error, rbgutil_id_module_eval, 1, CSTR2RVAL("def domain; @domain; end\n"));
95
+ }