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.
- data/ChangeLog +3023 -0
- data/README +28 -0
- data/Rakefile +87 -0
- data/extconf.rb +61 -0
- data/sample/bookmarkfile.rb +66 -0
- data/sample/completion.rb +45 -0
- data/sample/idle.rb +41 -0
- data/sample/iochannel.rb +44 -0
- data/sample/keyfile.rb +62 -0
- data/sample/shell.rb +36 -0
- data/sample/spawn.rb +25 -0
- data/sample/timeout.rb +28 -0
- data/sample/timeout2.rb +35 -0
- data/sample/timer.rb +40 -0
- data/sample/type-register.rb +103 -0
- data/sample/type-register2.rb +104 -0
- data/sample/utils.rb +54 -0
- data/src/glib-enum-types.c +1032 -0
- data/src/glib-enum-types.h +140 -0
- data/src/lib/glib-mkenums.rb +199 -0
- data/src/lib/glib2.rb +220 -0
- data/src/lib/mkmf-gnome2.rb +390 -0
- data/src/lib/pkg-config.rb +137 -0
- data/src/rbgcompat.h +30 -0
- data/src/rbglib.c +320 -0
- data/src/rbglib.h +96 -0
- data/src/rbglib_bookmarkfile.c +595 -0
- data/src/rbglib_completion.c +192 -0
- data/src/rbglib_convert.c +195 -0
- data/src/rbglib_error.c +95 -0
- data/src/rbglib_fileutils.c +83 -0
- data/src/rbglib_i18n.c +44 -0
- data/src/rbglib_int64.c +157 -0
- data/src/rbglib_iochannel.c +883 -0
- data/src/rbglib_keyfile.c +846 -0
- data/src/rbglib_maincontext.c +917 -0
- data/src/rbglib_mainloop.c +87 -0
- data/src/rbglib_messages.c +150 -0
- data/src/rbglib_pollfd.c +111 -0
- data/src/rbglib_shell.c +68 -0
- data/src/rbglib_source.c +190 -0
- data/src/rbglib_spawn.c +345 -0
- data/src/rbglib_threads.c +51 -0
- data/src/rbglib_timer.c +127 -0
- data/src/rbglib_unicode.c +611 -0
- data/src/rbglib_utils.c +386 -0
- data/src/rbglib_win32.c +136 -0
- data/src/rbgobj_boxed.c +251 -0
- data/src/rbgobj_closure.c +337 -0
- data/src/rbgobj_convert.c +167 -0
- data/src/rbgobj_enums.c +961 -0
- data/src/rbgobj_fundamental.c +30 -0
- data/src/rbgobj_object.c +892 -0
- data/src/rbgobj_param.c +390 -0
- data/src/rbgobj_paramspecs.c +305 -0
- data/src/rbgobj_signal.c +963 -0
- data/src/rbgobj_strv.c +61 -0
- data/src/rbgobj_type.c +851 -0
- data/src/rbgobj_typeinstance.c +121 -0
- data/src/rbgobj_typeinterface.c +148 -0
- data/src/rbgobj_typemodule.c +66 -0
- data/src/rbgobj_typeplugin.c +49 -0
- data/src/rbgobj_value.c +313 -0
- data/src/rbgobj_valuearray.c +59 -0
- data/src/rbgobj_valuetypes.c +298 -0
- data/src/rbgobject.c +406 -0
- data/src/rbgobject.h +265 -0
- data/src/rbgprivate.h +88 -0
- data/src/rbgutil.c +222 -0
- data/src/rbgutil.h +82 -0
- data/src/rbgutil_callback.c +231 -0
- data/test/glib-test-init.rb +6 -0
- data/test/glib-test-utils.rb +12 -0
- data/test/run-test.rb +25 -0
- data/test/test_enum.rb +99 -0
- data/test/test_file_utils.rb +15 -0
- data/test/test_glib2.rb +120 -0
- data/test/test_iochannel.rb +275 -0
- data/test/test_key_file.rb +38 -0
- data/test/test_mkenums.rb +25 -0
- data/test/test_signal.rb +20 -0
- data/test/test_timeout.rb +28 -0
- data/test/test_unicode.rb +369 -0
- data/test/test_utils.rb +37 -0
- data/test/test_win32.rb +13 -0
- metadata +165 -0
data/src/rbgcompat.h
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
|
+
/**********************************************************************
|
3
|
+
rbgcompat.h -
|
4
|
+
|
5
|
+
Copyright (C) 2007 Ruby-GNOME2 Project Team
|
6
|
+
**********************************************************************/
|
7
|
+
|
8
|
+
#ifndef __RBGCOMPAT_H__
|
9
|
+
#define __RBGCOMPAT_H__
|
10
|
+
|
11
|
+
G_BEGIN_DECLS
|
12
|
+
|
13
|
+
typedef struct {
|
14
|
+
GType type;
|
15
|
+
VALUE (*get_superclass)(void);
|
16
|
+
void (*type_init_hook)(VALUE);
|
17
|
+
void (*rvalue2gvalue)(VALUE val, GValue *result);
|
18
|
+
VALUE (*gvalue2rvalue)(const GValue *);
|
19
|
+
void (*initialize)(VALUE, gpointer);
|
20
|
+
gpointer (*robj2instance)(VALUE);
|
21
|
+
VALUE (*instance2robj)(gpointer);
|
22
|
+
} RGFundamental;
|
23
|
+
|
24
|
+
#define G_DEF_FUNDAMENTAL(f) (rbgobj_fund_define_fundamental(f))
|
25
|
+
|
26
|
+
extern void rbgobj_fund_define_fundamental(RGFundamental *fundamental);
|
27
|
+
|
28
|
+
G_END_DECLS
|
29
|
+
|
30
|
+
#endif
|
data/src/rbglib.c
ADDED
@@ -0,0 +1,320 @@
|
|
1
|
+
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
|
+
/**********************************************************************
|
3
|
+
|
4
|
+
rbglib.c -
|
5
|
+
|
6
|
+
$Author: sakai $
|
7
|
+
$Date: 2007/07/14 13:42:08 $
|
8
|
+
|
9
|
+
Copyright (C) 2002,2003 Masahiro Sakai
|
10
|
+
|
11
|
+
**********************************************************************/
|
12
|
+
|
13
|
+
#include <locale.h>
|
14
|
+
#include "rbgprivate.h"
|
15
|
+
#include "rbglib.h"
|
16
|
+
|
17
|
+
static ID id_inspect;
|
18
|
+
|
19
|
+
VALUE mGLib;
|
20
|
+
|
21
|
+
extern void Init_gutil();
|
22
|
+
extern void Init_gutil_callback();
|
23
|
+
extern void Init_glib_int64();
|
24
|
+
extern void Init_glib_error();
|
25
|
+
extern void Init_glib_threads();
|
26
|
+
extern void Init_glib_convert();
|
27
|
+
extern void Init_glib_messages();
|
28
|
+
extern void Init_glib_spawn();
|
29
|
+
extern void Init_glib_fileutils();
|
30
|
+
extern void Init_glib_utils();
|
31
|
+
extern void Init_glib_i18n();
|
32
|
+
extern void Init_glib_win32();
|
33
|
+
extern void Init_gobject();
|
34
|
+
extern void Init_glib_main_loop();
|
35
|
+
extern void Init_glib_main_context();
|
36
|
+
extern void Init_glib_source();
|
37
|
+
extern void Init_glib_poll_fd();
|
38
|
+
extern void Init_glib_io_channel();
|
39
|
+
extern void Init_glib_shell();
|
40
|
+
extern void Init_glib_completion();
|
41
|
+
extern void Init_glib_timer();
|
42
|
+
extern void Init_glib_unicode();
|
43
|
+
extern void Init_glib_keyfile();
|
44
|
+
extern void Init_glib_bookmark_file();
|
45
|
+
|
46
|
+
const gchar *
|
47
|
+
rbg_rval_inspect(VALUE object)
|
48
|
+
{
|
49
|
+
VALUE inspected;
|
50
|
+
|
51
|
+
inspected = rb_funcall(object, id_inspect, 0);
|
52
|
+
return RVAL2CSTR(inspected);
|
53
|
+
}
|
54
|
+
|
55
|
+
char *
|
56
|
+
rbg_string_value_ptr(ptr)
|
57
|
+
volatile VALUE *ptr;
|
58
|
+
{
|
59
|
+
return rb_string_value_ptr(ptr);
|
60
|
+
}
|
61
|
+
|
62
|
+
gchar *
|
63
|
+
rbg_rval2cstr_accept_nil(VALUE str)
|
64
|
+
{
|
65
|
+
return NIL_P(str) ? NULL : StringValuePtr(str);
|
66
|
+
}
|
67
|
+
|
68
|
+
VALUE
|
69
|
+
rbg_cstr2rval(const char* str)
|
70
|
+
{
|
71
|
+
return str ? rb_str_new2(str) : Qnil;
|
72
|
+
}
|
73
|
+
|
74
|
+
VALUE
|
75
|
+
rbg_cstr2rval_with_free(gchar* str)
|
76
|
+
{
|
77
|
+
VALUE ret = Qnil;
|
78
|
+
if (str) {
|
79
|
+
ret = rb_str_new2(str);
|
80
|
+
g_free(str);
|
81
|
+
}
|
82
|
+
return ret;
|
83
|
+
}
|
84
|
+
|
85
|
+
#if 0
|
86
|
+
/*
|
87
|
+
2004-04-15 Commented out by Masao.
|
88
|
+
|
89
|
+
These functions replace g_malloc/g_realloc/g_free of GLib.
|
90
|
+
When g_malloc is called and the memory area can not reserved,
|
91
|
+
rb_gc() will be called. It makes Ruby-GNOME2 uses memory efficiently.
|
92
|
+
|
93
|
+
But rb_gc() does not work under multithread.
|
94
|
+
So they occur "cross-thread violation".
|
95
|
+
*/
|
96
|
+
|
97
|
+
static gpointer
|
98
|
+
my_malloc(gsize n_bytes)
|
99
|
+
{
|
100
|
+
/* Should we rescue NoMemoryError? */
|
101
|
+
return ruby_xmalloc(n_bytes);
|
102
|
+
}
|
103
|
+
|
104
|
+
static gpointer
|
105
|
+
my_realloc(gpointer mem, gsize n_bytes)
|
106
|
+
{
|
107
|
+
/* Should we rescue NoMemoryError? */
|
108
|
+
return ruby_xrealloc(mem, n_bytes);
|
109
|
+
}
|
110
|
+
|
111
|
+
static void
|
112
|
+
my_free(gpointer mem)
|
113
|
+
{
|
114
|
+
return ruby_xfree(mem);
|
115
|
+
}
|
116
|
+
|
117
|
+
static void
|
118
|
+
Init_mem()
|
119
|
+
{
|
120
|
+
GMemVTable mem_table = {
|
121
|
+
my_malloc,
|
122
|
+
my_realloc,
|
123
|
+
my_free,
|
124
|
+
NULL,
|
125
|
+
NULL,
|
126
|
+
NULL,
|
127
|
+
};
|
128
|
+
g_mem_set_vtable(&mem_table);
|
129
|
+
}
|
130
|
+
#endif
|
131
|
+
|
132
|
+
static VALUE
|
133
|
+
rbg_s_os_win32(self)
|
134
|
+
VALUE self;
|
135
|
+
{
|
136
|
+
#ifdef G_OS_WIN32
|
137
|
+
return Qtrue;
|
138
|
+
#else
|
139
|
+
return Qfalse;
|
140
|
+
#endif
|
141
|
+
}
|
142
|
+
|
143
|
+
static VALUE
|
144
|
+
rbg_s_os_beos(self)
|
145
|
+
VALUE self;
|
146
|
+
{
|
147
|
+
#ifdef G_OS_BEOS
|
148
|
+
return Qtrue;
|
149
|
+
#else
|
150
|
+
return Qfalse;
|
151
|
+
#endif
|
152
|
+
}
|
153
|
+
|
154
|
+
static VALUE
|
155
|
+
rbg_s_os_unix(self)
|
156
|
+
VALUE self;
|
157
|
+
{
|
158
|
+
#ifdef G_OS_UNIX
|
159
|
+
return Qtrue;
|
160
|
+
#else
|
161
|
+
return Qfalse;
|
162
|
+
#endif
|
163
|
+
}
|
164
|
+
|
165
|
+
void
|
166
|
+
Init_glib2()
|
167
|
+
{
|
168
|
+
id_inspect = rb_intern("inspect");
|
169
|
+
|
170
|
+
mGLib = rb_define_module("GLib");
|
171
|
+
|
172
|
+
setlocale (LC_CTYPE, "");
|
173
|
+
#if LC_MESSAGES
|
174
|
+
setlocale (LC_MESSAGES, "");
|
175
|
+
#endif
|
176
|
+
|
177
|
+
/* Version Information */
|
178
|
+
rb_define_const(mGLib, "VERSION",
|
179
|
+
rb_ary_new3(3,
|
180
|
+
INT2FIX(glib_major_version),
|
181
|
+
INT2FIX(glib_minor_version),
|
182
|
+
INT2FIX(glib_micro_version)));
|
183
|
+
rb_define_const(mGLib, "MAJOR_VERSION", INT2FIX(glib_major_version));
|
184
|
+
rb_define_const(mGLib, "MINOR_VERSION", INT2FIX(glib_minor_version));
|
185
|
+
rb_define_const(mGLib, "MICRO_VERSION", INT2FIX(glib_micro_version));
|
186
|
+
rb_define_const(mGLib, "INTERFACE_AGE", INT2FIX(glib_interface_age));
|
187
|
+
rb_define_const(mGLib, "BINARY_AGE", INT2FIX(glib_binary_age));
|
188
|
+
|
189
|
+
rb_define_const(mGLib, "BINDING_VERSION",
|
190
|
+
rb_ary_new3(3,
|
191
|
+
INT2FIX(RBGLIB_MAJOR_VERSION),
|
192
|
+
INT2FIX(RBGLIB_MINOR_VERSION),
|
193
|
+
INT2FIX(RBGLIB_MICRO_VERSION)));
|
194
|
+
|
195
|
+
rb_define_const(mGLib, "BUILD_VERSION",
|
196
|
+
rb_ary_new3(3,
|
197
|
+
INT2FIX(GLIB_MAJOR_VERSION),
|
198
|
+
INT2FIX(GLIB_MINOR_VERSION),
|
199
|
+
INT2FIX(GLIB_MICRO_VERSION)));
|
200
|
+
|
201
|
+
/* Limits of Basic Types */
|
202
|
+
rb_define_const(mGLib, "MININT", INT2FIX(G_MININT));
|
203
|
+
rb_define_const(mGLib, "MAXINT", INT2NUM(G_MAXINT));
|
204
|
+
rb_define_const(mGLib, "MAXUINT", UINT2NUM(G_MAXUINT));
|
205
|
+
|
206
|
+
rb_define_const(mGLib, "MINSHORT", INT2FIX(G_MINSHORT));
|
207
|
+
rb_define_const(mGLib, "MAXSHORT", INT2FIX(G_MAXSHORT));
|
208
|
+
rb_define_const(mGLib, "MAXUSHORT", UINT2NUM(G_MAXUSHORT));
|
209
|
+
|
210
|
+
rb_define_const(mGLib, "MINLONG", INT2FIX(G_MINLONG));
|
211
|
+
rb_define_const(mGLib, "MAXLONG", INT2NUM(G_MAXLONG));
|
212
|
+
rb_define_const(mGLib, "MAXULONG", UINT2NUM(G_MAXULONG));
|
213
|
+
|
214
|
+
#if GLIB_CHECK_VERSION(2,4,0)
|
215
|
+
rb_define_const(mGLib, "MININT8", INT2FIX(G_MININT8));
|
216
|
+
rb_define_const(mGLib, "MAXINT8", INT2FIX(G_MAXINT8));
|
217
|
+
rb_define_const(mGLib, "MAXUINT8", UINT2NUM(G_MAXUINT8));
|
218
|
+
|
219
|
+
rb_define_const(mGLib, "MININT16", INT2FIX(G_MININT16));
|
220
|
+
rb_define_const(mGLib, "MAXINT16", INT2FIX(G_MAXINT16));
|
221
|
+
rb_define_const(mGLib, "MAXUINT16", UINT2NUM(G_MAXUINT16));
|
222
|
+
|
223
|
+
rb_define_const(mGLib, "MININT32", INT2FIX(G_MININT32));
|
224
|
+
rb_define_const(mGLib, "MAXINT32", INT2NUM(G_MAXINT32));
|
225
|
+
rb_define_const(mGLib, "MAXUINT32", UINT2NUM(G_MAXUINT32));
|
226
|
+
#endif
|
227
|
+
rb_define_const(mGLib, "MININT64", INT2FIX(G_MININT64));
|
228
|
+
rb_define_const(mGLib, "MAXINT64", LL2NUM(G_MAXINT64));
|
229
|
+
rb_define_const(mGLib, "MAXUINT64", ULL2NUM(G_MAXUINT64));
|
230
|
+
#if GLIB_CHECK_VERSION(2,4,0)
|
231
|
+
rb_define_const(mGLib, "MAXSIZE", UINT2NUM(G_MAXSIZE));
|
232
|
+
#endif
|
233
|
+
rb_define_const(mGLib, "MINFLOAT", INT2FIX(G_MINFLOAT));
|
234
|
+
rb_define_const(mGLib, "MAXFLOAT", DBL2NUM(G_MAXFLOAT));
|
235
|
+
|
236
|
+
rb_define_const(mGLib, "MINDOUBLE", INT2FIX(G_MINDOUBLE));
|
237
|
+
rb_define_const(mGLib, "MAXDOUBLE", DBL2NUM(G_MAXDOUBLE));
|
238
|
+
|
239
|
+
/* Standard Macros */
|
240
|
+
rb_define_module_function(mGLib, "os_win32?", rbg_s_os_win32, 0);
|
241
|
+
rb_define_module_function(mGLib, "os_beos?", rbg_s_os_beos, 0);
|
242
|
+
rb_define_module_function(mGLib, "os_unix?", rbg_s_os_unix, 0);
|
243
|
+
|
244
|
+
rb_define_const(mGLib, "DIR_SEPARATOR", CSTR2RVAL(G_DIR_SEPARATOR_S));
|
245
|
+
rb_define_const(mGLib, "SEARCHPATH_SEPARATOR", CSTR2RVAL(G_SEARCHPATH_SEPARATOR_S));
|
246
|
+
|
247
|
+
/* Don't implement them.
|
248
|
+
#define G_DIR_SEPARATOR_S
|
249
|
+
#define G_IS_DIR_SEPARATOR (c)
|
250
|
+
#define G_SEARCHPATH_SEPARATOR
|
251
|
+
#define TRUE
|
252
|
+
#define FALSE
|
253
|
+
#define NULL
|
254
|
+
#define MIN (a, b)
|
255
|
+
#define MAX (a, b)
|
256
|
+
#define ABS (a)
|
257
|
+
#define CLAMP (x, low, high)
|
258
|
+
#define G_STRUCT_MEMBER (member_type, struct_p, struct_offset)
|
259
|
+
#define G_STRUCT_MEMBER_P (struct_p, struct_offset)
|
260
|
+
#define G_STRUCT_OFFSET (struct_type, member)
|
261
|
+
#define G_MEM_ALIGN
|
262
|
+
#define G_CONST_RETURN
|
263
|
+
*/
|
264
|
+
|
265
|
+
/* Numerical Definitions */
|
266
|
+
/* Don't implement them.
|
267
|
+
#define G_IEEE754_FLOAT_BIAS
|
268
|
+
#define G_IEEE754_DOUBLE_BIAS
|
269
|
+
union GFloatIEEE754;
|
270
|
+
union GDoubleIEEE754;
|
271
|
+
*/
|
272
|
+
rb_define_const(mGLib, "E", CSTR2RVAL(G_STRINGIFY(G_E)));
|
273
|
+
rb_define_const(mGLib, "LN2", CSTR2RVAL(G_STRINGIFY(G_LN2)));
|
274
|
+
rb_define_const(mGLib, "LN10", CSTR2RVAL(G_STRINGIFY(G_LN10)));
|
275
|
+
rb_define_const(mGLib, "PI", CSTR2RVAL(G_STRINGIFY(G_PI)));
|
276
|
+
rb_define_const(mGLib, "PI_2", CSTR2RVAL(G_STRINGIFY(G_PI_2)));
|
277
|
+
rb_define_const(mGLib, "PI_4", CSTR2RVAL(G_STRINGIFY(G_PI_4)));
|
278
|
+
rb_define_const(mGLib, "SQRT2", CSTR2RVAL(G_STRINGIFY(G_SQRT2)));
|
279
|
+
rb_define_const(mGLib, "LOG_2_BASE_10", CSTR2RVAL(G_STRINGIFY(G_LOG_2_BASE_10)));
|
280
|
+
|
281
|
+
/* From "The Main Event Loop" */
|
282
|
+
rb_define_const(mGLib, "PRIORITY_HIGH", INT2FIX(G_PRIORITY_HIGH));
|
283
|
+
rb_define_const(mGLib, "PRIORITY_DEFAULT", INT2FIX(G_PRIORITY_DEFAULT));
|
284
|
+
rb_define_const(mGLib, "PRIORITY_HIGH_IDLE", INT2FIX(G_PRIORITY_HIGH_IDLE));
|
285
|
+
rb_define_const(mGLib, "PRIORITY_DEFAULT_IDLE", INT2FIX(G_PRIORITY_DEFAULT_IDLE));
|
286
|
+
rb_define_const(mGLib, "PRIORITY_LOW", INT2FIX(G_PRIORITY_LOW));
|
287
|
+
|
288
|
+
|
289
|
+
/* Init_mem(); */
|
290
|
+
Init_gutil();
|
291
|
+
Init_gutil_callback();
|
292
|
+
Init_glib_int64();
|
293
|
+
Init_glib_error();
|
294
|
+
Init_glib_threads();
|
295
|
+
Init_glib_convert();
|
296
|
+
Init_glib_messages();
|
297
|
+
Init_glib_fileutils();
|
298
|
+
Init_glib_i18n();
|
299
|
+
Init_glib_win32();
|
300
|
+
|
301
|
+
Init_gobject();
|
302
|
+
|
303
|
+
/* Require GBoxed/GObject */
|
304
|
+
Init_glib_utils();
|
305
|
+
Init_glib_spawn();
|
306
|
+
Init_glib_main_loop();
|
307
|
+
Init_glib_source();
|
308
|
+
Init_glib_main_context();
|
309
|
+
Init_glib_poll_fd();
|
310
|
+
Init_glib_io_channel();
|
311
|
+
Init_glib_shell();
|
312
|
+
Init_glib_completion();
|
313
|
+
Init_glib_timer();
|
314
|
+
Init_glib_unicode();
|
315
|
+
Init_glib_keyfile();
|
316
|
+
Init_glib_bookmark_file();
|
317
|
+
|
318
|
+
/* This is called here once. */
|
319
|
+
G_DEF_SETTERS(mGLib);
|
320
|
+
}
|
data/src/rbglib.h
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
|
+
/**********************************************************************
|
3
|
+
|
4
|
+
rbglib.h -
|
5
|
+
|
6
|
+
$Author: sakai $
|
7
|
+
$Date: 2007/07/04 13:13:20 $
|
8
|
+
|
9
|
+
Copyright (C) 2002-2005 Ruby-GNOME2 Project
|
10
|
+
Copyright (C) 2002,2003 Masahiro Sakai
|
11
|
+
|
12
|
+
**********************************************************************/
|
13
|
+
|
14
|
+
#include <glib.h>
|
15
|
+
#include "ruby.h"
|
16
|
+
|
17
|
+
#ifndef __RBGLIB_H__
|
18
|
+
#define __RBGLIB_H__
|
19
|
+
|
20
|
+
#ifdef __cplusplus
|
21
|
+
extern "C" {
|
22
|
+
#endif /* __cplusplus */
|
23
|
+
|
24
|
+
#define RBGLIB_MAJOR_VERSION 0
|
25
|
+
#define RBGLIB_MINOR_VERSION 20
|
26
|
+
#define RBGLIB_MICRO_VERSION 0
|
27
|
+
|
28
|
+
#ifndef RSTRING_PTR
|
29
|
+
# define RSTRING_PTR(s) (RSTRING(s)->ptr)
|
30
|
+
# define RSTRING_LEN(s) (RSTRING(s)->len)
|
31
|
+
#endif
|
32
|
+
|
33
|
+
#ifndef RARRAY_PTR
|
34
|
+
# define RARRAY_PTR(s) (RARRAY(s)->ptr)
|
35
|
+
# define RARRAY_LEN(s) (RARRAY(s)->len)
|
36
|
+
#endif
|
37
|
+
|
38
|
+
#ifndef DBL2NUM
|
39
|
+
# define DBL2NUM(v) (rb_float_new(v))
|
40
|
+
#endif
|
41
|
+
|
42
|
+
#if ! GLIB_CHECK_VERSION(2,4,0)
|
43
|
+
typedef int GPid;
|
44
|
+
#endif
|
45
|
+
|
46
|
+
#define RBG_INSPECT(object) (rbg_rval_inspect(object))
|
47
|
+
|
48
|
+
#define RVAL2CSTR(v) (StringValuePtr(v))
|
49
|
+
#define RVAL2CSTR_ACCEPT_NIL(v) (rbg_rval2cstr_accept_nil(v))
|
50
|
+
#define RVAL2CSTR2(v) (RVAL2CSTR_ACCEPT_NIL(v))
|
51
|
+
#define CSTR2RVAL(s) (rbg_cstr2rval(s))
|
52
|
+
#define CSTR2RVAL_FREE(s) (rbg_cstr2rval_with_free(s))
|
53
|
+
#define CSTR2RVAL2(s) (CSTR2RVAL_FREE(s))
|
54
|
+
|
55
|
+
#define CBOOL2RVAL(b) ((b) ? Qtrue : Qfalse)
|
56
|
+
#define RVAL2CBOOL(b) (RTEST(b))
|
57
|
+
#define GERROR2RVAL(error) (rbgerr_gerror2exception(error))
|
58
|
+
#define RAISE_GERROR(error) rb_exc_raise(GERROR2RVAL(error))
|
59
|
+
#define G_DEF_ERROR(domain, name, module, parent, gtype) \
|
60
|
+
rbgerr_define_gerror(domain, name, module, parent, gtype)
|
61
|
+
#define G_DEF_ERROR2(domain, name, module, parent) \
|
62
|
+
rbgerr_define_gerror(domain, name, module, parent, Qnil)
|
63
|
+
|
64
|
+
#if defined(G_PLATFORM_WIN32) && !defined(RUBY_GLIB2_STATIC_COMPILATION)
|
65
|
+
# ifdef RUBY_GLIB2_COMPILATION
|
66
|
+
# define RUBY_GLIB2_VAR __declspec(dllexport)
|
67
|
+
# else
|
68
|
+
# define RUBY_GLIB2_VAR extern __declspec(dllimport)
|
69
|
+
# endif
|
70
|
+
#else
|
71
|
+
# define RUBY_GLIB2_VAR extern
|
72
|
+
#endif
|
73
|
+
|
74
|
+
RUBY_GLIB2_VAR VALUE mGLib;
|
75
|
+
|
76
|
+
extern const gchar *rbg_rval_inspect(VALUE object);
|
77
|
+
|
78
|
+
extern gchar* rbg_string_value_ptr(volatile VALUE* ptr); /* no longer used */
|
79
|
+
extern gchar *rbg_rval2cstr_accept_nil(VALUE str);
|
80
|
+
extern VALUE rbg_cstr2rval(const char* str);
|
81
|
+
extern VALUE rbg_cstr2rval_with_free(gchar* str);
|
82
|
+
|
83
|
+
/* rbgerror.h */
|
84
|
+
extern VALUE rbgerr_gerror2exception(GError *error);
|
85
|
+
extern VALUE rbgerr_define_gerror(GQuark domain, const gchar* name, VALUE module, VALUE parent, VALUE gtype);
|
86
|
+
|
87
|
+
extern VALUE rbglib_int64_to_num(guint64 val);
|
88
|
+
extern VALUE rbglib_uint64_to_num(guint64 val);
|
89
|
+
extern gint64 rbglib_num_to_int64(VALUE val);
|
90
|
+
extern guint64 rbglib_num_to_uint64(VALUE val);
|
91
|
+
|
92
|
+
#ifdef __cplusplus
|
93
|
+
}
|
94
|
+
#endif /* __cplusplus */
|
95
|
+
|
96
|
+
#endif /* __RBGLIB_H__ */
|
@@ -0,0 +1,595 @@
|
|
1
|
+
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
|
+
/************************************************
|
3
|
+
|
4
|
+
rbglib_bookmarkfile.c -
|
5
|
+
|
6
|
+
$Author: sakai $
|
7
|
+
$Date: 2007/07/07 08:25:33 $
|
8
|
+
|
9
|
+
Copyright (C) 2006 Masao Mutoh
|
10
|
+
************************************************/
|
11
|
+
|
12
|
+
#include "rbgprivate.h"
|
13
|
+
|
14
|
+
#if GLIB_CHECK_VERSION(2,12,0)
|
15
|
+
/************************************************/
|
16
|
+
static GBookmarkFile*
|
17
|
+
bookmarkfile_copy(const GBookmarkFile* file)
|
18
|
+
{
|
19
|
+
/*
|
20
|
+
GBookmarkFile* new_file;
|
21
|
+
g_return_val_if_fail (file != NULL, NULL);
|
22
|
+
new_file = g_key_file_new();
|
23
|
+
*new_file = (GBookmarkFile*)*file;
|
24
|
+
return new_file;
|
25
|
+
*/
|
26
|
+
return (GBookmarkFile*)file;
|
27
|
+
}
|
28
|
+
|
29
|
+
|
30
|
+
GType
|
31
|
+
g_bookmark_file_get_type(void)
|
32
|
+
{
|
33
|
+
static GType our_type = 0;
|
34
|
+
if (our_type == 0)
|
35
|
+
our_type = g_boxed_type_register_static("GBookmarkFile",
|
36
|
+
(GBoxedCopyFunc)bookmarkfile_copy,
|
37
|
+
(GBoxedFreeFunc)g_bookmark_file_free);
|
38
|
+
return our_type;
|
39
|
+
}
|
40
|
+
/************************************************/
|
41
|
+
|
42
|
+
#define G_TYPE_BOOKMARK_FILE (g_bookmark_file_get_type())
|
43
|
+
#define _SELF(self) ((GBookmarkFile*)(RVAL2BOXED(self, G_TYPE_BOOKMARK_FILE)))
|
44
|
+
|
45
|
+
static VALUE
|
46
|
+
bf_initialize(self)
|
47
|
+
VALUE self;
|
48
|
+
{
|
49
|
+
G_INITIALIZE(self, g_bookmark_file_new());
|
50
|
+
return Qnil;
|
51
|
+
}
|
52
|
+
|
53
|
+
static VALUE
|
54
|
+
bf_load_from_file(self, filename)
|
55
|
+
VALUE self, filename;
|
56
|
+
{
|
57
|
+
GError* error = NULL;
|
58
|
+
gboolean ret = g_bookmark_file_load_from_file(_SELF(self),
|
59
|
+
(const gchar*)RVAL2CSTR(filename),
|
60
|
+
&error);
|
61
|
+
if (!ret) RAISE_GERROR(error);
|
62
|
+
return self;
|
63
|
+
}
|
64
|
+
|
65
|
+
static VALUE
|
66
|
+
bf_load_from_data(VALUE self, VALUE data)
|
67
|
+
{
|
68
|
+
GError *error = NULL;
|
69
|
+
|
70
|
+
StringValue(data);
|
71
|
+
if (!g_bookmark_file_load_from_data(_SELF(self),
|
72
|
+
RSTRING_PTR(data),
|
73
|
+
RSTRING_LEN(data),
|
74
|
+
&error))
|
75
|
+
RAISE_GERROR(error);
|
76
|
+
|
77
|
+
return Qnil;
|
78
|
+
}
|
79
|
+
|
80
|
+
static VALUE
|
81
|
+
bf_load_from_data_dirs(self, file)
|
82
|
+
VALUE self, file;
|
83
|
+
{
|
84
|
+
GError* error = NULL;
|
85
|
+
gboolean ret;
|
86
|
+
gchar* full_path;
|
87
|
+
|
88
|
+
ret = g_bookmark_file_load_from_data_dirs(_SELF(self),
|
89
|
+
(const gchar*)RVAL2CSTR(file),
|
90
|
+
&full_path, &error);
|
91
|
+
|
92
|
+
if (! ret) RAISE_GERROR(error);
|
93
|
+
|
94
|
+
return full_path ? CSTR2RVAL(full_path) : Qnil;
|
95
|
+
}
|
96
|
+
|
97
|
+
static VALUE
|
98
|
+
bf_to_data(self)
|
99
|
+
VALUE self;
|
100
|
+
{
|
101
|
+
VALUE ret;
|
102
|
+
gsize len;
|
103
|
+
GError* error = NULL;
|
104
|
+
gchar* data = g_bookmark_file_to_data(_SELF(self), &len, &error);
|
105
|
+
|
106
|
+
if (error) RAISE_GERROR(error);
|
107
|
+
|
108
|
+
ret = rb_str_new(data, len);
|
109
|
+
g_free(data);
|
110
|
+
|
111
|
+
return ret;
|
112
|
+
}
|
113
|
+
|
114
|
+
static VALUE
|
115
|
+
bf_to_file(self, filename)
|
116
|
+
VALUE self, filename;
|
117
|
+
{
|
118
|
+
GError* error = NULL;
|
119
|
+
gboolean ret = g_bookmark_file_to_file(_SELF(self),
|
120
|
+
(const gchar *)RVAL2CSTR(filename),
|
121
|
+
&error);
|
122
|
+
if (!ret) RAISE_GERROR(error);
|
123
|
+
return self;
|
124
|
+
}
|
125
|
+
|
126
|
+
static VALUE
|
127
|
+
bf_has_item(self, uri)
|
128
|
+
VALUE self, uri;
|
129
|
+
{
|
130
|
+
return CBOOL2RVAL(g_bookmark_file_has_item(_SELF(self),
|
131
|
+
(const gchar *)RVAL2CSTR(uri)));
|
132
|
+
}
|
133
|
+
|
134
|
+
static VALUE
|
135
|
+
bf_has_group(self, uri, group)
|
136
|
+
VALUE self, uri, group;
|
137
|
+
{
|
138
|
+
GError* error = NULL;
|
139
|
+
return CBOOL2RVAL(g_bookmark_file_has_group(_SELF(self),
|
140
|
+
(const gchar *)RVAL2CSTR(uri),
|
141
|
+
(const gchar *)RVAL2CSTR(group),
|
142
|
+
&error));
|
143
|
+
}
|
144
|
+
|
145
|
+
static VALUE
|
146
|
+
bf_has_application(self, uri, name)
|
147
|
+
VALUE self, uri, name;
|
148
|
+
{
|
149
|
+
GError* error = NULL;
|
150
|
+
return CBOOL2RVAL(g_bookmark_file_has_application(_SELF(self),
|
151
|
+
(const gchar *)RVAL2CSTR(uri),
|
152
|
+
(const gchar *)RVAL2CSTR(name),
|
153
|
+
&error));
|
154
|
+
}
|
155
|
+
|
156
|
+
static VALUE
|
157
|
+
bf_get_size(self)
|
158
|
+
VALUE self;
|
159
|
+
{
|
160
|
+
return INT2NUM(g_bookmark_file_get_size(_SELF(self)));
|
161
|
+
}
|
162
|
+
|
163
|
+
static VALUE
|
164
|
+
bf_get_uris(self)
|
165
|
+
VALUE self;
|
166
|
+
{
|
167
|
+
int i;
|
168
|
+
gsize len;
|
169
|
+
VALUE ary = rb_ary_new();
|
170
|
+
gchar** ret = g_bookmark_file_get_uris(_SELF(self), &len);
|
171
|
+
|
172
|
+
for (i = 0; i < len; i++){
|
173
|
+
rb_ary_push(ary, CSTR2RVAL(ret[i]));
|
174
|
+
}
|
175
|
+
|
176
|
+
g_strfreev(ret);
|
177
|
+
|
178
|
+
return ary;
|
179
|
+
}
|
180
|
+
|
181
|
+
static VALUE
|
182
|
+
bf_get_title(self, uri)
|
183
|
+
VALUE self, uri;
|
184
|
+
{
|
185
|
+
GError *error = NULL;
|
186
|
+
gchar* ret = g_bookmark_file_get_title(_SELF(self),
|
187
|
+
(const gchar *)RVAL2CSTR(uri),
|
188
|
+
&error);
|
189
|
+
if (error) RAISE_GERROR(error);
|
190
|
+
return CSTR2RVAL2(ret);
|
191
|
+
}
|
192
|
+
|
193
|
+
static VALUE
|
194
|
+
bf_get_description(self, uri)
|
195
|
+
VALUE self, uri;
|
196
|
+
{
|
197
|
+
GError *error = NULL;
|
198
|
+
gchar* ret = g_bookmark_file_get_description(_SELF(self),
|
199
|
+
(const gchar *)RVAL2CSTR(uri),
|
200
|
+
&error);
|
201
|
+
if (error) RAISE_GERROR(error);
|
202
|
+
return CSTR2RVAL2(ret);
|
203
|
+
}
|
204
|
+
|
205
|
+
static VALUE
|
206
|
+
bf_get_mime_type(self, uri)
|
207
|
+
VALUE self, uri;
|
208
|
+
{
|
209
|
+
GError *error = NULL;
|
210
|
+
gchar* ret = g_bookmark_file_get_mime_type(_SELF(self),
|
211
|
+
(const gchar *)RVAL2CSTR(uri),
|
212
|
+
&error);
|
213
|
+
if (error) RAISE_GERROR(error);
|
214
|
+
return CSTR2RVAL2(ret);
|
215
|
+
}
|
216
|
+
|
217
|
+
static VALUE
|
218
|
+
bf_get_is_private(self, uri)
|
219
|
+
VALUE self, uri;
|
220
|
+
{
|
221
|
+
GError *error = NULL;
|
222
|
+
gboolean ret = g_bookmark_file_get_is_private(_SELF(self),
|
223
|
+
(const gchar *)RVAL2CSTR(uri),
|
224
|
+
&error);
|
225
|
+
if (error) RAISE_GERROR(error);
|
226
|
+
return CBOOL2RVAL(ret);
|
227
|
+
}
|
228
|
+
|
229
|
+
static VALUE
|
230
|
+
bf_get_icon(self, uri)
|
231
|
+
VALUE self, uri;
|
232
|
+
{
|
233
|
+
gchar* href;
|
234
|
+
gchar* mime_type;
|
235
|
+
GError *error = NULL;
|
236
|
+
gboolean ret = g_bookmark_file_get_icon(_SELF(self),
|
237
|
+
(const gchar *)RVAL2CSTR(uri),
|
238
|
+
&href, &mime_type,
|
239
|
+
&error);
|
240
|
+
if (!ret){
|
241
|
+
if (error) RAISE_GERROR(error);
|
242
|
+
return Qnil;
|
243
|
+
}
|
244
|
+
return rb_assoc_new(CSTR2RVAL2(href), CSTR2RVAL2(mime_type));
|
245
|
+
}
|
246
|
+
|
247
|
+
static VALUE
|
248
|
+
bf_get_added(self, uri)
|
249
|
+
VALUE self, uri;
|
250
|
+
{
|
251
|
+
GError *error = NULL;
|
252
|
+
time_t ret = g_bookmark_file_get_added(_SELF(self),
|
253
|
+
(const gchar *)RVAL2CSTR(uri),
|
254
|
+
&error);
|
255
|
+
if (!ret) RAISE_GERROR(error);
|
256
|
+
|
257
|
+
return rb_time_new(ret, 0);
|
258
|
+
}
|
259
|
+
|
260
|
+
static VALUE
|
261
|
+
bf_get_modified(self, uri)
|
262
|
+
VALUE self, uri;
|
263
|
+
{
|
264
|
+
GError *error = NULL;
|
265
|
+
time_t ret = g_bookmark_file_get_modified(_SELF(self),
|
266
|
+
(const gchar *)RVAL2CSTR(uri),
|
267
|
+
&error);
|
268
|
+
if (!ret) RAISE_GERROR(error);
|
269
|
+
|
270
|
+
return rb_time_new(ret, 0);
|
271
|
+
}
|
272
|
+
|
273
|
+
static VALUE
|
274
|
+
bf_get_visited(self, uri)
|
275
|
+
VALUE self, uri;
|
276
|
+
{
|
277
|
+
GError *error = NULL;
|
278
|
+
time_t ret = g_bookmark_file_get_visited(_SELF(self),
|
279
|
+
(const gchar *)RVAL2CSTR(uri),
|
280
|
+
&error);
|
281
|
+
if (!ret) RAISE_GERROR(error);
|
282
|
+
|
283
|
+
return rb_time_new(ret, 0);
|
284
|
+
}
|
285
|
+
|
286
|
+
static VALUE
|
287
|
+
bf_get_groups(self, uri)
|
288
|
+
VALUE self, uri;
|
289
|
+
{
|
290
|
+
gsize length;
|
291
|
+
VALUE ary;
|
292
|
+
gint i;
|
293
|
+
GError* error = NULL;
|
294
|
+
gchar** ret = g_bookmark_file_get_groups(_SELF(self),
|
295
|
+
(const gchar *)RVAL2CSTR(uri),
|
296
|
+
&length, &error);
|
297
|
+
if (error) RAISE_GERROR(error);
|
298
|
+
|
299
|
+
|
300
|
+
ary = rb_ary_new();
|
301
|
+
for(i = 0; i < length; i++){
|
302
|
+
rb_ary_push(ary, CSTR2RVAL(ret[i]));
|
303
|
+
}
|
304
|
+
|
305
|
+
g_strfreev(ret);
|
306
|
+
return ary;
|
307
|
+
}
|
308
|
+
|
309
|
+
static VALUE
|
310
|
+
bf_get_applications(self, uri)
|
311
|
+
VALUE self, uri;
|
312
|
+
{
|
313
|
+
gsize length;
|
314
|
+
VALUE ary;
|
315
|
+
gint i;
|
316
|
+
GError* error = NULL;
|
317
|
+
gchar** ret = g_bookmark_file_get_applications(_SELF(self),
|
318
|
+
(const gchar *)RVAL2CSTR(uri),
|
319
|
+
&length, &error);
|
320
|
+
if (error) RAISE_GERROR(error);
|
321
|
+
|
322
|
+
|
323
|
+
ary = rb_ary_new();
|
324
|
+
for(i = 0; i < length; i++){
|
325
|
+
rb_ary_push(ary, CSTR2RVAL(ret[i]));
|
326
|
+
}
|
327
|
+
|
328
|
+
g_strfreev(ret);
|
329
|
+
return ary;
|
330
|
+
}
|
331
|
+
|
332
|
+
static VALUE
|
333
|
+
bf_get_app_info(self, uri, name)
|
334
|
+
VALUE self, uri, name;
|
335
|
+
{
|
336
|
+
gchar* exec;
|
337
|
+
guint count;
|
338
|
+
time_t stamp;
|
339
|
+
GError* error = NULL;
|
340
|
+
|
341
|
+
gboolean ret = g_bookmark_file_get_app_info(_SELF(self),
|
342
|
+
(const gchar *)RVAL2CSTR(uri),
|
343
|
+
(const gchar *)RVAL2CSTR(name),
|
344
|
+
&exec, &count, &stamp, &error);
|
345
|
+
if (!ret) RAISE_GERROR(error);
|
346
|
+
|
347
|
+
return rb_ary_new3(3, CSTR2RVAL(exec), UINT2NUM(count), rb_time_new(stamp, 0));
|
348
|
+
}
|
349
|
+
|
350
|
+
static VALUE
|
351
|
+
bf_set_title(self, uri, title)
|
352
|
+
VALUE self, uri, title;
|
353
|
+
{
|
354
|
+
g_bookmark_file_set_title(_SELF(self),
|
355
|
+
(const gchar *)RVAL2CSTR(uri),
|
356
|
+
(const gchar *)RVAL2CSTR(title));
|
357
|
+
return self;
|
358
|
+
}
|
359
|
+
|
360
|
+
static VALUE
|
361
|
+
bf_set_description(self, uri, description)
|
362
|
+
VALUE self, uri, description;
|
363
|
+
{
|
364
|
+
g_bookmark_file_set_description(_SELF(self),
|
365
|
+
(const gchar *)RVAL2CSTR(uri),
|
366
|
+
(const gchar *)RVAL2CSTR(description));
|
367
|
+
return self;
|
368
|
+
}
|
369
|
+
|
370
|
+
static VALUE
|
371
|
+
bf_set_mime_type(self, uri, mime_type)
|
372
|
+
VALUE self, uri, mime_type;
|
373
|
+
{
|
374
|
+
g_bookmark_file_set_mime_type(_SELF(self),
|
375
|
+
(const gchar *)RVAL2CSTR(uri),
|
376
|
+
(const gchar *)RVAL2CSTR(mime_type));
|
377
|
+
return self;
|
378
|
+
}
|
379
|
+
|
380
|
+
static VALUE
|
381
|
+
bf_set_is_private(self, uri, is_private)
|
382
|
+
VALUE self, uri, is_private;
|
383
|
+
{
|
384
|
+
g_bookmark_file_set_is_private(_SELF(self),
|
385
|
+
(const gchar *)RVAL2CSTR(uri),
|
386
|
+
RVAL2CBOOL(is_private));
|
387
|
+
return self;
|
388
|
+
}
|
389
|
+
|
390
|
+
static VALUE
|
391
|
+
bf_set_icon(self, uri, href, mime_type)
|
392
|
+
VALUE self, uri, href, mime_type;
|
393
|
+
{
|
394
|
+
g_bookmark_file_set_icon(_SELF(self),
|
395
|
+
(const gchar *)RVAL2CSTR(uri),
|
396
|
+
(const gchar *)RVAL2CSTR(href),
|
397
|
+
(const gchar *)RVAL2CSTR(mime_type));
|
398
|
+
return self;
|
399
|
+
}
|
400
|
+
|
401
|
+
static VALUE
|
402
|
+
bf_set_added(self, uri, time)
|
403
|
+
VALUE self, uri, time;
|
404
|
+
{
|
405
|
+
g_bookmark_file_set_added(_SELF(self),
|
406
|
+
(const gchar *)RVAL2CSTR(uri),
|
407
|
+
(time_t)NUM2LONG(rb_Integer(time)));
|
408
|
+
return self;
|
409
|
+
}
|
410
|
+
|
411
|
+
static VALUE
|
412
|
+
bf_set_groups(self, uri, groups)
|
413
|
+
VALUE self, uri, groups;
|
414
|
+
{
|
415
|
+
gint len = RARRAY_LEN(groups);
|
416
|
+
gchar** glist = ALLOCA_N(gchar*, len);
|
417
|
+
gint i;
|
418
|
+
|
419
|
+
for (i = 0; i < len; i++){
|
420
|
+
glist[i] = RVAL2CSTR(RARRAY_PTR(groups)[i]);
|
421
|
+
}
|
422
|
+
|
423
|
+
g_bookmark_file_set_groups(_SELF(self),
|
424
|
+
(const gchar *)RVAL2CSTR(uri),
|
425
|
+
(const gchar **)glist, len);
|
426
|
+
return self;
|
427
|
+
}
|
428
|
+
|
429
|
+
static VALUE
|
430
|
+
bf_set_modified(self, uri, time)
|
431
|
+
VALUE self, uri, time;
|
432
|
+
{
|
433
|
+
g_bookmark_file_set_modified(_SELF(self),
|
434
|
+
(const gchar *)RVAL2CSTR(uri),
|
435
|
+
(time_t)NUM2LONG(rb_Integer(time)));
|
436
|
+
return self;
|
437
|
+
}
|
438
|
+
|
439
|
+
static VALUE
|
440
|
+
bf_set_visited(self, uri, time)
|
441
|
+
VALUE self, uri, time;
|
442
|
+
{
|
443
|
+
g_bookmark_file_set_visited(_SELF(self),
|
444
|
+
(const gchar *)RVAL2CSTR(uri),
|
445
|
+
(time_t)NUM2LONG(rb_Integer(time)));
|
446
|
+
return self;
|
447
|
+
}
|
448
|
+
|
449
|
+
static VALUE
|
450
|
+
bf_set_app_info(self, uri, name, exec, count, stamp)
|
451
|
+
VALUE self,uri, name, exec, count, stamp;
|
452
|
+
{
|
453
|
+
GError* error = NULL;
|
454
|
+
gboolean ret = g_bookmark_file_set_app_info(_SELF(self),
|
455
|
+
(const gchar *)RVAL2CSTR(uri),
|
456
|
+
(const gchar *)RVAL2CSTR(name),
|
457
|
+
(const gchar *)RVAL2CSTR(exec),
|
458
|
+
NUM2INT(count),
|
459
|
+
(time_t)NUM2LONG(rb_Integer(stamp)),
|
460
|
+
&error);
|
461
|
+
|
462
|
+
if (! ret) RAISE_GERROR(error);
|
463
|
+
|
464
|
+
return self;
|
465
|
+
}
|
466
|
+
|
467
|
+
static VALUE
|
468
|
+
bf_add_group(self, uri, group)
|
469
|
+
VALUE self, uri, group;
|
470
|
+
{
|
471
|
+
g_bookmark_file_add_group(_SELF(self),
|
472
|
+
(const gchar *)RVAL2CSTR(uri),
|
473
|
+
(const gchar *)RVAL2CSTR(group));
|
474
|
+
return self;
|
475
|
+
}
|
476
|
+
|
477
|
+
static VALUE
|
478
|
+
bf_add_application(self, uri, name, exec)
|
479
|
+
VALUE self, uri, name, exec;
|
480
|
+
{
|
481
|
+
g_bookmark_file_add_application(_SELF(self),
|
482
|
+
(const gchar *)RVAL2CSTR(uri),
|
483
|
+
(const gchar *)RVAL2CSTR(name),
|
484
|
+
(const gchar *)RVAL2CSTR(exec));
|
485
|
+
return self;
|
486
|
+
}
|
487
|
+
|
488
|
+
static VALUE
|
489
|
+
bf_remove_group(self, uri, group)
|
490
|
+
VALUE self, uri, group;
|
491
|
+
{
|
492
|
+
GError* error = NULL;
|
493
|
+
gboolean ret = g_bookmark_file_remove_group(_SELF(self),
|
494
|
+
(const gchar *)RVAL2CSTR(uri),
|
495
|
+
(const gchar *)RVAL2CSTR(group),
|
496
|
+
&error);
|
497
|
+
if (! ret) RAISE_GERROR(error);
|
498
|
+
|
499
|
+
return self;
|
500
|
+
}
|
501
|
+
|
502
|
+
static VALUE
|
503
|
+
bf_remove_application(self, uri, name)
|
504
|
+
VALUE self, uri, name;
|
505
|
+
{
|
506
|
+
GError *error = NULL;
|
507
|
+
gboolean ret = g_bookmark_file_remove_application(_SELF(self),
|
508
|
+
(const gchar *)RVAL2CSTR(uri),
|
509
|
+
(const gchar *)RVAL2CSTR(name),
|
510
|
+
&error);
|
511
|
+
if (! ret) RAISE_GERROR(error);
|
512
|
+
|
513
|
+
return self;
|
514
|
+
}
|
515
|
+
|
516
|
+
|
517
|
+
static VALUE
|
518
|
+
bf_remove_item(self, uri)
|
519
|
+
VALUE self, uri;
|
520
|
+
{
|
521
|
+
GError *error = NULL;
|
522
|
+
gboolean ret = g_bookmark_file_remove_item(_SELF(self),
|
523
|
+
(const gchar *)RVAL2CSTR(uri),
|
524
|
+
&error);
|
525
|
+
if (! ret) RAISE_GERROR(error);
|
526
|
+
|
527
|
+
return self;
|
528
|
+
}
|
529
|
+
|
530
|
+
static VALUE
|
531
|
+
bf_move_item(self, old_uri, new_uri)
|
532
|
+
VALUE self, old_uri, new_uri;
|
533
|
+
{
|
534
|
+
GError *error = NULL;
|
535
|
+
gboolean ret = g_bookmark_file_move_item(_SELF(self),
|
536
|
+
(const gchar *)RVAL2CSTR(old_uri),
|
537
|
+
(const gchar *)RVAL2CSTR(new_uri),
|
538
|
+
&error);
|
539
|
+
if (! ret) RAISE_GERROR(error);
|
540
|
+
|
541
|
+
return self;
|
542
|
+
}
|
543
|
+
|
544
|
+
#endif
|
545
|
+
|
546
|
+
void
|
547
|
+
Init_glib_bookmark_file()
|
548
|
+
{
|
549
|
+
#if GLIB_CHECK_VERSION(2,12,0)
|
550
|
+
VALUE bf = G_DEF_CLASS(G_TYPE_BOOKMARK_FILE, "BookmarkFile", mGLib);
|
551
|
+
|
552
|
+
G_DEF_ERROR(G_BOOKMARK_FILE_ERROR, "BookmarkFileError", mGLib,
|
553
|
+
rb_eRuntimeError, G_TYPE_BOOKMARK_FILE_ERROR);
|
554
|
+
|
555
|
+
rb_define_method(bf, "initialize", bf_initialize, 0);
|
556
|
+
rb_define_method(bf, "load_from_file", bf_load_from_file, 1);
|
557
|
+
rb_define_method(bf, "load_from_data", bf_load_from_data, 1);
|
558
|
+
rb_define_method(bf, "load_from_data_dirs", bf_load_from_data_dirs, 1);
|
559
|
+
rb_define_method(bf, "to_data", bf_to_data, 0);
|
560
|
+
rb_define_method(bf, "to_file", bf_to_file, 1);
|
561
|
+
rb_define_method(bf, "has_item?", bf_has_item, 1);
|
562
|
+
rb_define_method(bf, "has_group?", bf_has_group, 2);
|
563
|
+
rb_define_method(bf, "has_application?", bf_has_application, 2);
|
564
|
+
rb_define_method(bf, "size", bf_get_size, 0);
|
565
|
+
rb_define_method(bf, "uris", bf_get_uris, 0);
|
566
|
+
rb_define_method(bf, "get_title", bf_get_title, 1);
|
567
|
+
rb_define_method(bf, "get_description", bf_get_description, 1);
|
568
|
+
rb_define_method(bf, "get_mime_type", bf_get_mime_type, 1);
|
569
|
+
rb_define_method(bf, "private?", bf_get_is_private, 1);
|
570
|
+
rb_define_method(bf, "get_icon", bf_get_icon, 1);
|
571
|
+
rb_define_method(bf, "get_added", bf_get_added, 1);
|
572
|
+
rb_define_method(bf, "get_modified", bf_get_modified, 1);
|
573
|
+
rb_define_method(bf, "get_visited", bf_get_visited, 1);
|
574
|
+
rb_define_method(bf, "get_groups", bf_get_groups, 1);
|
575
|
+
rb_define_method(bf, "get_applications", bf_get_applications, 1);
|
576
|
+
rb_define_method(bf, "get_app_info", bf_get_app_info, 2);
|
577
|
+
rb_define_method(bf, "set_title", bf_set_title, 2);
|
578
|
+
rb_define_method(bf, "set_description", bf_set_description, 2);
|
579
|
+
rb_define_method(bf, "set_mime_type", bf_set_mime_type, 2);
|
580
|
+
rb_define_method(bf, "set_private", bf_set_is_private, 2);
|
581
|
+
rb_define_method(bf, "set_icon", bf_set_icon, 3);
|
582
|
+
rb_define_method(bf, "set_added", bf_set_added, 2);
|
583
|
+
rb_define_method(bf, "set_groups", bf_set_groups, 2);
|
584
|
+
rb_define_method(bf, "set_modified", bf_set_modified, 2);
|
585
|
+
rb_define_method(bf, "set_visited", bf_set_visited, 2);
|
586
|
+
rb_define_method(bf, "set_app_info", bf_set_app_info, 5);
|
587
|
+
rb_define_method(bf, "add_group", bf_add_group, 2);
|
588
|
+
rb_define_method(bf, "add_application", bf_add_application, 3);
|
589
|
+
rb_define_method(bf, "remove_group", bf_remove_group, 2);
|
590
|
+
rb_define_method(bf, "remove_application", bf_remove_application, 2);
|
591
|
+
rb_define_method(bf, "remove_item", bf_remove_item, 1);
|
592
|
+
rb_define_method(bf, "move_item", bf_move_item, 2);
|
593
|
+
#endif
|
594
|
+
}
|
595
|
+
|