]> git.pld-linux.org Git - packages/ruby-gnome2.git/blob - ruby-gnome2-glibinterface.patch
- up to 0.10.0
[packages/ruby-gnome2.git] / ruby-gnome2-glibinterface.patch
1 Index: glib/extconf.rb
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
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('..')
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
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)}");
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
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);
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
132 @@ -136,7 +136,7 @@
133          }
134          g_object_unref(holder->gobj);
135      }
136 -    free(holder);
137 +    g_free(holder);
138  }
139  
140  VALUE
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
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);
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
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')
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
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);
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
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>
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
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  }
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
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
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 @@
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);
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);
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.052886 seconds and 3 git commands to generate.