2 ===================================================================
3 RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/glib/extconf.rb,v
4 retrieving revision 1.18
5 diff -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
11 $defs << "-DRUBY_GLIB2_COMPILATION"
12 + print "enabling experimental glib features... "
13 + if enable_config('glib-experimental')
15 + $defs << "-DRBGLIB_ENABLE_EXPERIMENTAL"
19 create_makefile("glib2", srcdir)
22 Index: glib/src/rbgobj_object.c
23 ===================================================================
24 RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/glib/src/rbgobj_object.c,v
25 retrieving revision 1.52
26 diff -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
33 +VALUE rbgobj_iface_dispatch(VALUE obj, ID func, VALUE args)
35 + volatile VALUE val = rb_funcall2(obj, func, RARRAY(args)->len, RARRAY(args)->ptr);
37 + printf("Returning: ");
43 +register_implements_interface(int argc, VALUE* argv, VALUE self)
46 + const RGObjClassInfo* cinfo = rbgobj_lookup_class(self);
47 + const RGObjClassInfo* iinfo;
49 + if (cinfo->klass != self)
50 + rb_raise(rb_eTypeError, "not a registered GObjectClass");
52 + rb_scan_args(argc, argv, "10", &interface);
54 + iinfo = rbgobj_lookup_class(interface);
56 + if (iinfo->table == NULL)
59 + g_type_add_interface_static(cinfo->gtype, iinfo->gtype, iinfo->table);
64 Init_gobject_subclass()
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);
70 rb_global_variable(&proc_mod_eval);
71 proc_mod_eval = rb_eval_string("lambda{|obj,proc| obj.module_eval(&proc)}");
72 Index: glib/src/rbgobj_type.c
73 ===================================================================
74 RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/glib/src/rbgobj_type.c,v
75 retrieving revision 1.42
76 diff -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
80 rbgobj_lookup_class_by_gtype(gtype)
83 - RGObjClassInfo* cinfo;
84 + RGObjClassInfo* cinfo=NULL;
85 VALUE c = rb_hash_aref(gtype_to_cinfo, INT2NUM(gtype));
88 + /*fprintf(stderr, "rbgobjlookup_pre; %p : 0%lx -> 0%lx\n", gtype_to_cinfo, gtype, c);
90 + if (!NIL_P(c) && (TYPE(c) == T_DATA)){
91 Data_Get_Struct(c, RGObjClassInfo, cinfo);
97 /* we should raise exception? */
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",
103 g_type_name(G_TYPE_FUNDAMENTAL(gtype)));
108 + cinfo->table = NULL;
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");
116 - rb_global_variable(>ype_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(>ype_to_cinfo);
121 + rb_global_variable(&klass_to_cinfo);
123 _register_fundamental_klass_to_gtype(rb_cFixnum, G_TYPE_LONG);
124 _register_fundamental_klass_to_gtype(rb_cFloat, G_TYPE_DOUBLE);
125 Index: glib/src/rbgobject.c
126 ===================================================================
127 RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/glib/src/rbgobject.c,v
128 retrieving revision 1.33
129 diff -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
134 g_object_unref(holder->gobj);
141 Index: glib/src/rbgobject.h
142 ===================================================================
143 RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/glib/src/rbgobject.h,v
144 retrieving revision 1.46
145 diff -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
149 void (*mark)(gpointer);
150 void (*free)(gpointer);
151 int flags; /* RGObjClassFlag */
152 + gpointer table; /* For interfaces */
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);
165 extern VALUE rbgobj_boxed_create(VALUE klass);
166 Index: gtk/extconf.rb
167 ===================================================================
168 RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/gtk/extconf.rb,v
169 retrieving revision 1.43
170 diff -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
177 +print "enabling experimental glib features... "
178 +if enable_config('glib-experimental')
180 + $defs << "-DRBGLIB_ENABLE_EXPERIMENTAL"
186 src_dir = File.expand_path(File.dirname(__FILE__) + '/src')
187 Index: gtk/src/rbgdkatom.c
188 ===================================================================
189 RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/gtk/src/rbgdkatom.c,v
190 retrieving revision 1.8
191 diff -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
196 rb_scan_args(argc, argv, "11", &name, &exist);
198 - return BOXED2RVAL(gdk_atom_intern(RVAL2CSTR(name), RTEST(exist)),
200 + if (TYPE(name) == T_STRING)
201 + return BOXED2RVAL(gdk_atom_intern(RVAL2CSTR(name), RTEST(exist)),
203 + else if (TYPE(name) == T_FIXNUM)
204 + return BOXED2RVAL((GdkAtom)FIX2INT(name), GDK_TYPE_ATOM);
206 + rb_raise(rb_eTypeError, "Gdk::Atom.intern requires either a String or a Fixnum");
217 + return UINT2NUM(_SELF(self));
225 + return UINT2NUM(_SELF(self)) == 0 ? Qtrue : Qfalse;
229 gdkatom_eq(self, other)
233 rb_define_singleton_method(gdkAtom, "intern", gdkatom_s_intern, -1);
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);
241 Index: gtk/src/rbgtk.h
242 ===================================================================
243 RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/gtk/src/rbgtk.h,v
244 retrieving revision 1.50
245 diff -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
251 #include "rbgobject.h"
252 +#include "rbgutil.h"
256 Index: gtk/src/rbgtkitemfactory.c
257 ===================================================================
258 RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/gtk/src/rbgtkitemfactory.c,v
259 retrieving revision 1.20
260 diff -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
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)));
272 Index: gtk/src/rbgtktextmark.c
273 ===================================================================
274 RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/gtk/src/rbgtktextmark.c,v
275 retrieving revision 1.6
276 diff -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
283 - return rb_str_new2(gtk_text_mark_get_name(GTK_TEXT_MARK(RVAL2GOBJ(self))));
285 + name = gtk_text_mark_get_name(GTK_TEXT_MARK(RVAL2GOBJ(self)));
286 + return name ? rb_str_new2(name) : Qnil;
290 Index: gtk/src/rbgtktreeiter.c
291 ===================================================================
292 RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/gtk/src/rbgtktreeiter.c,v
293 retrieving revision 1.16
294 diff -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 @@
301 +#ifdef RBGLIB_ENABLE_EXPERIMENTAL
302 +#define SIG ((gpointer)123456)
305 +treeiter_initialize(self,model)
308 + GtkTreeIter iter = { 0, NULL, NULL, NULL };
309 + iter.user_data3 = RVAL2GOBJ(model);
310 + G_INITIALIZE(self, &iter);
315 +treeiter_stamp(self)
318 + return LONG2NUM(_SELF(self)->stamp);
322 +treeiter_user_data(self)
325 + GtkTreeIter *iter = _SELF(self);
326 + /*if (iter->user_data2 == SIG)
327 + return (VALUE)(iter->user_data);
329 + return LONG2NUM((long)iter->user_data);
333 +treeiter_set_stamp(self, val)
336 + _SELF(self)->stamp = NUM2LONG(val);
341 +treeiter_set_user_data(self, val)
344 + GtkTreeIter *iter = _SELF(self);
345 + /*if (TYPE(val) == T_FIXNUM)
347 + iter->user_data = (gpointer)NUM2LONG(val);
348 + /*iter->user_data2 = 0;
352 + // Another reference *must* be kept elsewhere or this may be GC'd
353 + iter->user_data = (gpointer)val;
354 + iter->user_data2 = SIG;
363 VALUE gTreeIter = G_DEF_CLASS(GTK_TYPE_TREE_ITER, "TreeIter", mGtk);
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);
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);
376 Index: gtk/src/rbgtktreemodel.c
377 ===================================================================
378 RCS file: /cvsroot/ruby-gnome2/ruby-gnome2/gtk/src/rbgtktreemodel.c,v
379 retrieving revision 1.20
380 diff -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);
387 +static VALUE mTreeModel = Qnil;
389 +#ifdef RBGLIB_ENABLE_EXPERIMENTAL
390 + #include "treemodel.iface.h"
396 - VALUE mTreeModel = G_DEF_INTERFACE(GTK_TYPE_TREE_MODEL, "TreeModel", mGtk);
397 + mTreeModel = G_DEF_INTERFACE(GTK_TYPE_TREE_MODEL, "TreeModel", mGtk);
399 +#ifdef RBGLIB_ENABLE_EXPERIMENTAL
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 */
407 + cinfo->table = &treemodel_iface_info;
411 rb_define_method(mTreeModel, "flags", treemodel_get_flags, 0);
412 rb_define_method(mTreeModel, "n_columns", treemodel_get_n_columns, 0);