Index: pango.override
===================================================================
--- pango.override	(revision 12)
+++ pango.override	(revision 16)
@@ -26,6 +26,7 @@ headers
 #define PANGO_ENABLE_ENGINE
 #include <pygobject.h>
 #include <pango/pango.h>
+#include "generic.h"
 
 typedef struct {
     PyObject *func, *data;
Index: gtk/gdk.override
===================================================================
--- gtk/gdk.override	(revision 12)
+++ gtk/gdk.override	(revision 16)
@@ -37,6 +37,7 @@ headers
 #elif defined(GDK_WINDOWING_WIN32)
 #include <gdk/gdkwin32.h>
 #endif
+#include "generic.h"
 
 /* make GDK_DISPLAY() the case macro */
 #undef GDK_DISPLAY
Index: gtk/gtk.override
===================================================================
--- gtk/gtk.override	(revision 12)
+++ gtk/gtk.override	(revision 16)
@@ -36,6 +36,7 @@ extern Pycairo_CAPI_t *Pycairo_CAPI;
 extern PyTypeObject PyGdkCairoContext_Type;
 
 #include "pygtk-private.h"
+#include "generic.h"
 
 #define PYGTK_CONTAINER_FOREACH 0
 #define PYGTK_CONTAINER_FORALL 1
Index: gtk/Makefile.am
===================================================================
--- gtk/Makefile.am	(revision 12)
+++ gtk/Makefile.am	(revision 16)
@@ -122,7 +122,8 @@ _gtk_la_SOURCES = 		\
 	pygtkcellrenderer.h 	\
 	pygtkcellrenderer.c	\
 	pygtktreemodel.h 	\
-	pygtktreemodel.c
+	pygtktreemodel.c	\
+	../generic.c
 nodist__gtk_la_SOURCES = gtk.c gdk.c
 if BUILD_GTK
 pygtkexec_LTLIBRARIES += _gtk.la
Index: generic.c
===================================================================
--- generic.c	(revision 0)
+++ generic.c	(revision 16)
@@ -0,0 +1,10 @@
+#include "pygobject.h"
+
+G_GNUC_INTERNAL PyObject *
+_wrap_generic_get_gint(PyObject *self, void *closure)
+{
+    int offset = (intptr_t) closure;
+    gint  *p = (pyg_boxed_get(self, char) + offset);
+    gint ret = *p;
+    return PyInt_FromLong(ret);
+}
Index: atk.override
===================================================================
--- atk.override	(revision 12)
+++ atk.override	(revision 16)
@@ -27,6 +27,7 @@ headers
 #include <atk/atk-enum-types.h>
 #include <atk/atknoopobjectfactory.h>
 #include <atk/atknoopobject.h>
+#include "generic.h"
 %%
 include
   atkrectangle.override
Index: generic.h
===================================================================
--- generic.h	(revision 0)
+++ generic.h	(revision 16)
@@ -0,0 +1 @@
+G_GNUC_INTERNAL PyObject *_wrap_generic_get_gint(PyObject *self, void *closure);
Index: codegen/codegen.py
===================================================================
--- codegen/codegen.py	(revision 12)
+++ codegen/codegen.py	(revision 16)
@@ -709,19 +709,34 @@ class Wrapper:
                     handler = argtypes.matcher.get(ftype)
                     # for attributes, we don't own the "return value"
                     handler.write_return(ftype, 0, info)
-                    self.fp.write(self.getter_tmpl %
-                                  { 'funcname': funcname,
-                                    'varlist': info.varlist,
-                                    'field': self.get_field_accessor(cfname),
-                                    'codeafter': info.get_codeafter() })
-                    gettername = funcname
+                    if ftype == 'gint':
+                        gettername = '_wrap_generic_get_gint'
+                    else:
+                        self.fp.write(self.getter_tmpl %
+                                      { 'funcname': funcname,
+                                        'varlist': info.varlist,
+                                        'field': self.get_field_accessor(cfname),
+                                        'codeafter': info.get_codeafter() })
+                        gettername = funcname
                 except:
                     sys.stderr.write(
                         "Could not write getter for %s.%s: %s\n"
                         % (self.objinfo.c_name, fname, exc_info()))
             if gettername != '0' or settername != '0':
-                getsets.append('    { "%s", (getter)%s, (setter)%s },\n' %
-                               (fixname(fname), gettername, settername))
+                tmpl = '    { "%(name)s", (getter)%(get)s, (setter)%(set)s, NULL, (void *) %(closure)s},\n'
+                if gettername == '_wrap_generic_get_gint':
+                    ctype = self.objinfo.c_name
+                    offset = 'offsetof(%s, %s)' % (ctype, cfname)
+                    substitution = {'name'    : fixname(fname),
+                                    'get'     : gettername,
+                                    'set'     : settername,
+                                    'closure' : offset}
+                else:
+                    substitution = {'name'    : fixname(fname),
+                                    'get'     : gettername,
+                                    'set'     : settername,
+                                    'closure' : 'NULL'}
+                getsets.append(tmpl % substitution)
 
         if not getsets:
             return '0'
Index: Makefile.am
===================================================================
--- Makefile.am	(revision 12)
+++ Makefile.am	(revision 16)
@@ -68,7 +68,7 @@ atk.c: $(ATK_DEFS) $(ATK_OVERRIDES)
 atk_la_CFLAGS = $(ATK_CFLAGS)
 atk_la_LIBADD = $(ATK_LIBS)
 atk_la_LDFLAGS = $(common_ldflags) -export-symbols-regex initatk
-atk_la_SOURCES = atkmodule.c
+atk_la_SOURCES = atkmodule.c generic.c
 nodist_atk_la_SOURCES = atk.c
 if BUILD_ATK
 pkgpyexec_LTLIBRARIES += atk.la
@@ -83,7 +83,7 @@ pango.c: $(PANGO_DEFS) pango.override
 pango_la_CFLAGS = $(PANGO_CFLAGS)
 pango_la_LIBADD = $(PANGO_LIBS)
 pango_la_LDFLAGS = $(common_ldflags) -export-symbols-regex initpango
-pango_la_SOURCES = pangomodule.c
+pango_la_SOURCES = pangomodule.c generic.c
 nodist_pango_la_SOURCES = pango.c
 if BUILD_PANGO
 pkgpyexec_LTLIBRARIES += pango.la
