Hi,

I encountered problems when I tried to access the subtree attribute of 
a GtkItem instance.  I think I've solved them (I solved my immediate
problems, at least) by making several changes to pygtk.  I've attached
diffs for gtk.py and generate/generate.py made against the pygtk 0.6.3
distribution. The changes are:

* A typo corrected in GtkTreeItem.__getattr__ and a wrapper around
  _gtk.gtk_tree_item_get_subtree to convert the C extension object ref to
  a Python class instance.
* Modified generate.py to emit C code to check for a NULL GtkObject when
  returning a field of the GtkObject.  If NULL is found, a reference to
  the Python None object is returned.
* Modified _obj2inst in gtk.py to return None if the input argument is 
  None.

With these changes, the subtree attribute will be None if the item does
not have a subtree, and a GtkTree instance if it does.

Thanks to all the people who have contributed to pygtk, especially James
Henstridge.

John

diff -c for gtk.py
*** gtk.py      Fri Dec  3 15:32:24 1999
--- /home/jpe/down/pygtk-0.6.3/gtk.py   Thu Sep 30 01:33:14 1999
***************
*** 782,791 ****
                        self._o = _gtk.gtk_tree_item_new_with_label(label)
        def __getattr__(self, attr):
                attrs = {
!                       'subtree': (lambda o:
!                            _obj2inst(_gtk.gtk_tree_item_get_subtree(o)))
                        }
!               if attrs.has_key(attr):
                        return attrs[attr](self._o)
                return GtkItem.__getattr__(self, attr)
        def set_subtree(self, subtree):
--- 782,790 ----
                        self._o = _gtk.gtk_tree_item_new_with_label(label)
        def __getattr__(self, attr):
                attrs = {
!                       'subtree': _gtk.gtk_tree_item_get_subtree,
                        }
!               if attrs.has_key(attrs):
                        return attrs[attr](self._o)
                return GtkItem.__getattr__(self, attr)
        def set_subtree(self, subtree):
***************
*** 2484,2491 ****
                _gtk.gtk_accel_group_remove(self._ag, key, mods, obj._o)
  
  def _obj2inst(obj):
-       if obj == None:
-               return None
        objname = _gtk.gtk_type_name(_gtk.GTK_OBJECT_TYPE(obj))
        if _name2cls.has_key(objname):
                return _name2cls[objname](_obj=obj)
--- 2483,2488 ----

diff -c for generate/generate.py:
*** generate/generate.py        Fri Dec  3 15:24:46 1999
--- /home/jpe/down/pygtk-0.6.3/generate/generate.py     Thu Sep 30
01:33:15 1999
***************
*** 421,435 ****
                        impl.write(funcCall)
                        impl.write(');\n')
                elif retType in objects.keys():
!                       impl.write('    {\n')
!                       impl.write('        GtkObject* _o = (GtkObject*)')
!                       impl.write(funcCall)                               
!                       impl.write(';\n')
!                       impl.write('        if ( _o != NULL )\n')
!                       impl.write('            return PyGtk_New(_o);\n')
!                       impl.write('        Py_INCREF(Py_None);\n')
!                       impl.write('        return Py_None;\n')
!                       impl.write('    }\n')
                else:
                        print "%s: unknown return type '%s'" % (name, retType)
                        return 1
--- 421,429 ----
                        impl.write(funcCall)
                        impl.write(');\n')
                elif retType in objects.keys():
!                       impl.write('    return PyGtk_New((GtkObject *)')
!                       impl.write(funcCall)
!                       impl.write(');\n')
                else:
                        print "%s: unknown return type '%s'" % (name, retType)
                        return 1





To unsubscribe: echo "unsubscribe" | mail [EMAIL PROTECTED]

Reply via email to