]> git.pld-linux.org Git - packages/ruby-gnome2.git/blame - ruby-gnome2-glibinterface.patch
- up to 0.12.0
[packages/ruby-gnome2.git] / ruby-gnome2-glibinterface.patch
CommitLineData
e04b3ea7 1Index: glib/extconf.rb
2===================================================================
3RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/glib/extconf.rb,v
4retrieving revision 1.18
5diff -u -r1.18 extconf.rb
6--- glib/extconf.rb 27 Aug 2003 17:48:05 -0000 1.18
7+++ glib/extconf.rb 16 Sep 2003 19:09:25 -0000
8@@ -18,6 +18,13 @@
9 Dir.chdir "src"
10 begin
11 $defs << "-DRUBY_GLIB2_COMPILATION"
12+ print "enabling experimental glib features... "
13+ if enable_config('glib-experimental')
14+ puts "yes"
15+ $defs << "-DRBGLIB_ENABLE_EXPERIMENTAL"
16+ else
17+ puts "no"
18+ end
19 create_makefile("glib2", srcdir)
20 ensure
21 Dir.chdir('..')
22Index: glib/src/rbgobj_object.c
23===================================================================
24RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/glib/src/rbgobj_object.c,v
25retrieving revision 1.52
26diff -u -r1.52 rbgobj_object.c
27--- glib/src/rbgobj_object.c 3 Sep 2003 07:11:02 -0000 1.52
28+++ glib/src/rbgobj_object.c 16 Sep 2003 19:09:29 -0000
29@@ -555,11 +555,42 @@
30 }
31 }
32
33+VALUE rbgobj_iface_dispatch(VALUE obj, ID func, VALUE args)
34+{
35+ volatile VALUE val = rb_funcall2(obj, func, RARRAY(args)->len, RARRAY(args)->ptr);
36+
37+ printf("Returning: ");
38+ rb_p(val);
39+ return val;
40+}
41+
42+static VALUE
43+register_implements_interface(int argc, VALUE* argv, VALUE self)
44+{
45+ VALUE interface;
46+ const RGObjClassInfo* cinfo = rbgobj_lookup_class(self);
47+ const RGObjClassInfo* iinfo;
48+
49+ if (cinfo->klass != self)
50+ rb_raise(rb_eTypeError, "not a registered GObjectClass");
51+
52+ rb_scan_args(argc, argv, "10", &interface);
53+
54+ iinfo = rbgobj_lookup_class(interface);
55+
56+ if (iinfo->table == NULL)
57+ rb_notimplement();
58+
59+ g_type_add_interface_static(cinfo->gtype, iinfo->gtype, iinfo->table);
60+ return Qnil;
61+}
62+
63 static void
64 Init_gobject_subclass()
65 {
66 VALUE cGObject = GTYPE2CLASS(G_TYPE_OBJECT);
67 rb_define_singleton_method(cGObject, "register_type", register_type, -1);
68+ rb_define_singleton_method(cGObject, "implements", register_implements_interface, -1);
69
70 rb_global_variable(&proc_mod_eval);
71 proc_mod_eval = rb_eval_string("lambda{|obj,proc| obj.module_eval(&proc)}");
72Index: glib/src/rbgobj_type.c
73===================================================================
74RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/glib/src/rbgobj_type.c,v
75retrieving revision 1.42
76diff -u -r1.42 rbgobj_type.c
77--- glib/src/rbgobj_type.c 20 Aug 2003 16:52:57 -0000 1.42
78+++ glib/src/rbgobj_type.c 16 Sep 2003 19:09:31 -0000
79@@ -77,10 +77,12 @@
80 rbgobj_lookup_class_by_gtype(gtype)
81 GType gtype;
82 {
83- RGObjClassInfo* cinfo;
84+ RGObjClassInfo* cinfo=NULL;
85 VALUE c = rb_hash_aref(gtype_to_cinfo, INT2NUM(gtype));
86
87- if (!NIL_P(c)){
88+ /*fprintf(stderr, "rbgobjlookup_pre; %p : 0%lx -> 0%lx\n", gtype_to_cinfo, gtype, c);
89+ fflush(0);*/
90+ if (!NIL_P(c) && (TYPE(c) == T_DATA)){
91 Data_Get_Struct(c, RGObjClassInfo, cinfo);
92 } else {
93 void* gclass = NULL;
94@@ -107,8 +109,7 @@
95
96 default:
97 /* we should raise exception? */
98- fprintf(stderr,
99- "%s: %s's fundamental type %s isn't supported\n",
100+ rb_warn("%s: %s's fundamental type %s isn't supported\n",
101 "rbgobj_lookup_class_by_gtype",
102 g_type_name(gtype),
103 g_type_name(G_TYPE_FUNDAMENTAL(gtype)));
104@@ -119,6 +120,7 @@
105 cinfo->mark = NULL;
106 cinfo->free = NULL;
107 cinfo->flags = 0;
108+ cinfo->table = NULL;
109
110 rb_hash_aset(klass_to_cinfo, cinfo->klass, c);
111 rb_hash_aset(gtype_to_cinfo, INT2NUM(gtype), c);
112@@ -704,10 +706,10 @@
113 id_new = rb_intern("new");
114 id_superclass = rb_intern("superclass");
115
116- rb_global_variable(&gtype_to_cinfo);
117- rb_global_variable(&klass_to_cinfo);
118 gtype_to_cinfo = rb_hash_new();
119 klass_to_cinfo = rb_hash_new();
120+ rb_global_variable(&gtype_to_cinfo);
121+ rb_global_variable(&klass_to_cinfo);
122
123 _register_fundamental_klass_to_gtype(rb_cFixnum, G_TYPE_LONG);
124 _register_fundamental_klass_to_gtype(rb_cFloat, G_TYPE_DOUBLE);
125Index: glib/src/rbgobject.c
126===================================================================
127RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/glib/src/rbgobject.c,v
128retrieving revision 1.33
129diff -u -r1.33 rbgobject.c
130--- glib/src/rbgobject.c 25 Aug 2003 01:50:30 -0000 1.33
131+++ glib/src/rbgobject.c 16 Sep 2003 19:09:32 -0000
132@@ -136,7 +136,7 @@
133 }
134 g_object_unref(holder->gobj);
135 }
136- free(holder);
137+ g_free(holder);
138 }
139
140 VALUE
141Index: glib/src/rbgobject.h
142===================================================================
143RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/glib/src/rbgobject.h,v
144retrieving revision 1.46
145diff -u -r1.46 rbgobject.h
146--- glib/src/rbgobject.h 3 Sep 2003 07:11:02 -0000 1.46
147+++ glib/src/rbgobject.h 16 Sep 2003 19:09:32 -0000
148@@ -83,6 +83,7 @@
149 void (*mark)(gpointer);
150 void (*free)(gpointer);
151 int flags; /* RGObjClassFlag */
152+ gpointer table; /* For interfaces */
153 } RGObjClassInfo;
154
155 /* rbgobject.c */
156@@ -147,6 +148,9 @@
157 /* rbgobj_object.c */
158 extern void rbgobj_register_property_setter(GType gtype, const char* prop_name, RValueToGValueFunc func);
159 extern void rbgobj_register_property_getter(GType gtype, const char* prop_name, GValueToRValueFunc func);
160+#ifdef RBGLIB_ENABLE_EXPERIMENTAL
161+extern VALUE rbgobj_iface_dispatch(VALUE obj, ID function, VALUE args);
162+#endif
163
164 /* rbgobj_boxed.c */
165 extern VALUE rbgobj_boxed_create(VALUE klass);
166Index: gtk/extconf.rb
167===================================================================
168RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/gtk/extconf.rb,v
169retrieving revision 1.43
170diff -u -r1.43 extconf.rb
171--- gtk/extconf.rb 30 Aug 2003 13:22:40 -0000 1.43
172+++ gtk/extconf.rb 16 Sep 2003 19:09:34 -0000
173@@ -63,6 +63,13 @@
174 #
175 # create Makefiles
176 #
177+print "enabling experimental glib features... "
178+if enable_config('glib-experimental')
179+ puts "yes"
180+ $defs << "-DRBGLIB_ENABLE_EXPERIMENTAL"
181+else
182+ puts "no"
183+end
184
185 begin
186 src_dir = File.expand_path(File.dirname(__FILE__) + '/src')
187Index: gtk/src/rbgdkatom.c
188===================================================================
189RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/gtk/src/rbgdkatom.c,v
190retrieving revision 1.8
191diff -u -r1.8 rbgdkatom.c
192--- gtk/src/rbgdkatom.c 17 Aug 2003 08:46:06 -0000 1.8
193+++ gtk/src/rbgdkatom.c 16 Sep 2003 19:09:34 -0000
194@@ -58,8 +58,14 @@
195
196 rb_scan_args(argc, argv, "11", &name, &exist);
197
198- return BOXED2RVAL(gdk_atom_intern(RVAL2CSTR(name), RTEST(exist)),
199+
200+ if (TYPE(name) == T_STRING)
201+ return BOXED2RVAL(gdk_atom_intern(RVAL2CSTR(name), RTEST(exist)),
202 GDK_TYPE_ATOM);
203+ else if (TYPE(name) == T_FIXNUM)
204+ return BOXED2RVAL((GdkAtom)FIX2INT(name), GDK_TYPE_ATOM);
205+ else
206+ rb_raise(rb_eTypeError, "Gdk::Atom.intern requires either a String or a Fixnum");
207 }
208
209 static VALUE
210@@ -76,6 +82,21 @@
211 }
212
213 static VALUE
214+gdkatom_to_i(self)
215+ VALUE self;
216+{
217+ return UINT2NUM(_SELF(self));
218+}
219+
220+
221+static VALUE
222+gdkatom_nil(self)
223+ VALUE self;
224+{
225+ return UINT2NUM(_SELF(self)) == 0 ? Qtrue : Qfalse;
226+}
227+
228+static VALUE
229 gdkatom_eq(self, other)
230 VALUE self, other;
231 {
232@@ -90,6 +111,8 @@
233 rb_define_singleton_method(gdkAtom, "intern", gdkatom_s_intern, -1);
234
235 rb_define_method(gdkAtom, "name", gdkatom_name, 0);
236+ rb_define_method(gdkAtom, "to_i", gdkatom_to_i, 0);
237+ rb_define_method(gdkAtom, "nil?", gdkatom_nil, 0);
238 rb_define_method(gdkAtom, "==", gdkatom_eq, 1);
239 rb_define_method(gdkAtom, "===", gdkatom_eq, 1);
240 rb_define_method(gdkAtom, "eql?", gdkatom_eq, 1);
241Index: gtk/src/rbgtk.h
242===================================================================
243RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/gtk/src/rbgtk.h,v
244retrieving revision 1.50
245diff -u -r1.50 rbgtk.h
246--- gtk/src/rbgtk.h 22 Jun 2003 17:37:51 -0000 1.50
247+++ gtk/src/rbgtk.h 16 Sep 2003 19:09:35 -0000
248@@ -18,6 +18,7 @@
249 #include "ruby.h"
250 #include "rubysig.h"
251 #include "rbgobject.h"
252+#include "rbgutil.h"
253 #include <gtk/gtk.h>
254
255 #include <signal.h>
256Index: gtk/src/rbgtkitemfactory.c
257===================================================================
258RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/gtk/src/rbgtkitemfactory.c,v
259retrieving revision 1.20
260diff -u -r1.20 rbgtkitemfactory.c
261--- gtk/src/rbgtkitemfactory.c 4 Jul 2003 18:34:04 -0000 1.20
262+++ gtk/src/rbgtkitemfactory.c 16 Sep 2003 19:09:36 -0000
263@@ -27,7 +27,7 @@
264 VALUE obj = rb_eval_string("eval('self', binding)");
265 G_RELATIVE(obj, self);
266 RBGTK_INITIALIZE(self, gtk_item_factory_new(FIX2INT(type), RVAL2CSTR(path),
267- RVAL2ACCEL(accel)));
268+ NIL_P(accel) ? NULL : RVAL2ACCEL(accel)));
269
270 return Qnil;
271 }
272Index: gtk/src/rbgtktextmark.c
273===================================================================
274RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/gtk/src/rbgtktextmark.c,v
275retrieving revision 1.6
276diff -u -r1.6 rbgtktextmark.c
277--- gtk/src/rbgtktextmark.c 19 Jan 2003 14:28:25 -0000 1.6
278+++ gtk/src/rbgtktextmark.c 16 Sep 2003 19:09:36 -0000
279@@ -30,7 +30,9 @@
280 get_name(self)
281 VALUE self;
282 {
283- return rb_str_new2(gtk_text_mark_get_name(GTK_TEXT_MARK(RVAL2GOBJ(self))));
284+ gchar *name;
285+ name = gtk_text_mark_get_name(GTK_TEXT_MARK(RVAL2GOBJ(self)));
286+ return name ? rb_str_new2(name) : Qnil;
287 }
288
289 static VALUE
290Index: gtk/src/rbgtktreeiter.c
291===================================================================
292RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/gtk/src/rbgtktreeiter.c,v
293retrieving revision 1.16
294diff -u -r1.16 rbgtktreeiter.c
295--- gtk/src/rbgtktreeiter.c 9 Sep 2003 15:17:22 -0000 1.16
296+++ gtk/src/rbgtktreeiter.c 16 Sep 2003 19:09:36 -0000
297@@ -201,11 +201,78 @@
298 return Qtrue;
299 }
300
301+#ifdef RBGLIB_ENABLE_EXPERIMENTAL
302+#define SIG ((gpointer)123456)
303+
304+static VALUE
305+treeiter_initialize(self,model)
306+ VALUE self,model;
307+{
308+ GtkTreeIter iter = { 0, NULL, NULL, NULL };
309+ iter.user_data3 = RVAL2GOBJ(model);
310+ G_INITIALIZE(self, &iter);
311+ return Qnil;
312+}
313+
314+static VALUE
315+treeiter_stamp(self)
316+ VALUE self;
317+{
318+ return LONG2NUM(_SELF(self)->stamp);
319+}
320+
321+static VALUE
322+treeiter_user_data(self)
323+ VALUE self;
324+{
325+ GtkTreeIter *iter = _SELF(self);
326+ /*if (iter->user_data2 == SIG)
327+ return (VALUE)(iter->user_data);
328+ else*/
329+ return LONG2NUM((long)iter->user_data);
330+}
331+
332+static VALUE
333+treeiter_set_stamp(self, val)
334+ VALUE self, val;
335+{
336+ _SELF(self)->stamp = NUM2LONG(val);
337+ return self;
338+}
339+
340+static VALUE
341+treeiter_set_user_data(self, val)
342+ VALUE self, val;
343+{
344+ GtkTreeIter *iter = _SELF(self);
345+ /*if (TYPE(val) == T_FIXNUM)
346+ {*/
347+ iter->user_data = (gpointer)NUM2LONG(val);
348+ /*iter->user_data2 = 0;
349+ }
350+ else
351+ {
352+ // Another reference *must* be kept elsewhere or this may be GC'd
353+ iter->user_data = (gpointer)val;
354+ iter->user_data2 = SIG;
355+ }*/
356+ return val;
357+}
358+#endif
359+
360 void
361 Init_gtk_treeiter()
362 {
363 VALUE gTreeIter = G_DEF_CLASS(GTK_TYPE_TREE_ITER, "TreeIter", mGtk);
364
365+#ifdef RBGLIB_ENABLE_EXPERIMENTAL
366+ rb_define_method(gTreeIter, "initialize", treeiter_initialize, 1);
367+ rb_define_method(gTreeIter, "stamp", treeiter_stamp, 0);
368+ rb_define_method(gTreeIter, "user_data", treeiter_user_data, 0);
369+ rb_define_method(gTreeIter, "stamp=", treeiter_set_stamp, 1);
370+ rb_define_method(gTreeIter, "user_data=", treeiter_set_user_data, 1);
371+#endif
372+
373 rb_define_method(gTreeIter, "first!", treeiter_first, 0);
374 rb_define_method(gTreeIter, "next!", treeiter_next, 0);
375 rb_define_method(gTreeIter, "get_value", treeiter_get_value, 1);
376Index: gtk/src/rbgtktreemodel.c
377===================================================================
378RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/gtk/src/rbgtktreemodel.c,v
379retrieving revision 1.20
380diff -u -r1.20 rbgtktreemodel.c
381--- gtk/src/rbgtktreemodel.c 31 Aug 2003 15:29:44 -0000 1.20
382+++ gtk/src/rbgtktreemodel.c 16 Sep 2003 19:09:37 -0000
383@@ -201,10 +201,28 @@
384 return rb_ary_new3(4, GOBJ2RVAL(model), TREEPATH2RVAL(path), ITR2RVAL(iter), orders);
385 }
386
387+static VALUE mTreeModel = Qnil;
388+
389+#ifdef RBGLIB_ENABLE_EXPERIMENTAL
390+ #include "treemodel.iface.h"
391+#endif
392+
393 void
394 Init_gtk_treemodel()
395 {
396- VALUE mTreeModel = G_DEF_INTERFACE(GTK_TYPE_TREE_MODEL, "TreeModel", mGtk);
397+ mTreeModel = G_DEF_INTERFACE(GTK_TYPE_TREE_MODEL, "TreeModel", mGtk);
398+
399+#ifdef RBGLIB_ENABLE_EXPERIMENTAL
400+ {
401+ RGObjClassInfo* cinfo=(RGObjClassInfo*)rbgobj_lookup_class_by_gtype(GTK_TYPE_TREE_MODEL);
402+ static GInterfaceInfo treemodel_iface_info = {
403+ (GInterfaceInitFunc) rbglib_GtkTreeModel__interface_init, /* interface_init */
404+ NULL, /* interface_finalize */
405+ NULL /* interface_finalize */
406+ };
407+ cinfo->table = &treemodel_iface_info;
408+ }
409+#endif
410
411 rb_define_method(mTreeModel, "flags", treemodel_get_flags, 0);
412 rb_define_method(mTreeModel, "n_columns", treemodel_get_n_columns, 0);
This page took 0.103817 seconds and 4 git commands to generate.