summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog32
-rw-r--r--NEWS1
-rw-r--r--codegen/Makefile.am2
-rw-r--r--codegen/codegen.py4
-rw-r--r--codegen/defsparser.py34
-rw-r--r--configure.in12
-rw-r--r--gtk/Makefile.am26
-rw-r--r--gtk/gdkcairo.override45
-rw-r--r--gtk/gtkmodule.c2
-rw-r--r--gtk/gtkunixprint.override10
-rw-r--r--gtk/pygtk-private.h2
11 files changed, 119 insertions, 51 deletions
diff --git a/ChangeLog b/ChangeLog
index be25bf15..139f0321 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
diff --git a/NEWS b/NEWS
index 4062d1ff..6d42f7db 100644
--- a/NEWS
+++ b/NEWS
@@ -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