diff options
-rw-r--r-- | ChangeLog | 32 | ||||
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | codegen/Makefile.am | 2 | ||||
-rw-r--r-- | codegen/codegen.py | 4 | ||||
-rw-r--r-- | codegen/defsparser.py | 34 | ||||
-rw-r--r-- | configure.in | 12 | ||||
-rw-r--r-- | gtk/Makefile.am | 26 | ||||
-rw-r--r-- | gtk/gdkcairo.override | 45 | ||||
-rw-r--r-- | gtk/gtkmodule.c | 2 | ||||
-rw-r--r-- | gtk/gtkunixprint.override | 10 | ||||
-rw-r--r-- | gtk/pygtk-private.h | 2 |
11 files changed, 119 insertions, 51 deletions
@@ -1,11 +1,35 @@ +2006-06-14 Gustavo J. A. M. Carneiro <gjc@gnome.org> + + * codegen/defsparser.py (IncludeParser.include), + * codegen/codegen.py (main): Add a -I option to specify a path to + search for .defs files. + + * gtk/Makefile.am (CREATEDEFS): Use $(top_srcdir) to find + createdefs.py. + (gtk.c): gtk.c depends also on gdk-types.defs. + (EXTRA_DIST): Add gtk-extrafuncs.defs. + + * codegen/Makefile.am (EXTRA_DIST): Add createdefs.py. + 2006-06-13 Gustavo J. A. M. Carneiro <gjc@gnome.org> + * gtk/gtkmodule.c (pygtk_add_extra_constants): Don't add + GTK_PAPER_* constants with gtk+ 2.8. + + * gtk/gtkunixprint.override (pygtk_print_job_complete_func_cb): + Make it conditionally compile with both pycairo >= 1.1.7 and + earlier versions. + + * configure.in: Explicitly require pycairo for module pangocairo. + Minimum pycairo version changed back to 1.0.2. + * NEWS: Updated. - * gtk/gdkcairo.override: Rename the recently introduced - gdk.CairoContext.rectangle() to gdk.CairoContext.gdk_rectangle() - because it redefines cairo.Context.rectangle() with a different - signature, thus violates the Liskov substitution principle. + * gtk/gdkcairo.override (_wrap_gdk_cairo_rectangle): Make + gdk.CairoContext.rectangle() also accept (x, y, width, height) + parameters to avoid violating the Liskov substitution principle, + since it redefines cairo.Context.rectangle() with a different + signature. 2006-06-13 John Finlay <finlay@moeraki.com> @@ -32,6 +32,7 @@ pygtk-2.9.0 13-june-2006 - Wrap gtk_style_lookup_color() (Finlay) - Wrap a bunch of gtk treeview grid lines methods (Finlay) - Better Drag and drop API support (Finlay) + - Add -I option to codegen (defs search path) (Gustavo) pygtk-2.9.0 04-april-2006 - Remove gobject, pygobject is now a hard dependency diff --git a/codegen/Makefile.am b/codegen/Makefile.am index 289a52be..a22732b2 100644 --- a/codegen/Makefile.am +++ b/codegen/Makefile.am @@ -19,4 +19,4 @@ codegen_PYTHON = \ override.py \ scmexpr.py -EXTRA_DIST = README.defs pygtk-codegen-$(PLATFORM_VERSION).in +EXTRA_DIST = README.defs pygtk-codegen-$(PLATFORM_VERSION).in createdefs.py diff --git a/codegen/codegen.py b/codegen/codegen.py index 9799b6e2..ff80ee4c 100644 --- a/codegen/codegen.py +++ b/codegen/codegen.py @@ -1431,7 +1431,7 @@ def main(argv): prefix = 'pygtk' outfilename = None errorfilename = None - opts, args = getopt.getopt(argv[1:], "o:p:r:t:D:", + opts, args = getopt.getopt(argv[1:], "o:p:r:t:D:I:", ["override=", "prefix=", "register=", "outfilename=", "load-types=", "errorfilename="]) defines = {} # -Dkey[=val] options @@ -1459,6 +1459,8 @@ def main(argv): defines[nameval[0]] = nameval[1] except IndexError: defines[nameval[0]] = None + elif opt == '-I': + defsparser.include_path.insert(0, arg) if len(args) < 1: print >> sys.stderr, usage return 1 diff --git a/codegen/defsparser.py b/codegen/defsparser.py index 597f809a..a115d67a 100644 --- a/codegen/defsparser.py +++ b/codegen/defsparser.py @@ -4,17 +4,33 @@ import scmexpr from definitions import BoxedDef, EnumDef, FlagsDef, FunctionDef, \ InterfaceDef, MethodDef, ObjectDef, PointerDef, VirtualDef +include_path = ['.'] + class IncludeParser(scmexpr.Parser): """A simple parser that follows include statements automatically""" - def include(self, filename): - if not os.path.isabs(filename): - filename = os.path.join(os.path.dirname(self.filename), filename) - - # set self.filename to the include name, to handle recursive includes - oldfile = self.filename - self.filename = filename - self.startParsing() - self.filename = oldfile + def include(self, input_filename): + global include_path + if os.path.isabs(input_filename): + filename = os.path.join(os.path.dirname(self.filename), input_filename) + # set self.filename to the include name, to handle recursive includes + oldfile = self.filename + self.filename = filename + self.startParsing() + self.filename = oldfile + else: + inc_path = [os.path.dirname(self.filename)] + include_path + for filename in [os.path.join(path_entry, input_filename) + for path_entry in include_path]: + if not os.path.exists(filename): + continue + # set self.filename to the include name, to handle recursive includes + oldfile = self.filename + self.filename = filename + self.startParsing() + self.filename = oldfile + break + else: + raise IOError("%s not found in include path %s" % (input_filename, inc_path)) class DefsParser(IncludeParser): def __init__(self, arg, defines={}): diff --git a/configure.in b/configure.in index 680c5a24..0c35af0a 100644 --- a/configure.in +++ b/configure.in @@ -14,7 +14,7 @@ m4_define(atk_required_version, 1.8.0) m4_define(gtk_required_version, 2.8.0) m4_define(libglade_required_version, 2.5.0) m4_define(gtkunixprint_required_version, 2.9.0) -m4_define(pycairo_required_version, 1.1.7) +m4_define(pycairo_required_version, 1.0.2) dnl or 1.1.7 m4_define(pygobject_required_version, 2.10.0) AC_INIT(pygtk, pygtk_version, @@ -137,9 +137,17 @@ if test $have_pycairo; then PYGTK_CODEGEN_DEFINES="-DHAVE_PYCAIRO $PYGTK_CODEGEN_DEFINES"; AC_DEFINE([HAVE_PYCAIRO], [1], [Define to 1 if pycairo is available]) + AC_DEFINE_UNQUOTED(PYCAIRO_MAJOR_VERSION, [`pkg-config --modversion pycairo | cut -d '.' -f 1`], dnl + [pycairo major version]) + AC_DEFINE_UNQUOTED(PYCAIRO_MINOR_VERSION, [`pkg-config --modversion pycairo | cut -d '.' -f 2`], dnl + [pycairo minor version]) + AC_DEFINE_UNQUOTED(PYCAIRO_MICRO_VERSION, [`pkg-config --modversion pycairo | cut -d '.' -f 3`], dnl + [pycairo micro version]) + dnl pangocairo PKG_CHECK_MODULES(PANGOCAIRO, - pangocairo >= pango_required_version, + [pangocairo >= pango_required_version, + pycairo >= pycairo_required_version], have_pangocairo=true, have_pangocairo=false) if test ! $have_pangocairo then diff --git a/gtk/Makefile.am b/gtk/Makefile.am index 50a1a6b1..1e38dd08 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -44,7 +44,7 @@ GTK_DEFS += gtk-2.10.defs GTK_TYPES_DEFS += gtk-2.10-types.defs endif -CREATEDEFS = $(PYTHON) ../codegen/createdefs.py +CREATEDEFS = $(PYTHON) $(top_srcdir)/codegen/createdefs.py GDK_OVERRIDES = \ gdk.override \ @@ -79,6 +79,7 @@ CLEANFILES += \ gdk-types.defs EXTRA_DIST += \ + gtk-extrafuncs.defs \ $(GDK_DEFS) \ $(GDK_TYPES_DEFS) \ $(GDK_OVERRIDES) \ @@ -88,23 +89,23 @@ EXTRA_DIST += \ gdk.defs: $(GDK_DEFS) - $(CREATEDEFS) gdk.defs $(GDK_DEFS) + $(CREATEDEFS) $@ $(GDK_DEFS) gdk.defs: Makefile gtk.defs: $(GTK_DEFS) - $(CREATEDEFS) gtk.defs $(GTK_DEFS) + $(CREATEDEFS) $@ $(GTK_DEFS) gtk.defs: Makefile gdk-types.defs: $(GDK_TYPES_DEFS) - $(CREATEDEFS) gdk-types.defs $(GDK_TYPES_DEFS) + $(CREATEDEFS) $@ $(GDK_TYPES_DEFS) gdk-types.defs: Makefile gtk-types.defs: $(GTK_TYPES_DEFS) - $(CREATEDEFS) gtk-types.defs $(GTK_TYPES_DEFS) + $(CREATEDEFS) $@ $(GTK_TYPES_DEFS) gtk-types.defs: Makefile gdk.c: gdk-types.defs gdk.defs $(GDK_OVERRIDES) -gtk.c: gtk-types.defs gtk.defs gdk-types.defs $(GTK_OVERRIDES) +gtk.c: gdk-types.defs gtk-types.defs gtk.defs gdk-types.defs $(GTK_OVERRIDES) _gtk_la_CFLAGS = $(PYCAIRO_CFLAGS) $(GTK_CFLAGS) _gtk_la_LDFLAGS = $(common_ldflags) -export-symbols-regex init_gtk _gtk_la_LIBADD = $(GTK_LIBS) @@ -158,16 +159,17 @@ pygtkexec_LTLIBRARIES += unixprint.la defs_DATA += $(GTKUNIXPRINT_DEFS) endif + .defs.c: - (cd $(srcdir) \ - && $(PYTHON) ../codegen/codegen.py \ + ($(PYTHON) $(top_srcdir)/codegen/codegen.py \ $(PYGTK_CODEGEN_DEFINES) \ - --register ../pango-types.defs \ - --register ../atk-types.defs \ + -I $(srcdir) \ + --register $(top_srcdir)/pango-types.defs \ + --register $(top_srcdir)/atk-types.defs \ --register gdk-types.defs \ --register gtk-types.defs \ - --override $*.override \ - --prefix py$* $*.defs) > gen-$*.c \ + --override $(srcdir)/$*.override \ + --prefix py$* $<) > gen-$*.c \ && cp gen-$*.c $*.c \ && rm -f gen-$*.c diff --git a/gtk/gdkcairo.override b/gtk/gdkcairo.override index 26e12ae0..80fe3569 100644 --- a/gtk/gdkcairo.override +++ b/gtk/gdkcairo.override @@ -70,23 +70,32 @@ _wrap_gdk_cairo_rectangle(PyObject *self, PyObject *args, PyObject *kwargs) static char *kwlist[] = { "rectangle", NULL }; PyObject *py_rectangle; GdkRectangle rectangle; + double x, y, width, height; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:gtk.gdk.CairoContext.rectangle", kwlist, - &py_rectangle)) - return NULL; - - if (!pyg_boxed_check(py_rectangle, GDK_TYPE_RECTANGLE)) { - if (!pygdk_rectangle_from_pyobject(py_rectangle, &rectangle)) { - PyErr_Clear(); - PyErr_SetString(PyExc_TypeError, - "rectangle must be a GdkRectangle or 4-tuple"); + if (PyArg_ParseTuple (args, "dddd:Context.rectangle", + &x, &y, &width, &height)) + { + cairo_rectangle(PycairoContext_GET(self), x, y, width, height); + } else { + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:gtk.gdk.CairoContext.rectangle", kwlist, + &py_rectangle)) { + PyErr_SetString(PyExc_TypeError, "gtk.gdk.CairoContext.rectangle accepts either" + " (x, y, width, height) or a single gtk.gdk.Rectangle parameter"); return NULL; } - } else { - rectangle = *pyg_boxed_get(py_rectangle, GdkRectangle); - } + if (!pyg_boxed_check(py_rectangle, GDK_TYPE_RECTANGLE)) { + if (!pygdk_rectangle_from_pyobject(py_rectangle, &rectangle)) { + PyErr_Clear(); + PyErr_SetString(PyExc_TypeError, + "rectangle must be a GdkRectangle or 4-tuple"); + return NULL; + } + } else { + rectangle = *pyg_boxed_get(py_rectangle, GdkRectangle); + } - gdk_cairo_rectangle(PycairoContext_GET(self), &rectangle); + gdk_cairo_rectangle(PycairoContext_GET(self), &rectangle); + } Py_INCREF(Py_None); return Py_None; } @@ -115,7 +124,7 @@ _wrap_gdk_cairo_region(PyObject *self, PyObject *args, PyObject *kwargs) return Py_None; } -#if HAVE_GTK_2_10_TRUE != '#' +#if GTK_CHECK_VERSION(2, 9, 3) static PyObject * _wrap_gdk_cairo_set_source_pixmap(PyObject *self, PyObject *args, PyObject *kwargs) { @@ -131,16 +140,16 @@ _wrap_gdk_cairo_set_source_pixmap(PyObject *self, PyObject *args, PyObject *kwar Py_INCREF(Py_None); return Py_None; } -#endif /* HAVE_GTK_2_10_TRUE */ +#endif static PyMethodDef _PyGdkCairoContext_methods[] = { { "set_source_pixbuf", (PyCFunction)_wrap_gdk_cairo_set_source_pixbuf, METH_VARARGS|METH_KEYWORDS }, { "set_source_color", (PyCFunction)_wrap_gdk_cairo_set_source_color, METH_VARARGS|METH_KEYWORDS }, - { "gdk_rectangle", (PyCFunction)_wrap_gdk_cairo_rectangle, METH_VARARGS|METH_KEYWORDS }, + { "rectangle", (PyCFunction)_wrap_gdk_cairo_rectangle, METH_VARARGS|METH_KEYWORDS }, { "region", (PyCFunction)_wrap_gdk_cairo_region, METH_VARARGS|METH_KEYWORDS }, -#if HAVE_GTK_2_10_TRUE != '#' +#if GTK_CHECK_VERSION(2, 9, 3) { "set_source_pixmap", (PyCFunction)_wrap_gdk_cairo_set_source_pixmap, METH_VARARGS|METH_KEYWORDS }, -#endif /* HAVE_GTK_2_10_TRUE */ +#endif { NULL, NULL, 0 } }; diff --git a/gtk/gtkmodule.c b/gtk/gtkmodule.c index d3bc2ea2..921a0b81 100644 --- a/gtk/gtkmodule.c +++ b/gtk/gtkmodule.c @@ -176,6 +176,7 @@ g_free(aname); } static void pygtk_add_extra_constants(PyObject *m) { +#if GTK_CHECK_VERSION(2, 9, 3) PyModule_AddObject(m, "PAPER_NAME_A3", PyString_FromString(GTK_PAPER_NAME_A3)); PyModule_AddObject(m, "PAPER_NAME_A4", @@ -190,6 +191,7 @@ pygtk_add_extra_constants(PyObject *m) PyString_FromString(GTK_PAPER_NAME_EXECUTIVE)); PyModule_AddObject(m, "PAPER_NAME_LEGAL", PyString_FromString(GTK_PAPER_NAME_LEGAL)); +#endif } static gboolean diff --git a/gtk/gtkunixprint.override b/gtk/gtkunixprint.override index 3084972c..0ed3bab0 100644 --- a/gtk/gtkunixprint.override +++ b/gtk/gtkunixprint.override @@ -29,7 +29,7 @@ headers #include <libintl.h> #include <glib-object.h> -#include <pygtk.h> +#include "pygtk-private.h" #include <gtk/gtk.h> #include <gtk/gtkprinter.h> #include <gtk/gtkprintjob.h> @@ -62,9 +62,6 @@ gtk_print_capabilites_get_type (void) } #endif -typedef struct { - PyObject *func, *data; -} PyGtkCustomNotify; void pygtk_custom_destroy_notify(gpointer user_data) @@ -107,7 +104,12 @@ _wrap_gtk_print_job_get_surface(PyGObject *self) if (pyg_error_check(&error)) return NULL; + +#if PYCAIRO_VERSION_HEX >= 0x1010700 return PycairoSurface_FromSurface(surface, NULL); +#else + return PycairoSurface_FromSurface(surface, NULL, NULL); +#endif } %% override gtk_print_job_send kwargs diff --git a/gtk/pygtk-private.h b/gtk/pygtk-private.h index 21d10dd2..f562a9a5 100644 --- a/gtk/pygtk-private.h +++ b/gtk/pygtk-private.h @@ -5,6 +5,8 @@ #include "config.h" #endif +#define PYCAIRO_VERSION_HEX ((PYCAIRO_MAJOR_VERSION<<24)|(PYCAIRO_MINOR_VERSION<<16)|(PYCAIRO_MICRO_VERSION<<8)) + #ifdef _PYGTK_H_ #error "don't include pygtk.h and pygtk-private.h together" #endif |