Imported Upstream version 3.27.2 upstream/3.27.2
authorDongHun Kwak <dh0128.kwak@samsung.com>
Tue, 30 Oct 2018 01:29:52 +0000 (10:29 +0900)
committerDongHun Kwak <dh0128.kwak@samsung.com>
Tue, 30 Oct 2018 01:29:52 +0000 (10:29 +0900)
62 files changed:
ChangeLog
MANIFEST.in
Makefile.am
Makefile.in
NEWS
PKG-INFO
config.guess
config.sub
configure
configure.ac
docs/Makefile
docs/bugs_repo.rst [new file with mode: 0644]
docs/changelog.rst
docs/conf.py
docs/devguide/building_testing.rst
docs/devguide/dev_environ.rst
docs/devguide/override_guidelines.rst
docs/devguide/overview.rst
docs/getting_started.rst
docs/guide/porting.rst
docs/index.rst
docs/maintguide.rst
examples/Makefile.in
gi/Makefile.in
gi/gimodule.c
gi/gobjectmodule.c
gi/overrides/GLib.py
gi/overrides/GObject.py
gi/overrides/Gtk.py
gi/overrides/Makefile.in
gi/pygi-array.c
gi/pygi-basictype.c
gi/pygi-basictype.h
gi/pygi-boxed.c
gi/pygi-boxed.h
gi/pygi-cache.h
gi/pygi-closure.c
gi/pygi-enum-marshal.c
gi/pygi-error.c
gi/pygi-hashtable.c
gi/pygi-invoke-state-struct.h
gi/pygi-invoke.c
gi/pygi-list.c
gi/pygi-marshal-cleanup.c
gi/pygi-object.c
gi/pygi-property.c
gi/pygi-source.c
gi/pygi-struct-marshal.c
gi/pygobject-object.c
gi/repository/Makefile.in
gi/types.py
pygobject-3.0.pc.in
pygtkcompat/Makefile.in
setup.cfg [new file with mode: 0644]
setup.py [changed mode: 0644->0755]
tests/Makefile.in
tests/runtests.py
tests/test_glib.py
tests/test_overrides_glib.py
tests/test_overrides_gtk.py
tests/test_signal.py
tests/test_source.py

index 1604c01..ab32965 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,750 @@
+commit 7f678500a9edad6218911dc7d81e0bc057c58326
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Wed Feb 7 11:35:13 2018 +0100
+
+    release
+
+ NEWS | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 07993bb18195f19a07cdda3ba47b231b02863e2b
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Wed Feb 7 09:41:58 2018 +0100
+
+    docs: add pypi step to maintainer release list
+
+ docs/maintguide.rst | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit f7a8711d16de226aec1496c366fba1c6434b4218
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Wed Feb 7 09:36:50 2018 +0100
+
+    docs: getting started: default to Python 3 everywhere
+
+ docs/getting_started.rst | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+commit 1330712bcf8109090bacf0cdfbba0c2a47930ac9
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Wed Feb 7 09:35:08 2018 +0100
+
+    docs: update building/testing with new setup.py features
+
+ docs/devguide/building_testing.rst | 45
+ +++++++++++++++++++++-----------------
+ 1 file changed, 25 insertions(+), 20 deletions(-)
+
+commit e6ffd8f37c83d2627086207192030975dee44bd7
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Wed Feb 7 00:55:54 2018 +0100
+
+    Update NEWS
+
+ NEWS | 26 ++++++++++++++++++++++----
+ 1 file changed, 22 insertions(+), 4 deletions(-)
+
+commit e56975aaf9bb976397b5961b7b34adcdd91b5a94
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Tue Feb 6 23:04:18 2018 +0100
+
+    gitlab-ci: adjust PKG_CONFIG_PATH for pycairo
+
+    pycairo git now installs things into $prefix/lib/pkgconfig
+
+ .gitlab-ci/test-docker.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 4b315835f7006655fe9fa23c02ec6096478114e5
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Tue Feb 6 18:32:13 2018 +0100
+
+    setup.py: use dbus-run-session for tests if available
+
+    Like we do with "make check"
+
+ setup.py | 16 ++++++++++++----
+ 1 file changed, 12 insertions(+), 4 deletions(-)
+
+commit e36797f6ea971bffe5cd55065e43e233644c3e0a
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Tue Feb 6 18:16:58 2018 +0100
+
+    setup.py: remove wrong comment about share lib extenions in distutils
+
+    It just happened to work with MinGW Python3 as that is patched to use
+    .dll for Python extenions by default. Forcing a different extension
+    here is needed as distutils is targeted at building extensions and
+    not shared libs.
+
+ setup.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 05159327eb70a75bc876a2355f5f31c6d424c1d5
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Tue Feb 6 18:15:05 2018 +0100
+
+    build: remove libdir from the .pc file
+
+    It's unused afaics and in the distutils case we can't replicated
+    what autotools does, so better remove it.
+
+ pygobject-3.0.pc.in | 1 -
+ setup.py            | 1 -
+ 2 files changed, 2 deletions(-)
+
+commit 1de81a939711b9c2edb915b8bd9855ef9db12f02
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Tue Feb 6 18:14:08 2018 +0100
+
+    setup.py: install .pc file into libdir
+
+    To match what the autotools build does.
+
+ setup.py | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit 32771e7509a266d5cafbfb0965b018ad8c87c530
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Tue Feb 6 00:16:57 2018 +0100
+
+    tests: skip some more tests on macOS
+
+    I haven't looked into why, but my hope is that this makes tests
+    pass on travis-ci, so we have a starting point and can at least
+    catch regression in an automated fashion.
+
+ tests/test_glib.py          | 1 +
+ tests/test_overrides_gtk.py | 1 +
+ 2 files changed, 2 insertions(+)
+
+commit 3d4bc64461c7c59f5e4aaabe7f2752d6ece83ed0
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Mon Feb 5 22:55:04 2018 +0100
+
+    setup.py: convince distutils to build dylibs on macOS
+
+    This makes the "build_tests" command work
+
+ setup.py | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+commit a153be8a6d79f52f1a45e2241e1fca5bd0aba6ea
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Mon Feb 5 10:49:55 2018 +0100
+
+    setup.py: rework pycairo header lookup and use new pycairo API when
+    available. See #150
+
+    pycairo git/next version now has a get_include() function which
+    gives us the
+    include path matching the Python module in all cases.
+
+    Rework the lookup code to try that API if possible and fall back to
+    the old
+    way. Also add logging everywhere so it's easier to debug if there
+    is still
+    something wrong.
+
+ setup.py | 132
+ ++++++++++++++++++++++++++++++++++++++++++---------------------
+ 1 file changed, 88 insertions(+), 44 deletions(-)
+
+commit 9a3958d30f8eeaf3cf5ad03c30a1915683ce4e6c
+Merge: 8811bfc6 a4a68b3c
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Thu Feb 1 08:24:50 2018 +0000
+
+    Merge branch 'dont-copy-unowned-boxed' into 'master'
+
+    to-py-struct: don't copy the boxed if we are the sole owner of
+    the wrapper
+
+    See merge request GNOME/pygobject!14
+
+commit a4a68b3c7a4bb64c71e1bdbe52ede109b6bcd0bb
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Tue Jan 30 16:39:18 2018 +0100
+
+    to-py-struct: don't copy the boxed if we are the sole owner of
+    the wrapper
+
+    In commit 7ed8191818733b9130bce84f78 things were changed to copy the
+    wrapped boxed after the Python function returned. In case the wrapper
+    is only used during the call there is no need to copy the boxed
+    as the wrapper will be freed anyway.
+
+    Add a special case and don't copy the boxed in case the refcount at
+    cleanup is only 1. This should speed up the common case.
+
+    thanks to @mathieudu for suggesting this
+
+ gi/pygi-struct-marshal.c | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+commit 8811bfc695a8513e49cfc8ba1e304a3ed0814fa9
+Merge: 0dca3f4f 1fbf74eb
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Tue Jan 30 14:46:40 2018 +0000
+
+    Merge branch 'property_fix' into 'master'
+
+    gobjectmodule: do not clear floating flag in set_/get_property
+
+    See merge request GNOME/pygobject!8
+
+commit 0dca3f4f577c540d8e09097b6e414708c8d54108
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Tue Jan 30 14:05:24 2018 +0100
+
+    setup.py: test: also run compat_test_pygtk tests
+
+ setup.py | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+commit 94904a17fb65b5174aca58c9e8ed6ebd50bc6cb3
+Merge: 1ec8d58e fd9e24a7
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Mon Jan 29 16:26:11 2018 +0000
+
+    Merge branch 'gitlabissue158' into 'master'
+
+    pygobject-object: fix memory corruption around list of closures
+
+    See merge request GNOME/pygobject!12
+
+commit fd9e24a73acde7313fbf96c946f4ce8dad130b33
+Author: Mikhail Fludkov <fludkov.me@gmail.com>
+Date:   Mon Jan 29 14:23:37 2018 +0100
+
+    pygobject-object: fix memory corruption around list of closures
+
+    https://gitlab.gnome.org/GNOME/pygobject/issues/158
+
+    The memory corruption occurs because of the race while accessing
+    PyGObjectData->closures list.
+
+    Protect PyGObjectData->closures by GIL in pygobject_unwatch_closure.
+    Despite the fact that we don't call any Python API in the function. We
+    use
+    GIL to be sure that PyGObjectData->closures list stays intact while
+    GC iterating the list inside pygobject_traverse. Otherwise we can
+    segfault while trying to call 'visit' function on an object that
+    was just freed in pygobject_unwatch_closure.
+
+ gi/pygobject-object.c |  5 +++++
+ tests/test_signal.py  | 50
+ ++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 55 insertions(+)
+
+commit 1ec8d58e879a3802f54190be3cdc23bd976ca01f
+Merge: 8c8dd210 7ed81918
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Mon Jan 29 11:40:40 2018 +0000
+
+    Merge branch 'fix_boxed_copies' into 'master'
+
+    Fix boxed copies
+
+    See merge request GNOME/pygobject!10
+
+commit 8c8dd210f7cb2001144dc00ab6adde9e840e5dcf
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Thu Jan 25 17:13:15 2018 +0100
+
+    setup.py: set zip_safe=False
+
+    We install .h/.pc files now and zipping them could be problematic,
+    so better don't allow it.
+
+ setup.py | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 06f981d83bb6f4b7d6043e9ee04277fcc2631d91
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Thu Jan 25 16:33:29 2018 +0100
+
+    setup.py: Install the pkg-config file
+
+    Skip installation when a wheel is built as it doesn't allow including
+    absolute paths and the .pc does.
+
+    Remove LIBFFI_PC as it's always the same.
+
+ configure.ac        |  2 --
+ pygobject-3.0.pc.in |  2 +-
+ setup.py            | 85
+ +++++++++++++++++++++++++++++++++++++++++++++++++----
+ 3 files changed, 80 insertions(+), 9 deletions(-)
+
+commit db78f98b0133102d77111c595df59f930e9b1c63
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Thu Jan 25 15:57:38 2018 +0100
+
+    setup.py: Install the header file
+
+ setup.py | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 200a9c940d9bf5b0104cedc96c94c55867aac440
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Thu Jan 25 15:42:04 2018 +0100
+
+    setup.py: Add logging for pycairo lookup and fail early if the header
+    isn't found. See #150
+
+    Log the pycairo module we find and the include path we deduce
+    from that.
+    Also check that the directory actually includes the right header file
+    instead of letting the compiler fail later on.
+
+    This will hopefully make it more clear why installing through pip
+    isn't working
+    in some cases (see #150 for some reports)
+
+ setup.py | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+commit 1fbf74eb06bbe2868fd40ea9f3fc1addc27e4bc3
+Author: Mathieu Duponchelle <mathieu@centricular.com>
+Date:   Sat Jan 20 04:44:46 2018 +0100
+
+    gobjectmodule: do not clear floating flag in set_/get_property
+
+ gi/gobjectmodule.c | 14 ++++++++++++--
+ 1 file changed, 12 insertions(+), 2 deletions(-)
+
+commit f2100902c6fdfd6a3daaab39d3325ffc9ada9a7d
+Author: Mathieu Duponchelle <mathieu@centricular.com>
+Date:   Sun Jan 21 19:17:10 2018 +0100
+
+    gi/types: make it possible to resolve ambiguous vmethod names
+
+    Related to https://gitlab.gnome.org/GNOME/pygobject/issues/105,
+    but the method exposed to resolve the ambiguities does not
+    use a decorator, as a decorator cannot rename the function it
+    wraps, which means that users will have to provide different names
+    if they want to implement ambiguous methods from multiple base
+    classes.
+
+    Instead, ambiguities can be resolved by implementing methods named
+    do_$namespaced_base_class_name_$vfunc_name, eg:
+
+    do_gst_base_src_query
+
+ gi/types.py | 50 ++++++++++++++++++++++++++++++++++++--------------
+ 1 file changed, 36 insertions(+), 14 deletions(-)
+
+commit 7ed8191818733b9130bce84f782dc6f8f734abf7
+Author: Mathieu Duponchelle <mathieu@centricular.com>
+Date:   Tue Jan 23 15:58:38 2018 +0100
+
+    to python struct marshalling: copy boxed during cleanup
+
+    If the boxed was passed with transfer nothing, we need to
+    make a copy of it in the boxed wrapper, this in order
+    to have a valid reference, but still let closures modify
+    the original reference while it is valid (during the closure)
+
+    This fixes an expected failure in the tests, that was added
+    by https://bugzilla.gnome.org/show_bug.cgi?id=722899, first fixed
+    by https://bugzilla.gnome.org/show_bug.cgi?id=726999 and broken
+    in the preceding commits.
+
+ gi/pygi-struct-marshal.c | 34 +++++++++++++++++++++++++++-------
+ tests/test_gi.py         |  1 -
+ 2 files changed, 27 insertions(+), 8 deletions(-)
+
+commit 80eab029ce4e181624d7b845a4b517051797080d
+Author: Mathieu Duponchelle <mathieu@centricular.com>
+Date:   Tue Jan 23 15:57:04 2018 +0100
+
+    to python marshalling: collect cleanup data
+
+    Similar to what is done for marshalling from python, we
+    collect cleanup data that will then be passed on to the
+    cleanup function.
+
+ gi/pygi-array.c               | 24 ++++++++++++++++++------
+ gi/pygi-basictype.c           |  8 +++++---
+ gi/pygi-basictype.h           |  3 ++-
+ gi/pygi-cache.h               | 13 ++++++++++---
+ gi/pygi-closure.c             |  9 +++++++--
+ gi/pygi-enum-marshal.c        |  6 ++++--
+ gi/pygi-error.c               |  3 ++-
+ gi/pygi-hashtable.c           | 13 +++++++++----
+ gi/pygi-invoke-state-struct.h |  3 +++
+ gi/pygi-invoke.c              | 17 +++++++++++++----
+ gi/pygi-list.c                | 38 +++++++++++++++++++++++++++++++-------
+ gi/pygi-marshal-cleanup.c     | 13 ++++++++-----
+ gi/pygi-object.c              |  8 +++++---
+ gi/pygi-struct-marshal.c      |  5 +++--
+ 14 files changed, 120 insertions(+), 43 deletions(-)
+
+commit 9d96df1ea3ad533885fbcae4de693a3cd81e765a
+Author: Mathieu Duponchelle <mathieu@centricular.com>
+Date:   Tue Jan 23 14:15:19 2018 +0100
+
+    pygi-boxed: make in-place copy safer
+
+    Making sure we don't attempt to g_boxed_copy a NULL pointer,
+    as this is explicitly disallowed, and setting slice-allocated
+    to FALSE once g_slice_free has been called.
+
+ gi/pygi-boxed.c | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+commit daefdfa3e4dc97b4ae38250358d722f09764cc9b
+Author: Mathieu Duponchelle <mathieu@centricular.com>
+Date:   Sun Jan 21 19:23:19 2018 +0100
+
+    Revert "Refactor boxed wrapper memory management strategy"
+
+    This reverts commit 85175047e66dfc0c0263eac91d8056a95d0a60a0.
+
+ gi/gimodule.c            |  6 +---
+ gi/overrides/GLib.py     |  4 +++
+ gi/overrides/GObject.py  |  3 --
+ gi/pygi-boxed.c          | 32 +++++---------------
+ gi/pygi-boxed.h          |  4 +--
+ gi/pygi-property.c       |  6 +++-
+ gi/pygi-source.c         |  6 ++--
+ gi/pygi-struct-marshal.c | 78
+ ++++--------------------------------------------
+ tests/test_gi.py         |  1 +
+ tests/test_source.py     |  8 ++---
+ 10 files changed, 29 insertions(+), 119 deletions(-)
+
+commit b0fbb13783a2ece048a812b233e1fad15c5b8a31
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Tue Jan 23 00:27:32 2018 +0100
+
+    setup.py: default to Python 3
+
+    autotools defaults to Python 3 as well, so do the same for
+    distutils.
+
+ setup.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit f59ba1ae65876df786458f785558f96d8b400c9a
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Mon Jan 22 23:09:10 2018 +0100
+
+    setup.py: Make the test command work under MSYS2
+
+    gobject-introspection requires an import lib (.dll.a) on Windows,
+    so build that as well.
+
+    Disable the dbus tests until we have a temp bus like with autotools.
+    Unset MSYSTEM to disable the os.sep hackery.
+
+    This hit a bug in GI for the mingw+no-libtool case, see
+    https://bugzilla.gnome.org/show_bug.cgi?id=791902
+    The fix has been applied to MSYS2 in the meantime, see
+    https://github.com/Alexpux/MINGW-packages/pull/3308
+
+ .gitignore |  2 ++
+ setup.py   | 57 +++++++++++++++++++++++++++++++++++++++++++--------------
+ 2 files changed, 45 insertions(+), 14 deletions(-)
+
+commit 89d66dd0aa48aaef0a70aba8a17234bc188ef609
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Sun Jan 21 15:32:26 2018 +0100
+
+    setup.py: add a "quality" command
+
+    This just calls flake8 internally
+
+ setup.py | 19 +++++++++++++++++++
+ 1 file changed, 19 insertions(+)
+
+commit efb19909ebf15c8bdbd0b4acfe0046a512ba3b82
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Sat Jan 20 12:22:41 2018 +0100
+
+    gitlab-ci: switch to a non-srcdir build
+
+ .gitlab-ci/test-docker.sh | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+commit 722ef028739b1e3e585f49418a98efa98834bc02
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Fri Jan 19 20:34:04 2018 +0100
+
+    autotools: use flake8 instead of pep8/pyflakes
+
+    flake8 uses pep8/pycodestyle/pyflakes internally, so there should not
+    by any difference.
+
+    The nice thing about it is that we can store the configuration in
+    setup.cfg and linting comes down to just executing "flake8".
+    It also allows to ignore warnings with inline comments, so that
+    when avoiding a warning isn't possible it doesn't need to be disabled
+    for the whole codebase.
+
+ .gitlab-ci/test-docker.sh          |  2 +-
+ MANIFEST.in                        |  1 +
+ Makefile.am                        | 19 +++----------------
+ docs/devguide/building_testing.rst |  2 +-
+ setup.cfg                          |  3 +++
+ 5 files changed, 9 insertions(+), 18 deletions(-)
+
+commit 162b6ab75d3c3d1717245f5957433b8cf400b17a
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Fri Jan 19 20:08:31 2018 +0100
+
+    gitlab-ci: Install pep8 package, "make check.quality" requires it
+
+    While pep8 is replaced by pycodestyle, the "make check.quality"
+    command still uses pep8. Install it for now and fix some warnings
+    which slipped through due to pep8 not running.
+
+ .gitlab-ci/test-docker.sh    | 2 +-
+ gi/overrides/GLib.py         | 5 +++--
+ tests/test_overrides_glib.py | 1 -
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+commit c365cc9c14a001dcbe294375d322a02401a1814d
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Fri Jan 19 15:12:22 2018 +0100
+
+    Update NEWS
+
+    List the authors like before and link them to the gitlab user profile.
+
+ NEWS         | 7 +++++--
+ docs/conf.py | 1 +
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+commit 2ccef77f240149891fe9e8f557c7afc951a91839
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Thu Jan 18 17:08:26 2018 +0100
+
+    setup.py: add a "test" command which is equal to "make check"
+    with autotools
+
+    Adds a "build_tests" command which builds all resources required
+    for testing.
+    It has some simple dependency awareness and only rebuilds if any of
+    the direct
+    sources have changed. Passing -f/--force will force a rebuild.
+
+    Adds a new "test" command which builds the main extension module in
+    the source
+    directory, runs "build_tests" and finally runs all tests.
+
+    Extends the "distcheck" command to run the tests after extracting
+    the source
+    distribution and run the distcheck command in the gitlab CI script.
+
+    Only tested on Linux.
+
+ .gitlab-ci/test-docker.sh          |   3 +
+ docs/devguide/building_testing.rst |  28 ++--
+ setup.py                           | 336
+ +++++++++++++++++++++++++++++++------
+ tests/runtests.py                  |   1 +
+ 4 files changed, 305 insertions(+), 63 deletions(-)
+
+commit 812cdbfec0c8c9866c339a5eb01268672514d447
+Author: Alberto Ruiz <aruiz@gnome.org>
+Date:   Thu Jan 18 18:29:33 2018 +0100
+
+    GVariant add support to maybe types
+
+    While adding support to maybe types I realized that the GVariant
+    override was replicating a lot of logic from GVariant to parse
+    format strings by itself. This patch simplifies the creation of
+    GVariants from Python types and relies on GVariantType to interpret
+    the format string and walk through its items.
+
+    This patch also expands test coverage for maybe types.
+
+ gi/overrides/GLib.py         | 164
+ ++++++++++++-------------------------------
+ tests/test_overrides_glib.py |  49 ++++++++++---
+ 2 files changed, 86 insertions(+), 127 deletions(-)
+
+commit 54059b93a5559a4ccf28fa8014cacabbcf140902
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Thu Jan 18 08:39:53 2018 +0100
+
+    Update NEWS
+
+ NEWS | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+commit e5a21f56cd375373741dcb2f2e8eefae349cffbc
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Mon Jan 15 20:44:27 2018 +0100
+
+    overrides: Fix Gtk.Adjustment.__init__ overrides not setting "value"
+    sometimes. Fixes #151
+
+    Gtk.Adjustment allows passing positional arguments to __init__
+    which get
+    translated to a dict for passing to GObject.Object.__init__. In case
+    of the
+    first argument "value", if "value" is passed before the upper and
+    lower bound to Object.__init__ it will be set to 0 instead.
+
+    In Python 2 this happened to work (at least on my machine) because
+    "value" got placed after the bounds (in terms of iteration order)
+    in the final dict value passed to Object.__init__.
+
+    To work around this, set "value" again after __init__().
+    A similar work around already exists when "value" is passed as
+    a kwarg.
+
+ gi/overrides/Gtk.py         | 2 ++
+ tests/test_overrides_gtk.py | 6 ++++++
+ 2 files changed, 8 insertions(+)
+
+commit 5cb3d7af47310d0b6174811d0d298e7d1869624c
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Mon Jan 15 18:02:39 2018 +0100
+
+    Update MANIFEST.in to include the CI scripts and config files
+
+    This fixes "setup.py distcheck", which makes sure all files in git end
+    up in the sdist.
+
+ MANIFEST.in | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 74ad29c908447a4054dbd3427a09a1d44ff00f6d
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Fri Jan 12 09:49:36 2018 +0100
+
+    docs: Add Anaconda to the list of software that is using PyGObject
+
+    https://fedoraproject.org/wiki/Anaconda
+
+ docs/index.rst | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 9fe7eb528c711e56ee58ce3b8a4d7b4270708d40
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Fri Jan 12 09:42:49 2018 +0100
+
+    docs: Add custom roles for linking to gitlab issues and merge requests
+
+    This allows one to use :issue:`42` or :mr:`42` in the documentation
+    and the NEWS file and will result in links pointing to the
+    specified issue/merge request.
+
+ docs/conf.py | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 91a1ec0ef6e3cbfb6c83ae8e17564733c8e840f6
+Author: Christoph Reiter <creiter@src.gnome.org>
+Date:   Wed Jan 10 18:17:56 2018 +0100
+
+    docs: Update for the git repo move from git.gnome.org to
+    gitlab.gnome.org
+
+    Changes all the links to point to the gitlab instance.
+
+    Adds the gitlab setup to the sphinx theme configuration, so the theme
+    can show "Edit on GitLab" links on each page.
+
+    Create a new page pointing to the git report and bug tracker.
+    Someone on IRC mentioned that this info is hard to find, so try
+    to make
+    it more proiminent.
+
+ docs/bugs_repo.rst            | 31 +++++++++++++++++++++++++++++++
+ docs/changelog.rst            |  3 ++-
+ docs/conf.py                  |  6 ++++++
+ docs/devguide/dev_environ.rst |  4 ++--
+ docs/devguide/overview.rst    | 24 ++++--------------------
+ docs/guide/porting.rst        |  2 +-
+ docs/index.rst                |  1 +
+ 7 files changed, 47 insertions(+), 24 deletions(-)
+
+commit adf5e51ccf9d9dbf938c0da496e0d4d81d3284f6
+Author: Christoph Reiter <reiter.christoph@gmail.com>
+Date:   Fri Dec 22 16:34:53 2017 +0100
+
+    Add gitlab CI tests
+
+    Adds a Dockerfile which is available on the docker hub
+    and gets used by the gitlab test runner.
+
+    The tests get executed in an Ubuntu 17.04 image for various Python
+    versions and consist of building, testing, code quality testing and
+    documentation build testing.
+
+ .gitlab-ci.yml            | 22 ++++++++++++++++++++++
+ .gitlab-ci/Dockerfile     | 32 ++++++++++++++++++++++++++++++++
+ .gitlab-ci/README.rst     |  1 +
+ .gitlab-ci/test-docker.sh | 30 ++++++++++++++++++++++++++++++
+ 4 files changed, 85 insertions(+)
+
+commit 661e64ce6091724b86a934268daa2c80bda46eb5
+Author: Christoph Reiter <creiter@src.gnome.org>
+Date:   Thu Dec 21 12:33:07 2017 +0100
+
+    docs: Include NEWS entries for releases not made on the master branch
+
+    So that every release is visible in the online documentation.
+    The list is sorted by release date.
+
+ NEWS               | 335
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ docs/changelog.rst |   3 +-
+ 2 files changed, 337 insertions(+), 1 deletion(-)
+
+commit a109b4c96537e8ba3062a56699f3aefc63c82d6d
+Author: Christoph Reiter <creiter@src.gnome.org>
+Date:   Wed Dec 20 15:59:05 2017 +0100
+
+    docs: convert NEWS file to reST and link bugs
+
+    Looks nicer in the online docs and makes it easier to look
+    up bugs and link to specific releases.
+
+    Rename the custom reST role for bugs from gnomebug to bzbug.
+    With the upcoming move to gitlab that makes it more clear that those
+    are referencing bugzilla.
+
+    Adjust the "make release-news" target to output something similar
+    to the new format to make converting to reST easier.
+
+    Update the maintainer release todo list to state that the changelog
+    should be copied from stable branches to master. It would be
+    nice if the NEWS file in master, which gets exposed on readthedocs,
+    would contain all the information available.
+
+ Makefile.am                           |    4 +-
+ NEWS                                  | 5171
+ +++++++++++++++++----------------
+ docs/Makefile                         |    2 +-
+ docs/changelog.rst                    |    1 -
+ docs/conf.py                          |    2 +-
+ docs/devguide/override_guidelines.rst |   14 +-
+ docs/maintguide.rst                   |    2 +
+ 7 files changed, 2712 insertions(+), 2484 deletions(-)
+
+commit df77beb730c336e5fdc87f4225af0842edfbe56a
+Author: Christoph Reiter <creiter@src.gnome.org>
+Date:   Mon Dec 11 18:50:22 2017 +0100
+
+    version bump
+
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 22ef18884d1c7cb5b9ba68ef78489bb779a347b3
+Author: Christoph Reiter <creiter@src.gnome.org>
+Date:   Mon Dec 11 18:40:47 2017 +0100
+
+    release 3.27.1
+
+ NEWS | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
 commit 2e30c7fbfcb579efb2ff7134979f169f673ac285
 Author: Christoph Reiter <creiter@src.gnome.org>
 Date:   Mon Dec 11 18:32:16 2017 +0100
index 72a2813..a4486fb 100644 (file)
@@ -1,3 +1,4 @@
+include setup.cfg
 include *.am
 include autogen.sh
 include configure.ac
@@ -9,8 +10,10 @@ include NEWS
 include tools/pygi-convert.sh
 include pygobject.doap
 include README.rst
+include .gitlab-ci.yml
 recursive-include examples *.py *.am *.png *.css *.ui *.gif *.gresource *.jpg *.xml
 recursive-include gi *.am *.h
 recursive-include pygtkcompat *.am
 recursive-include tests *.py *.c *.h *.xml *.supp *nouppera *.am
 recursive-include docs *.rst *.svg LICENSE *.ico *.png *.css *.py *.dia Makefile
+recursive-include .gitlab-ci *.sh *.rst Dockerfile
index c097d9d..0fbf3cc 100644 (file)
@@ -1,10 +1,7 @@
-# Limit PyFlakes and PEP8 to these directories.
-pycheck_dirs = examples gi tests pygtkcompat
-
 # Part of the gi subdirectory is handled with non-recursive make to avoid
 # py-compile getting confused between gi/types.py and Python's standard
 # types module.
-SUBDIRS = . $(pycheck_dirs)
+SUBDIRS = . examples gi tests pygtkcompat
 
 PLATFORM_VERSION = 3.0
 
@@ -21,6 +18,7 @@ EXTRA_DIST = \
        m4/python.m4 \
        m4/introspection.m4 \
        setup.py \
+       setup.cfg \
        MANIFEST.in \
        README.rst \
        docs
@@ -98,7 +96,7 @@ uninstall-local:
        rm -f $(DESTDIR)$(pyexecdir)/$(EGG_NAME).egg-info
 
 release-news:
-       printf "%-8s%s\n" "$(VERSION)" "`LC_TIME=C date '+%d-%b-%Y'`" > NEWS.tmp
+       printf "%s - %s\n\n" "$(VERSION)" "`LC_TIME=C date -I`" > NEWS.tmp
 
        @echo -e "\n\n\nFor blogging, you can copy&paste this HTML formatted news:"
        @echo "-------------- 8< -------------"
@@ -107,7 +105,7 @@ release-news:
        for commit in `git rev-list $$last..`; do \
           data=`git log --format="format:%s%n%an%n%b" $$commit^..$$commit`; \
           echo "$$data" | perl -e '$$subj = <>; chomp $$subj; $$author = <>; chomp $$author; while (<>) { if (/bugzilla.gnome.org.*id=([0-9]+)/) { $$bug = $$1 }};  print "  <li>$$subj ($$author)"; if ($$bug) { print " (<a href=\"https://bugzilla.gnome.org/show_bug.cgi?id=$$bug\">#$$bug</a>)"; }; print "</li>\n"'; \
-          echo "$$data" | perl -e '$$subj = <>; chomp $$subj; $$author = <>; chomp $$author; while (<>) { if (/bugzilla.gnome.org.*id=([0-9]+)/) { $$bug = $$1 }};  print "        - $$subj ($$author)"; if ($$bug) { print " (#$$bug)"; }; print "\n"' >> NEWS.tmp; \
+          echo "$$data" | perl -e '$$subj = <>; chomp $$subj; $$author = <>; chomp $$author; while (<>) { if (/bugzilla.gnome.org.*id=([0-9]+)/) { $$bug = $$1 }};  print "* $$subj ($$author)"; if ($$bug) { print " (#$$bug)"; }; print "\n"' >> NEWS.tmp; \
         done
        @echo "</ul>"
        @echo "-------------- 8< -------------"
@@ -145,19 +143,8 @@ dist-hook: $(BUILT_EXTRA_DIST)
          rm -f $(distdir)/$$f && cp $$d/$$f $(distdir) || exit 1; done
        rm -rf "$(distdir)/docs/_build"
 
-# pycheck_subdirs = 
-
 check.quality:
-       @echo "  CHECK  Pyflakes" $(pycheck_dirs)
-       @if type pyflakes >/dev/null 2>&1; then \
-               (cd $(abs_top_srcdir) && PYFLAKES_BUILTINS="basestring,long,unicode" pyflakes $(pycheck_dirs) ); \
-       else echo "skipped, pyflakes not installed"; \
-       fi
-       @echo "  CHECK  PEP8";
-       @if type pep8 >/dev/null 2>&1; then \
-               (cd $(abs_top_srcdir) && pep8 --ignore=E501,E123,E124,E402,E731,E722 --repeat --show-source $(pycheck_dirs) ); \
-       else echo "skipped, pep8 not installed"; \
-       fi
+       (cd $(abs_top_srcdir) && $(PYTHON) -m flake8);
 
 check.gdb:
        cd tests && $(MAKE) check.gdb
index ddf2c59..40c65cb 100644 (file)
@@ -323,7 +323,6 @@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
 LCOV = @LCOV@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
-LIBFFI_PC = @LIBFFI_PC@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
@@ -434,13 +433,10 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 
-# Limit PyFlakes and PEP8 to these directories.
-pycheck_dirs = examples gi tests pygtkcompat
-
 # Part of the gi subdirectory is handled with non-recursive make to avoid
 # py-compile getting confused between gi/types.py and Python's standard
 # types module.
-SUBDIRS = . $(pycheck_dirs)
+SUBDIRS = . examples gi tests pygtkcompat
 PLATFORM_VERSION = 3.0
 CLEANFILES = \
        `find "$(builddir)" -type f -name "*.pyc" -print`
@@ -455,6 +451,7 @@ EXTRA_DIST = \
        m4/python.m4 \
        m4/introspection.m4 \
        setup.py \
+       setup.cfg \
        MANIFEST.in \
        README.rst \
        docs
@@ -1133,7 +1130,7 @@ uninstall-local:
        rm -f $(DESTDIR)$(pyexecdir)/$(EGG_NAME).egg-info
 
 release-news:
-       printf "%-8s%s\n" "$(VERSION)" "`LC_TIME=C date '+%d-%b-%Y'`" > NEWS.tmp
+       printf "%s - %s\n\n" "$(VERSION)" "`LC_TIME=C date -I`" > NEWS.tmp
 
        @echo -e "\n\n\nFor blogging, you can copy&paste this HTML formatted news:"
        @echo "-------------- 8< -------------"
@@ -1142,7 +1139,7 @@ release-news:
        for commit in `git rev-list $$last..`; do \
           data=`git log --format="format:%s%n%an%n%b" $$commit^..$$commit`; \
           echo "$$data" | perl -e '$$subj = <>; chomp $$subj; $$author = <>; chomp $$author; while (<>) { if (/bugzilla.gnome.org.*id=([0-9]+)/) { $$bug = $$1 }};  print "  <li>$$subj ($$author)"; if ($$bug) { print " (<a href=\"https://bugzilla.gnome.org/show_bug.cgi?id=$$bug\">#$$bug</a>)"; }; print "</li>\n"'; \
-          echo "$$data" | perl -e '$$subj = <>; chomp $$subj; $$author = <>; chomp $$author; while (<>) { if (/bugzilla.gnome.org.*id=([0-9]+)/) { $$bug = $$1 }};  print "        - $$subj ($$author)"; if ($$bug) { print " (#$$bug)"; }; print "\n"' >> NEWS.tmp; \
+          echo "$$data" | perl -e '$$subj = <>; chomp $$subj; $$author = <>; chomp $$author; while (<>) { if (/bugzilla.gnome.org.*id=([0-9]+)/) { $$bug = $$1 }};  print "* $$subj ($$author)"; if ($$bug) { print " (#$$bug)"; }; print "\n"' >> NEWS.tmp; \
         done
        @echo "</ul>"
        @echo "-------------- 8< -------------"
@@ -1179,19 +1176,8 @@ dist-hook: $(BUILT_EXTRA_DIST)
          rm -f $(distdir)/$$f && cp $$d/$$f $(distdir) || exit 1; done
        rm -rf "$(distdir)/docs/_build"
 
-# pycheck_subdirs = 
-
 check.quality:
-       @echo "  CHECK  Pyflakes" $(pycheck_dirs)
-       @if type pyflakes >/dev/null 2>&1; then \
-               (cd $(abs_top_srcdir) && PYFLAKES_BUILTINS="basestring,long,unicode" pyflakes $(pycheck_dirs) ); \
-       else echo "skipped, pyflakes not installed"; \
-       fi
-       @echo "  CHECK  PEP8";
-       @if type pep8 >/dev/null 2>&1; then \
-               (cd $(abs_top_srcdir) && pep8 --ignore=E501,E123,E124,E402,E731,E722 --repeat --show-source $(pycheck_dirs) ); \
-       else echo "skipped, pep8 not installed"; \
-       fi
+       (cd $(abs_top_srcdir) && $(PYTHON) -m flake8);
 
 check.gdb:
        cd tests && $(MAKE) check.gdb
diff --git a/NEWS b/NEWS
index 4185039..9c51af8 100644 (file)
--- a/NEWS
+++ b/NEWS
-3.27.1  11-Dec-2017
-        - Revert "setup.py: Also set setup_requires to require pycairo" (Christoph Reiter)
-        - setup.py: Also set setup_requires to require pycairo (Christoph Reiter)
-        - setup.py: Provide a os.path.samefile fallback for Python 2 under Windows (Christoph Reiter)
-        - Add sphinx based documentation (Christoph Reiter) (#791448)
-        - PKG-INFO: Revert name back to PyGObject (Christoph Reiter)
-        - setup.py: Rework pycairo discovery to not use pkg-config (Christoph Reiter)
-        - setup.py: Fix the distcheck command on Windows (Christoph Reiter)
-        - setup.py: Remove various classifiers and the download-url which aren't accepted by pypi (Christoph Reiter)
-        - version bump (Christoph Reiter)
-
-3.27.0  08-Dec-2017
-        - demo: pep8 fixes (Christoph Reiter)
-        - Fix ctypes.PyDLL construction under Windows (Christoph Reiter) (#622084)
-        - configure.ac: Error out in case autoconf-archive isn't installed (Christoph Reiter) (#784428)
-        - Move pygi-convert.sh into tools (Christoph Reiter)
-        - README: Convert to reST (Christoph Reiter)
-        - demo: Move demo into examples and dist it (Christoph Reiter) (#735918)
-        - demo: Add new Gtk.FlowBox example (Gian Mario Tagliaretti) (#735918)
-        - demo: Use HeaderBar for main app window (Simon Feltman) (#735918)
-        - demo: PyFlakes and PEP8 fixes (Simon Feltman) (#735918)
-        - demo: Rename gtk-demo.py to demo.py (Simon Feltman) (#735918)
-        - demo: Rename demos/gtk-demo to simply demo (Simon Feltman) (#735918)
-        - Remove AUTHORS file (Christoph Reiter)
-        - Remove pre-commit.hook (Christoph Reiter)
-        - setup.py: Port to distutils/setuptools (Christoph Reiter) (#789211)
-        - Install a default SIGINT handler for functions which start an event loop (Christoph Reiter) (#622084)
-        - Make Python OS signal handlers run when an event loop is idling (Christoph Reiter) (#622084)
-        - Drop Python 3.3 support (Christoph Reiter) (#790787)
-        - Drop set_value usage in Gtk.List/TreeStore.set override (Sander Sweers) (#790346)
-        - pygobject-object: Fix Python GC collecting a ref cycle too early (Christoph Reiter) (#731501)
-        - Fix potential uninitialized memory access during GC (Daniel Colascione) (#786872)
-        - test: revert parts of the previous test as it's broken on 32 bit builds (Christoph Reiter) (#786948)
-        - flags: Add testcase for bug 786948 (Christoph Reiter) (#786948)
-        - fix potential overflow when marshalling flags from py interface (Philippe Renon) (#786948)
-        - to_py_array: Properly handle enum array items (Christoph Reiter) (#788890)
-        - pygobject.doap: Add myself as maintainer (Christoph Reiter)
-        - closure: Fix unaligned and out-of-bounds access (James Clarke) (#788894)
-        - build: Fix not installing .egg-info file (Christoph Reiter) (#777719)
-        - Drop pygobject-3.0-uninstalled.pc file (Christoph Reiter)
-        - tests: Windows fix (Christoph Reiter)
-        - tests: some more C locale fixes (Christoph Reiter)
-        - tests: Make the test suite pass with the C locale (Christoph Reiter)
-        - configure.ac: post-release version bump to 3.27.0 (Christoph Reiter)
-
-3.26.0  12-Sep-2017
-        - configure.ac: pre-release version bump to 3.26.0 (Christoph Reiter)
-        - closure: silence a new compiler warning (Christoph Reiter)
-        - tests: skip some failing test under Windows with Python 3.6 (Christoph Reiter)
-        - tests: pyflakes/pep8 fixes (Christoph Reiter)
-        - tests: Fix cairo test with pycairo >= 1.13 (Christoph Reiter)
-        - Make sure version information passed to require_version is a string. (Benjamin Berg) (#781582)
-        - configure.ac: post-release version bump to 3.25.2 (Christoph Reiter)
-
-3.25.1  21-Apr-2017
-        - Bump pycairo requirement to 1.11.1 (Christoph Reiter) (#707196)
-        - configure.ac: Always disable -Werror (Christoph Reiter)
-        - foreign-cairo: Enable cairo.Region support also on Python 2 if available (Christoph Reiter)
-        - configure.ac: remove unused PLATFORM variable (Christoph Reiter)
-        - configure.ac: Remove unused PySignal_SetWakeupFd check (Christoph Reiter)
-        - tests: remove python 2.5/3.2 compat code (Christoph Reiter)
-        - configure.ac: Require Python 3.3 (Christoph Reiter)
-        - tests: Make test suite run with GTK+ 4 (Christoph Reiter)
-        - tests: always call require_version; add TEST_GTK_VERSION env var (Christoph Reiter)
-        - tests: Fix make check.valgrind (Christoph Reiter)
-        - tests: Don't skip Regress tests when cairo is missing (Christoph Reiter)
-        - tests: fix invalid regex escaping (Christoph Reiter)
-        - tests: avoid mapping a GtkWindow (Christoph Reiter) (#780812)
-        - tests: silence some glib deprecation warnings (Christoph Reiter) (#780812)
-        - tests: avoid deprecation warnings for assertRegexpMatches/assertRaisesRegexp (Christoph Reiter) (#780812)
-        - pygi-source: clear exceptions in finalize handler (Christoph Reiter) (#780812)
-        - Fix pep8 errors (Christoph Reiter)
-        - Remove gi._gi._gobject and gi._gobject modules (Christoph Reiter) (#735206)
-        - Remove gi._gi._glib module (Christoph Reiter) (#735206)
-        - GValue: add overflow checking for py -> gint; forward marshaling exceptions (Christoph Reiter) (#769789)
-        - pygobject_lookup_class: clear exceptions between calls and don't return with one set (Christoph Reiter) (#773394)
-        - Avoid some new deprecation warnings (Christoph Reiter) (#780768)
-        - Raise RuntimeError in case an uninitilialized GObject.Object is marshaled (Christoph Reiter) (#730908)
-        - closure: support unichar args (Christoph Reiter) (#759276)
-        - Add support for bytes and non-utf-8 file names. (Christoph Reiter) (#746564)
-        - test_gi: use correct min/max constants for gsize/gssize (Christoph Reiter) (#780591)
-        - Don't use long format string for formatting pointers (Christoph Reiter) (#780591)
-        - Fix conversion from pointers to hashfunc return values. (Christoph Reiter) (#780591)
-        - Fix PyLong <-> GPid conversion on 64bit Windows (Christoph Reiter) (#780591)
-        - property: support setting flags (Christoph Reiter) (#726484)
-        - overrides: warn on instantiation of Gio.VolumeMonitor (Christoph Reiter) (#744690)
-        - Remove gi.overrides.overridefunc (Christoph Reiter) (#686835)
-        - tests: Reduce usage of timeout_add() and sleep() (Christoph Reiter) (#698548)
-        - tests: Remove TestMainLoop.test_concurrency (Christoph Reiter) (#698548)
-        - Update .gitignore: add *.dll, *.dylib, .DS_STORE (Christoph Reiter)
-        - tests: Make test suite run on Windows (Christoph Reiter) (#780396)
-        - tests: Make test suite run on macOS (Christoph Reiter) (#780396)
-        - Fix various compiler warnings for 32bit builds (Christoph Reiter) (#780409)
-        - pep8 fix (Christoph Reiter)
-        - testhelper: only link against libpython on Windows (Christoph Reiter) (#773803)
-        - overrides: Fix Gtk.TextBuffer.insert_with_tags_by_name() with no tags (Garrett Regier) (#772896)
-        - Make use of instance-argument annotations (Christoph Reiter) (#735076)
-        - Remove pyglib_gil_state_ensure/pyglib_gil_state_release (Christoph Reiter) (#699440)
-        - Remove support for building without threads (Christoph Reiter) (#699440)
-        - pygtkcompat: Allow multiple calls to enable(), enable_gtk() as long as the version matches (Christoph Reiter) (#759009)
-        - tests: Update Makefile for building tests on OS X (Simon Feltman) (#762176)
-        - testhelper: propagate exception if _gobject could not be imported (Mikhail Fludkov) (#772949)
-        - pygi-info: initialize GIArgument before passing it to g_constant_info_get_value (Christoph Reiter) (#772949)
-        - tests: build libregress with disabled cairo (Mikhail Fludkov) (#772949)
-        - tests: use g-ir utils found by pkg-config (Mikhail Fludkov) (#772949)
-        - Add a foreign type for cairo_region_t. (Shyouzou Sugitani) (#667959)
-        - aclocal: make local file discover by reading AC_CONFIG_MACRO_DIR work (Christoph Reiter) (#777713)
-        - Port from gnome-common to autoconf-archive (Christoph Reiter) (#777713)
-        - Fix various potential compiler warnings (Christoph Reiter) (#777713)
-        - configure.ac: post-release version bump to 3.25.0 (Christoph Reiter)
-        - Remove egg make target (Christoph Reiter) (#777719)
-        - Remove legacy docs (Christoph Reiter) (#777719)
-
-3.24.0  20-Mar-2017
-        - configure.ac: pre-release version bump to 3.24.0 (Christoph Reiter)
-
-3.23.92 13-Mar-2017
-        - overrides: Update for Gdk-4.0 and Gtk+-4.0 (Fabian Orccon) (#777680)
-        - Disable -Werror=missing-prototypes (Christoph Reiter) (#777534)
-        - Fix new PEP8 errors (Christoph Reiter) (#776009)
-        - Move pep8/pyflakes tests from 'make check' to 'make check.quality' (Christoph Reiter) (#764087)
-        - overrides: Update for Gtk-4.0 (Christoph Reiter) (#773315)
-        - Handle exception unreffing Variant at exit (Dan Nicholson) (#776092)
-        - Handle multiple deinit of callable cache (Dan Nicholson) (#776092)
-        - configure.ac: post-release version bump to 3.23.0 (Christoph Reiter)
-
-3.22.0  19-Sep-2016
-        - configure.ac: pre-release version bump to 3.22.0 (Christoph Reiter)
-
-3.21.92 11-Sep-2016
-        - Handle nullable filename parameters (Christoph Reiter) (#770821)
-        - Fix list/hashtable enum <-> hash conversion on 64-bit big endian (Aurelien Jarno) (#770608)
-        - Allow passing sockets to io_add_watch on win32 (Lukas K) (#766396)
-        - tests: use dbus-run-session instead of dbus-launch to run tests (Michael Biebl) (#770798)
-        - configure.ac: post-release version bump to 3.21.92 (Christoph Reiter)
-
-3.21.91 25-Aug-2016
-        - Allow installing with pip (Mathieu Bridon) (#767988)
-        - Skip a test with older glib (Christoph Reiter) (#740301)
-        - Fix a test with Python 3.1/3.2 (Arfrever Frehtes Taifersar Arahesis, Christoph Reiter) (#740324)
-        - tests: Use places kwarg for assertAlmostEqual (Arfrever Frehtes Taifersar Arahesis, Christoph Reiter) (#740337)
-        - Print exception if marshalling a signal argument fails (Christoph Reiter) (#748198)
-        - overrides: allow treemodel sequence shorthands (Marinus Schraal) (#766580)
-        - Remove pygobject-external.h (Christoph Reiter) (#767084)
-        - Remove pygobject-private.h and rename pygobject.c to pygobject-object.c (Christoph Reiter) (#767084)
-        - Merge pyglib-private.h into pyglib.h (Christoph Reiter) (#767084)
-        - Remove pygi.h and pygi-private.h (Christoph Reiter) (#767084)
-        - configure.ac: post-release version bump to 3.21.1 (Simon Feltman)
-
-3.21.0  24-Apr-2016
-        - gi: Add require_versions() function (Dustin Falgout) (#761141)
-        - test_gerror_novalue: Don't assign the error to a variable
-          (Iain Lane) (#764165)
-        - build: Do not enable code coverage based on lcov
-          (Emmanuele Bassi) (#764075)
-
-3.20.0  21-Mar-2016
-
-3.19.92 15-Mar-2016
-
-3.19.91 01-Mar-2016
-        - Fix marshaling of GError stored in GValue
-          (Simon Feltman) (Thibault Saunier) (#761592)
-        - Fix marshaling or GError from Python to C from function calls
-          (Simon Feltman) (#685197)
-        - Error handling/reporting fixes (Christoph Reiter) (#751956)
-        - Fix crash due to GVariant implemented as PyGBoxed not PyGIStruct
-          (Christoph Reiter) (#751956)
-        - Fix crash with GValueArray stored in GValue
-          (Mikhail Fludkov) (#754359)
-
-3.19.90 20-Feb-2016
-        - tests: Set the active style context state before retrieving values
-          (Simon Feltman)
-        - tests: Fix crash with empty drag source icon names
-          (Simon Feltman) (#762392)
-        - Try to import GdkX11 in Gdk overrides (Christoph Reiter) (#673396)
-        - Fix import warnings pointing to the wrong code with CPython 3.3/3.5
-          (Christoph Reiter) (#757184)
-
-3.19.2  31-Oct-2015
-        - tests: Fix failure due to new GTK+ warning regarding size_allocate()
-          (Simon Feltman)
-        - Fix build warnings regarding _POSIX_C_SOURCE redefinition
-          (Simon Feltman)
-        - Drop -std=c90 for now (Matthias Clasen)
-
-3.19.1  30-Oct-2015
-        - Use a named tuple for returning multiple values (Christoph Reiter) (#727374)
-        - enum/flags: use gir info for type names and __repr__ instead of the gtype name (Christoph Reiter) (#657915)
-        - Improve and unify __repr__ format for PyGObject, PyGBoxed and PyGIStruct (Christoph Reiter) (#657915)
-        - Don't leak internal RepositoryError on import. (Christoph Reiter) (#756033)
-        - Import dependencies when importing typelibs from gi.repository (Christoph Reiter) (#656314)
-        - Fix Gdk.rectangle_intersect/rectangle_union missing with GTK+ 3.18 (Christoph Reiter) (#756364)
-        - Don't import inspect at module level (Christoph Reiter)
-        - invoke state: add a free memory cache for PyGIInvokeArgState (Christoph Reiter) (#750658)
-        - invoke/closure: reduce g_slice_alloc usage (Christoph Reiter) (#750658)
-        - pep8: ignore new errors reported by pep8 1.6 (Christoph Reiter)
-        - Bump g-i dependency to latest stable (Garrett Regier)
-        - Avoid calling g_slist_length() during invoke (Garrett Regier)
-        - Simplify closure_convert_arguments() (Garrett Regier)
-        - Remove a level of indentation in convert_ffi_arguments() (Garrett Regier)
-        - Prevent passing the user data multiple times to callbacks (Garrett Regier) (#750347)
-        - Support throwing exceptions in closures (Garrett Regier) (#710671)
-        - Don't emit require_version warning if namespace was loaded previously using g_irepository_require (Christoph Reiter) (#754491)
-        - configure.ac: post release version bump to 3.19.1 (Garrett Regier)
-
-3.18.0  22-Sep-2015
-
-3.17.90 19-Aug-2015
-        - Allow passing unicode lists to GStrv properties on Python 2
-          (Christoph Reiter) (#744745)
-        - Avoid a silent long to int truncation (Rui Matos) (#749698)
-        - Handle gtype marshalling (Mathieu Bridon) (#749696)
-        - pygi-foreign-cairo.c: fix include for py3cairo.h
-          (Daniel Hahler) (#746742)
-        - tests: Silence various error messages and warnings
-          (Christoph Reiter) (#751156)
-        - Fix test regression when xdg-user-dirs is not installed
-          (Christoph Reiter) (#751299)
-        - Explicitly check if an override exists instead of ImportError
-          (Garrett Regier) (#749532)
-
-3.17.1  15-Jun-2015
-        - Add gi.PyGIWarning used when import version is not specified
-          (Christoph Reiter) (#727379)
-        - Remove Gdk.Rectangle alias with newer gobject-introspection and GTK+
-          (Christoph Reiter) (#749625)
-        - overrides: Provide _overrides_module attribute
-          (Christoph Reiter) (#736678)
-        - overrides: Conditionalize touch override support in Gdk
-          (Simon Feltman) (#747717)
-        - Field setters: Remove unneeded type/range checks and unused code
-          (Christoph Reiter) (#746985)
-        - pygi-argument: Remove unused imports/includes
-          (Christoph Reiter) (#746985)
-        - Improve test coverage for field setters/getters
-          (Christoph Reiter) (#746985)
-
-3.16.0  24-Mar-2015
-
-3.15.91 05-Mar-2015
-        - tests: Don't use deprecated override attributes
-          (Christoph Reiter) (#743514)
-        - Add GLib.MINFLOAT etc. and mark GObject.G_MINFLOAT etc. deprecated
-          (Christoph Reiter) (#743514)
-        - Emit PyGIDeprecationWarning when accessing deprecated override attributes
-          (Christoph Reiter) (#743514)
-        - Add namespace and container name to all warnings/error messages
-          (Christoph Reiter) (#743468)
-        - tests: Add test for GIRepository.UnionInfo.get_size()
-          (Garrett Regier) (#745362)
-        - Avoid duping filenames when marshalling from Python to C
-          (Garrett Regier) (#744719)
-
-3.15.0  20-Feb-2015
-        - Avoid copying bytearrays from Python to C when transfer nothing (Garrett Regier) (#743278)
-        - Allows passing arguments to opaque Boxed types (Garrett Regier) (#743214)
-        - Emit ImportWarning when gi.require_version() is not used (Christoph Reiter) (#727379)
-        - Refactor overrides import/modules (Christoph Reiter) (#736678)
-        - Replace statically bound GLib.Variant.new_tuple() with GI (Simon Feltman) (#735199)
-        - overrides: Add Gdk.EventTouch union discrimination (Simon Feltman) (#736380)
-        - PyGObjectFlags: Remove a trailing comma on the enum. (Murray Cumming)
-        - Remove redefinitions of function and vfunc cache typedefs (Simon Feltman) (#737874)
-
-3.14.0  22-Sep-2014
-        - configure.ac: pre release version bump to 3.14.0 (Simon Feltman)
-
-3.13.92 15-Sep-2014
-        - tests: Add test for Gio.Application.add_main_option() (Simon Feltman)
-        - tests: Split up various test cases (Simon Feltman) (#735193)
-        - Fix invalid read error in argument cleanup code (Simon Feltman)
-        - Fix memory management problems with struct arguments to signals
-          (Simon Feltman) (#736175)
-
-3.13.91 01-Sep-2014
-        - docs: Fix return types in auto-generated doc strings (Simon Feltman)
-        - Special case signal output arguments which are structs as
-          pass-by-reference (Simon Feltman) (#735486)
-        - Ignore closure callbacks when Python is not initialized
-          (Simon Feltman) (#722562)
-        - Change boxed init with args to warn instead of raise
-          (Christoph Reiter) (#727810)
-        - Fix crash in GList/GSList marshaling error handling path.
-          (Christoph Reiter) (#735201)
-        - Fix reference counting problems with GLib.Variant.new_tuple()
-          (Simon Feltman) (#735166)
-        - Skip marshalling NULL output arguments in Python closures
-          (Simon Feltman) (#735090)
-
-3.13.90 18-Aug-2014
-        - Support array lengths on struct fields (Simon Feltman) (#688792)
-        - Fast path Python property get access (Simon Feltman) (#723872)
-        - Unify accessing properties through props and get_property()
-          (Simon Feltman) (#726999)
-        - Refactor boxed wrapper memory management strategy
-          (Simon Feltman) (#726999)
-        - Replace GObject.signal_query with introspected version
-          (Simon Feltman) (#688792)
-        - Fix memory leak with unboxed caller allocated structs (Simon Feltman)
-        - tests: Add failing tests for GObject sub-class doc-strings
-          (Piotr Iwaniuk) (#731452)
-        - Don't mask GObject sub-class doc strings in meta-class
-          (Tobias Mueller) (#731452)
-
-3.13.4  14-Aug-2014
-        - Marshaling cache refactor and cache usage in vfuncs
-          (Garrett Regier) (#727004)
-        - Fix array argument out and inout marshaling from vfuncs
-          (Garrett Regier) (#702508)
-        - Cleanup input args when marshaling in closures
-          (Garrett Regier) (#727004)
-        - Add deprecation warning for connect_object() with non-GObject argument
-          (Simon Feltman) (#688064)
-        - Add Python implementation of Object.connect_data()
-          (Simon Feltman) (#701843)
-        - Add GClosure marshaling cleanup (Simon Feltman) (#695128)
-        - Fix GCallback Python wrapper leak (Simon Feltman) (#695130)
-        - tests: Add failing test for marshaling an array of GValues through
-          signals (Martin Pitt) (#669496)
-        - Add protection against attempts at importing static bindings
-          (Simon Feltman) (#709183)
-        - Update and deprecate gi.overrides.keysyms (Simon Feltman) (#721295)
-        - Generate .dll libraries on windows (Ignacio Casal Quinteiro) (#734288)
-        - Windows build fixes (Alexey Pavlov)
-          (#734284, #734289, #734286, #734287)
-
-3.13.3  23-Jun-2014
-        - demos: Cleanup CSS accordion demo to use a loop for adding buttons
-          (Simon Feltman)
-        - refactor: Move builder connection utilities outside of Builder class
-          (Simon Feltman) (#701843)
-        - tests: Move TestSignals from test_everything into test_signal
-          (Simon Feltman) (#701843)
-
-3.13.2  26-May-2014
-        - Python 3.4 make check fixes (Simon Feltman) (#730411)
-        - overrides: Add Gtk.Container.child_get/set overrides (Simon Feltman)
-          (#685076)
-        - overrides: Make value argument to Widget.style_get_property optional
-          (Simon Feltman) (#685076)
-        - overrides: Make value argument to Container.child_get_property optional
-          (Simon Feltman) (#685076)
-        - Add GTypeClass methods as Python GObject class methods
-          (Johan Dahlin) (#685218)
-        - Add marshalling coercion for Python classes and instances to GTypeClass
-          (Simon Feltman) (#685218)
-        - Replace direct parent class call by super() (Andrew Grigorev) (#729970)
-        - Add cairo marshaling support for non-introspected signals
-          (Simon Feltman) (#694604)
-        - [New API] Add gi.require_foreign (Simon Feltman) (#707735)
-        - Initialize the foreign API at PyGI load time (Simon Feltman) (#694604)
-        - Move pygi foreign API into pygi-foreign-api.h (Simon Feltman) (#694604)
-        - Unify GLib.GError and GLib.Error (Simon Feltman) (#712519)
-        - PEP8 fixes (Simon Feltman)
-
-3.13.1  28-Apr-2014
-        - Raise TypeError if arguments are passed to Boxed.__init__
-          (Christoph Reiter) (#727810)
-        - Gdk.Event: Override __setattr__ to set fields based on the event type
-          (Christoph Reiter) (#727810)
-        - Gdk.Event: Include GdkEventType in __repr__ (Christoph Reiter) (#727810)
-        - Fix crash with type checking for GObject arguments (Simon Feltman) (#727604)
-        - Do not leak info of destroy notify (Paolo Borelli)
-        - Ignore GValueArray deprecations (Simon Feltman)
-        - Raise ImportError when importing modules not found in repository
-          (Simon Feltman) (#726877)
-        - tests: Rename test_overrides to test_import_machinery
-          (Simon Feltman) (#726877)
-
-3.12.0  24-Mar-2014
-
-3.11.92 17-Mar-2014
-        - configure.ac: Remove option to build without libffi (Simon Feltman)
-        - docs: Standardize Python doc strings (Simon Feltman)
-        - Fix reference leaks with (transfer full) foreign struct returns
-          (Owen W. Taylor) (#726206)
-
-3.11.91 03-Mar-2014
-        - Use ffi_call directly instead of g_callable_info_invoke
-          (Simon Feltman) (#723642)
-        - configure.ac: Use -std=c90 and error on declaration-after-statement
-          (Simon Feltman)
-        - Fix Build on Visual Studio (Chun-wei Fan) (#725122)
-
-3.11.90 17-Feb-2014
-        - Use GObject type checking for instance arguments (Simon Feltman) (#724009)
-        - configure.ac: post release version bump to 3.11.90 (Simon Feltman)
-
-3.11.5  03-Feb-2014
-        - cache refactoring: Move all cache marshalers into files based on type
-          (Simon Feltman) (#709700)
-        - tests: Add test for an owned boxed struct passed in a callback
-          (Mike Gorse) (#722899)
-        - build: Add --without-common configure option for package maintainers
-          (Patrick Welche) (#721646)
-        - demo: Add TreeModel interface implementation demonstration
-          (Simon Feltman)
-        - build: Set PLATFORM_VERSION again to 3.0 (Colin Walters)
-        - tests: Run PyFlakes and PEP8 only on SUBDIRS (Simon Feltman)
-        - Merge static PyGLib and PyGObject modules into PyGI
-          (Simon Feltman) (#712197)
-        - Add test for callback user data arguments with following arguments
-          (Martin Pitt) (#722104)
-
-3.11.4  13-Jan-2014
-        - overrides: Fix __repr__ for various Gdk structs (Simon Feltman)
-        - Add enum and flags member methods (Simon Feltman) (#693099)
-        - python.m4: g/c JD_PYTHON_CHECK_VERSION (Patrick Welche) (#721662)
-        - Support union creation with PyGIStruct (Simon Feltman)
-        - docs: List constructors in object and struct doc strings
-          (Simon Feltman) (#708060)
-        - docs: Fix array length argument skipping with preceding out arguments
-        - docs: Add return values and skip implicit out arguments in functions
-          (Simon Feltman) (#697356)
-        - docs: Skip implicit array length args when building function doc
-          strings (Simon Feltman) (#697356)
-        - gtk-demo: Add CSS demos (Gian Mario Tagliaretti) (#719722)
-        - build: Avoid clash between gi/types.py and stdlib
-          (Colin Watson) (#721025)
-
-3.11.3  16-Dec-2013
-        - Replace usage of PyGIBoxed_Type with PyGIStruct_Type
-          (Simon Feltman) (#581525)
-
-3.11.2  17-Nov-2013
-        - gkt-demo: Change main info/source notebook into a GtkStack (Simon Feltman)
-        - Add deprecation warnings and cleanup class initializer overrides (Simon Feltman) (#705810)
-        - Fix dir method for static GParamSpec in Python 3 (Simon Feltman)
-        - Remove overzealous argument checking for callback userdata (Simon Feltman) (#711173)
-
-3.11.1  28-Oct-2013
-        - Fix toggleref safety problems by always enabling the GIL
-         (Simon Feltman) (#709223)
-       - Add consistent GLib.MainLoop SIGINT cleanup (Simon Feltman) (#710978)
-        - docs: Add a keyword value of None for allow-none annotations
-         (Simon Feltman) (#640812)
-       - Remove overrides for supporting pre-3.10 GObject signal functions
-         (Simon Feltman)
-       - Add threads_init back as a requirement for non-Python threaded repos
-         (Simon Feltman) (#710447)
-       - Add dir method to GObject props accessor (Simon Feltman) (#705754)
-        - Remove PyGObjectWeakRef now that g_binding_unbind exists
-         (Simon Feltman) (#699571)
-        - Fix lots of memory leaks leaks (Simon Feltman) (#693402, #709397)
-        - Add support for variable user data arguments (Simon Feltman) (#640812)
-        - Bump glib and g-i dependencies to latest stable. (Martin Pitt)
-       - Fix TypeError when setting drag target_list to None (Nuno Araujo)
-         (#709926)
-       - Use qdata for wrapper retrieval in toggle reference notifications
-         (Simon Feltman) (#709223)
-        - Expose all GI enum and flags types (Simon Feltman) (#709008)
-        - Add support for default arguments annotated with allow-none
-         (Simon Feltman) (#640812)
-       - Refactor argument cache handling (Simon Feltman) (#640812)
-        - Remove support for allowing PyObjects as void pointers
-         (Simon Feltman) (#688081)
-
-3.10.0  23-Sep-2013
-        - Fix test_gi.TestProjectVersion.test_version_str() (Martin Pitt)
-
-3.9.92  16-Sep-2013
-        - Fix union argument regression when marshaling from python
-         (Simon Feltman) (#703873)
-       - Fix GLib.Source sub-classing with initializer args (Simon Feltman)
-         (#707904)
-       - Copy __doc__ when wrapping function (Vratislav Podzimek)
-
-3.9.91  02-Sep-2013
-       - Fix GObject signal methods to work with new annotations
-         (Simon Feltman) (#707280)
-       - Fix build on C89 Compilers (Chun-wei Fan) (#707264)
-       - Change boxed type checking in marshaling to use __gtype__ attribute
-         (Simon Feltman) (#707140)
-       - Use G_IS_VALUE for checking return values in closure marshaling
-         (Simon Feltman) (#707170)
-       - Fix PEP-8 errors in propertyhelper.py (Yanko Kaneti) (#706319)
-
-3.9.90  19-Aug-2013
-       - Create GLib.Pid in the same way on python 2 and 3 (Benjamin Berg)
-         (#705451)
-       - Use PyLong_Type.tp_new for GLib.Pid (Benjamin Berg) (#705451)
-       - Add accumulator and accu_data arguments to GObject.Signal decorator
-         (Simon Feltman) (#705533)
-       - Pass return values through the GObject.Signal.emit wrapper
-         (Simon Feltman) (#705530)
-
-3.9.5   29-Jul-2013
-        - Ensure exceptions set in closure out argument marshaling are printed
-          (Simon Feltman) (#705064)
-        - Always raise OverflowError for marshaling integers from Python
-          (not ValueError or OverflowError) (Simon Feltman) (#705057)
-        - Cleanup invoke args and kwargs combiner code (Simon Feltman) (#640812)
-        - gtk-demo: Change demo to use Gtk.Application (Simon Feltman) (#698547)
-        - Add callable and descriptor protocols to PyGICallableInfo
-          (Simon Feltman) (#704037)
-        - Unify basic type argument marshaling for methods, closures, and
-          properties (Simon Feltman) (#693405)
-        - Override GValue.set/get_boxed with static C marshaler
-          (Simon Feltman) (#688081, #693405)
-        - Add deprecation warning for marshaling arbitrary objects as pointers
-          (Simon Feltman) (#688081)
-        - Replace usage of __import__ with importlib.import_module
-          (Simon Feltman) (#682320)
-        - Always unref the GiTypeInfo when generating an argument cache
-          (Mike Gorse) (#703973)
-        - Unref interface info when fetching enums or flags
-          (Mike Gorse) (#703960)
-        - Speed up MRO calculation (Daniel Drake) (#703829)
-        - Add GIL safety to pyobject_copy for copying boxed PyObjects
-          (Simon Feltman) (#688081)
-        - Add marshaling of GI_TYPE_TAG_VOID held in a GValue to int
-          (Simon Feltman) (#694233)
-        - GTK overrides: Make connect_signals handle tuple
-          (Cole Robinson) (#693994)
-        - Re-add support for passing GValue's by reference
-          (Simon Feltman) (#701058)
-        - Clear return value of closures to zero when an exception occurs
-          (Simon Feltman) (#702552)
-        - Don't use doctest syntax in docstrings for examples
-          (Martin Pitt) (#701009)
-        - Add support for properties of type GInterface
-          (Garrett Regier) (#703456)
-        - pygtkcompat: Fix for missing methods on Windows
-          (Martin Pitt) (#702787)
-        - gi/pygi-info.c: Avoid C99-style variable declaration
-          (Chun-wei Fan) (#702786)
-
-3.9.2   28-May-2013
-       - examples/option.py: Port to GI and Python 3 (Martin Pitt)
-        - Fix vfunc info search for classes with multiple inheritance
-         (Simon Feltman) (#700092)
-        - Fix closure argument conversion for enum and flag in args
-         (Simon Feltman)
-        - Fix marshaling Python to FFI return value for enum and flags
-         (Simon Feltman)
-       - Remove half implemented GC in PyGIBaseInfo, PyGIStruct, and PyGIBoxed
-         (Simon Feltman) (#677091)
-       - Replace usage of pyg_begin_allow_threads with Py_BEGIN_ALLOW_THREADS
-         (Simon Feltman) (#699440)
-       - Remove and deprecate API for setting of thread blocking functions
-         (Simon Feltman) (#699440)
-
-3.9.1   30-Apr-2013
-       - gtk-demo: Wrap description strings at 80 characters (Simon Feltman)
-         (#698547)
-       - gtk-demo: Use textwrap to reformat description for Gtk.TextView
-         (Simon Feltman) (#698547)
-       - gtk-demo: Use GtkSource.View for showing source code (Simon Feltman)
-         (#698547)
-       - Use correct class for GtkEditable's get_selection_bounds() function
-         (Mike Ruprecht) (#699096)
-       - Test results of g_base_info_get_name for NULL (Simon Feltman)
-         (#698829)
-       - Add ObjectInfo.get_class_struct() (Johan Dahlin) (#685218)
-       - Change interpretation of NULL pointer field from None to 0
-         (Simon Feltman) (#698366)
-       - Do not build tests until needed (Sobhan Mohammadpour) (#698444)
-       - pygi-convert: Support toolbar styles (Kai Willadsen) (#698477)
-       - pygi-convert: Support new-style constructors for Gio.File
-         (Kai Willadsen) (#698477)
-       - pygi-convert: Add some support for recent manager constructs
-         (Kai Willadsen) (#698477)
-       - pygi-convert: Don't transform arbitrary keysym imports
-         (Kai Willadsen) (#698477)
-       - Remove Python keyword escapement in Repository.find_by_name
-         (Simon Feltman) (#697363)
-       - Optimize signal lookup in gi repository (Daniel Drake) (#696143)
-       - Optimize connection of Python-implemented signals (Daniel Drake)
-         (#696143)
-       - Consolidate signal connection code (Daniel Drake) (#696143)
-       - Fix setting of struct property values (Daniel Drake)
-       - Optimize property get/set when using GObject.props (Daniel Drake)
-         (#696143)
-       - configure.ac: Fix PYTHON_SO with Python3.3 (Christoph Reiter)
-         (#696646)
-       - Simplify registration of custom types (Daniel Drake) (#696143)
-       - pygi-convert.sh: Add GStreamer rules (Christoph Reiter) (#697951)
-       - pygi-convert: Add rule for TreeModelFlags (Jussi Kukkonen)
-       - Unify GI marshalling code (Simon Feltman) (#693405)
-       - Use distutils.sysconfig to retrieve the python include path.
-         (Christoph Reiter) (#696648)
-       - Support PEP 3149 (ABI version tagged .so files) (Christoph Reiter)
-         (#696646)
-       - Fix stack corruption due to incorrect format for argument parser
-         (Simon Feltman) (#696892)
-       - Deprecate GLib and GObject threads_init (Simon Feltman) (#686914)
-       - Drop support for Python 2.6 (Martin Pitt)
-       - Remove static PollFD bindings (Martin Pitt) (#686795)
-       - Drop test skipping due to too old g-i (Martin Pitt)
-       - Bump glib and g-i dependencies (Martin Pitt)
-
-3.8.0   25-Mar-2013
-       - tests: Fix incorrect assumption when testing pyglib version
-         (Simon Feltman)
-
-3.7.92  18-Mar-2013
-       - Fix stack smasher when marshaling enums as a vfunc return value
-         (Simon Feltman) (#637832)
-       - Change base class of PyGIDeprecationWarning based on minor version
-         (Simon Feltman) (#696011)
-       - autogen.sh: Source gnome-autogen to fix out of source builddir (Alban
-         Browaeys) (#694889)
-        - pygtkcompat: Make gdk.Window.get_geometry return tuple of 5
-         (Simon Feltman)
-        - pygtkcompat: Initialize hint to zero in set_geometry_hints
-         (Simon Feltman)
-        - Remove incorrect bounds check with property helper flags
-         (Simon Feltman)
-       - Fix crash when setting property of type object to an incorrect type
-         (Simon Feltman) (#695420)
-       - Give more informative error when setting property to incorrect type
-         (Simon Feltman) (#695420)
-
-3.7.91.1 05-Mar-2013
-        - Revert "Drop gi.overrides.overridefunc()" (Martin Pitt) (#695199)
-
-3.7.91  04-Mar-2013
-        - Fix many memory leaks (#675726, #693402, #691501, #510511, #691501,
-         #672224, and several more which are detected by our test suite)
-         (Martin Pitt)
-        - Dot not clobber original Gdk/Gtk functions with overrides
-         (Martin Pitt) (#686835)
-       - Optimize GValue.get/set_value by setting GValue.g_type to a local
-         (Simon Feltman) (#694857)
-        - Run tests with G_SLICE=debug_blocks (Martin Pitt) (#691501)
-       - Add override helper for stripping boolean returns (Martin Pitt)
-         (#694431)
-       - Drop obsolete pygobject_register_sinkfunc() declaration (Martin Pitt)
-         (#639849)
-       - Fix marshalling of C arrays with explicit length in signal arguments
-         (Martin Pitt) (#662241)
-       - Fix signedness, overflow checking, and 32 bit overflow of GFlags
-         (Martin Pitt) (#693121)
-       - gi/pygi-marshal-from-py.c: Fix build on Visual C++ (Chun-wei Fan)
-         (#692856)
-       - Raise DeprecationWarning on deprecated callables (Martin Pitt)
-         (#665084)
-       - pygtkcompat: Add Widget.window, scroll_to_mark, and window methods
-         (Simon Feltman) (#694067)
-       - pygtkcompat: Add Gtk.Window.set_geometry_hints which accepts keyword
-         arguments (Simon Feltman) (#694067)
-        - Ship pygobject.doap for autogen.sh (Martin Pitt) (#694591)
-       - Fix crashes in various GObject signal handler functions
-         (Simon Feltman) (#633927)
-       - pygi-closure: Protect the GSList prepend with the GIL (Olivier Crête)
-         (#684060)
-       - generictreemodel: Fix bad default return type for get_column_type
-         (Simon Feltman)
-
-3.7.90  19-Feb-2013
-       - overrides: Fix inconsistencies with drag and drop target list API
-         (Simon Feltman) (#680640)
-       - pygtkcompat: Add pygtk compatible GenericTreeModel implementation
-         (Simon Feltman) (#682933)
-       - overrides: Add support for iterables besides tuples for TreePath
-         creation (Simon Feltman) (#682933)
-       - Prefix __module__ attribute of function objects with gi.repository
-         (Niklas Koep) (#693839)
-       - configure.ac: only enable code coverage when available, to fix
-         autogen.sh with older gnome-commons (Jonathan Ballet) (#693328)
-       - Correctly set properties on object with statically defined properties
-         (Jonathan Ballet) (#693618)
-       - autogen.sh: Use gnome-autogen.sh (Martin Pitt) (#693328)
-       - Fix reference leaks with transient floating objects (Simon Feltman)
-         (#687522)
-
-3.7.5.1 05-Feb-2013
-        - Fix ABI break with pygobject.h from 3.7.5 (Simon Feltman) (#675726)
-
-3.7.5   04-Feb-2013
-       - Move various signal methods from static bindings to GI
-         (Simon Feltman) (#692918)
-       - GLib overrides: Support unpacking 'maybe' variants (Paolo Borelli)
-         (#693032)
-       - Fix ref count leak when creating pygobject wrappers for input args
-         (Mike Gorse) (#675726)
-       - Prefix names of typeless enums and flags for GType registration
-         (Simon Feltman) (#692515)
-       - Fix compilation with non-C99 compilers such as Visual C++
-         (Chun-wei Fan) (#692856)
-        - gi/overrides/Glib.py: Fix running on Windows/non-Unix (Chun-wei Fan)
-       - Do not immediately initialize Gdk and Gtk on import (Martin Pitt)
-         (#692300)
-        - Accept Â±inf and NaN as float and double values (Martin Pitt) (#692381)
-        - Fix repr() of GLib.Variant (Martin Pitt)
-        - Fix gtk-demo for Python 3 (Martin Pitt)
-        - Define GObject.TYPE_VALUE gtype constant (Martin Pitt)
-       - gobject: Go through introspection on property setting (Olivier Crête)
-         (#684062)
-       - Clean up caller-allocated GValues and their memory (Mike Gorse)
-         (#691820)
-        - Use GNOME_COMPILE_WARNINGS from gnome-common (Martin Pitt)
-
-3.7.4   14-Jan-2013
-        - Allow setting values through GtkTreeModelFilter (Simonas Kazlauskas)
-          (#689624)
-        - Support GParamSpec signal arguments from Python (Martin Pitt)
-          (#683099)
-        - pygobject_emit(): Fix cleanup on error (Martin Pitt)
-        - Add signal emission methods to TreeModel which coerce the path
-          argument (Simon Feltman) (#682933)
-        - Add override for GValue (Bastian Winkler) (#677473)
-        - Mark caller-allocated boxed structures as having a slice allocated
-          (Mike Gorse) (#699501)
-        - pygi-property: Support boxed GSList/GList types (Olivier Crête)
-          (#684059)
-        - tests: Add missing backwards compat methods for Python 2.6
-          (Martin Pitt) (#691646)
-        - Allow setting TreeModel values to None (Simon Feltman) (#684094)
-        - Set clean-up handler for marshalled arrays (Mike Gorse) (#691509)
-        - Support setting string fields in structs (Vadim Rutkovsky) (#678401)
-        - Permit plain integers for "gchar" values (Martin Pitt)
-        - Allow single byte values for int8 types (Martin Pitt) (#691524)
-        - Fix invalid memory access handling errors when registering an enum
-          type (Mike Gorse)
-        - Fix (out) arguments in callbacks (Martin Pitt)
-        - Fix C to Python marshalling of struct pointer arrays (Martin Pitt)
-        - Don't let Property.setter() method names define property names
-          (Martin Pitt) (#688971)
-        - Use g-i stack allocation API (Martin Pitt) (#615982)
-        - pyg_value_from_pyobject: support GArray (Ray Strode) (#690514)
-        - Fix obsolete automake macros (Marko Lindqvist) (#691101)
-        - Change dynamic enum and flag gtype creation to use namespaced naming
-          (Simon Feltman) (#690455)
-        - Fix Gtk.UIManager.add_ui_from_string() override for non-ASCII chars
-          (Jonathan Ballet) (#690329)
-        - Don't dup strings before passing them to type registration functions
-          (Mike Gorse) (#690532)
-        - Fix marshalling of arrays of boxed struct values (Carlos Garnacho)
-          (#656312)
-
-3.7.3   17-Dec-2012
-       - Add support for caller-allocated GArray out arguments (Martin Pitt)
-         (#690041)
-       - [API add] Re-support calling GLib.io_add_watch with an fd or Python
-         file (Martin Pitt)
-        - pygtkcompat: Work around IndexError on large flags (Martin Pitt)
-        - Fix pyg_value_from_pyobject() range check for uint (Martin Pitt)
-        - Fix tests to work with g-i 1.34.2 (Martin Pitt)
-       - Fix wrong refcount for GVariant property defaults (Martin Pitt)
-         (#689267)
-        - Fix array arguments on 32 bit architectures (Martin Pitt)
-        - Add backwards compatible API for GLib.unix_signal_add_full()
-         (Martin Pitt)
-       - Drop MININT64/MAXUINT64 workaround, current g-i gets this right now
-         (Martin Pitt)
-        - Fix maximum and minimum ranges of TYPE_(U)INT64 properties
-         (Simonas Kazlauskas) (#688949)
-        - Ship pygi-convert.sh in tarballs (Martin Pitt) (#688697)
-
-3.7.2   19-Nov-2012
-       - [API change] Drop almost all static GLib bindings and replace them
-         with proper introspection. This gets rid of several cases where the
-         PyGObject API was not matching the real GLib API, makes the full GLib
-         API available through introspection, and makes the code smaller,
-         easier to maintain. For backwards compatibility, overrides are
-         provided to emulate the old static binding API, but this will throw a
-         PyGIDeprecationWarning for the cases that diverge from the official
-         API (in particular, GLib.io_add_watch() and GLib.child_watch_add()
-         being called without a priority argument). (Martin Pitt, Simon Feltman)
-       - [API change] Deprecate calling GLib API through the GObject
-         namespace. This has always been a misnomer with introspection, and
-         will be removed in a later version; for now this throws a
-         PyGIDeprecationWarning.
-        - [API change] Do not bind gobject_get_data() and gobject_set_data().
-         These have been deprecated for a cycle, now dropped entirely.
-         (Steve Frécinaux) (#641944)
-       - [API change] Deprecate void pointer fields as general PyObject
-         storage. (Simon Feltman) (#683599)
-        - Add support for GVariant properties (Martin Pitt)
-        - Add type checking to GVariant argument assignment (Martin Pitt)
-        - Fix marshalling of arrays of struct pointers to Python (Carlos Garnacho) (#678620)
-        - Fix Gdk.Atom to have a proper str() and repr() (Martin Pitt) (#678620)
-        - Make sure g_value_set_boxed does not cause a buffer overrun with GStrvs (Simon Feltman) (#688232)
-        - Fix leaks with GValues holding boxed and object types (Simon Feltman) (#688137)
-        - Add doc strings showing method signatures for gi methods (Simon Feltman) (#681967)
-        - Set Property instance doc string and blurb to getter doc string (Simon Feltman) (#688025)
-        - Add GObject.G_MINSSIZE (Martin Pitt)
-        - Fix marshalling of GByteArrays (Martin Pitt)
-        - Fix marshalling of ssize_t to smaller ints (Martin Pitt)
-       - Add support for lcov code coverage, and add a lot of missing
-         GIMarshallingTests and g-i Regress tests. (Martin Pitt)
-        - pygi-convert: remove deprecated GLib â†’ GObject conversions (Jose Rostagno)
-        - Add support for overriding GObject.Object (Simon Feltman) (#672727)
-        - Add --with-python configure option (Martin Pitt)
-       - Do not prefer unversioned "python" when configuring, as some distros
-         have "python" as Python 3. Use Python 3 by default if available. Add
-         --with-python configure option as an alternative to setting $PYTHON,
-         whic is more discoverable. (Martin Pitt)
-        - Fix property lookup in class hierarchy (Daniel Drake) (#686942)
-        - Move property and signal creation into _class_init() (Martin Pitt) (#686149)
-        - Fix duplicate symbols error on OSX (John Ralls)
-        - [API add] Add get_introspection_module for getting un-overridden modules (Simon Feltman) (#686828)
-        - Work around wrong 64 bit constants in GLib Gir (Martin Pitt) (#685022)
-        - Mark GLib.Source.get_current_time() as deprecated (Martin Pitt)
-        - Fix OverflowError in source_remove() (Martin Pitt) (#684526)
-
-3.7.1   22-Oct-2012
-        - Bump version to 3.7.1; let's follow the real GNOME versioning from
-          now on (Martin Pitt)
-        - Change install_properties to not use getattr on classes
-          (Simon Feltman) (#686559)
-        - Move property install function into propertyhelper.py (Simon Feltman)
-          (#686559)
-        - Fix Signal decorator to not use base class gsignals dict
-          (Simon Feltman) (#686496)
-        - tests: Consistently use GLib.MainLoop (Martin Pitt)
-        - Install the .egg-info files into correct multilib directory
-          (Kalev Lember) (#686315)
-        - Fix leaked vfunc return values (Simon Feltman) (#686140)
-        - Skip Regress tests with --disable-cairo (Martin Pitt) (#685094)
-        - Fix leak with python callables as closure argument. (Simon Feltman)
-          (#685598)
-        - Gio overrides: Handle setting GSettings enum keys (Martin Pitt)
-          (#685947)
-        - tests: Check reading GSettings enums in Gio overrides (Martin Pitt)
-        - Fix unsigned values in GArray/GList/GSList/GHash (Martin Pitt)
-          (#685860)
-        - _pygi_marshal_from_py_uint64(): Use correct data type in py2.7 check
-          (Alban Browaeys) (#685000)
-        - Install an .egg-info file (Johan Dahlin) (#680138)
-        - PyGProps_getattro(): Fix GObjectClass leak (Johan Dahlin) (#685218)
-        - pygobject.c: Don't leak GObjectClass reference (Olivier Crête)
-          (#684062)
-        - Fix memory leak in _pygi_argument_to_array() (Alban Browaeys)
-          (#685082)
-        - Fix error messages for out of range numbers (Martin Pitt) (#684314)
-        - Kill dbus-daemon after running tests (Martin Pitt) (#685009)
-        - GVariant overrides: Support empty tuple arrays (Martin Pitt)
-          (#684928)
-        - tests: Fix wrong return type in test_int64_callback() (Martin Pitt)
-          (#684700)
-        - Fix GValue marshalling of long and unsigned long (Giovanni Campagna)
-          (#684331)
-        - Clean up deprecation message for assigning gpointers to objects.
-          (Simon Feltman) (#683599)
-        - pygi-property: Lookup property in base classes of non-introspected
-          types (Olivier Crête) (#684058)
-
-3.4.0   24-Sep-2012
-        - Bump g-i dependency to 1.33.14 (Martin Pitt)
-
-3.3.92  17-Sep-2012
-        - [API add] Add ObjectInfo.get_abstract method (Simon Feltman) (#675581)
-       - Add deprecation warning when setting gpointers to anything other than
-         int. (Simon Feltman) (#683599)
-       - argument: Fix 64bit integer convertion from GValue (Nicolas Dufresne)
-         (#683596)
-        - Improve setting pointer fields/arguments to NULL using None
-         (Simon Feltman) (#683150)
-        - Bump g-i dependency to 1.33.10 (Martin Pitt)
-        - Fix -uninstalled.pc.in file (Thibault Saunier) (#683379)
-       - Various test suite additions and improvements (Martin Pitt)
-
-3.3.91  03-Sep-2012
-        - Fix exception test case for Python 2 (Martin Pitt)
-        - Bump g-i dependency to >= 1.3.9 (Martin Pitt)
-        - Show proper exception when trying to allocate a disguised struct
-          (Martin Pitt) (#639972)
-        - Support marshalling GParamSpec signal arguments (Mark Nauwelaerts)
-          (#683099)
-        - Add test for a signal that returns a GParamSpec (Martin Pitt)
-          (#683265)
-        - [API add] Add Signal class for adding and connecting custom signals.
-          (Simon Feltman) (#434924)
-        - Fix pygtkcompat's Gtk.TreeView.insert_column_with_attributes()
-          (Martin Pitt)
-        - Add override for Gtk.TreeView.insert_column_with_attributes()
-          (Marta Maria Casetti) (#679415)
-        - .gitignore: Add missing built files (Martin Pitt)
-        - Ship tests/gi in tarball (Martin Pitt)
-        - Split test_overrides.py (Martin Pitt) (#683188)
-        - _pygi_argument_to_object(): Clean up array unmarshalling (Martin Pitt)
-        - Fix memory leak in _pygi_argument_to_object() (Alban Browaeys)
-          (#682979)
-        - Fix setting pointer fields/arguments to NULL using None.
-          (Simon Feltman) (#683150)
-        - Fix for python 2.6, officially drop support for < 2.6 (Martin Pitt)
-          (#682422)
-        - Allow overrides in other directories than gi itself
-          (Thibault Saunier) (#680913)
-        - Clean up sys.path handling in tests (Simon Feltman) (#680913)
-        - Fix dynamic creation of enum and flag gi types for Python 3.3
-          (Simon Feltman) (#682323)
-        - [API add] Override g_menu_item_set_attribute (Paolo Borelli) (#682436)
-
-3.3.90  20-Aug-2012
-        - Implement marshalling for GParamSpec (Mathieu Duponchelle) (#681565)
-        - Fix erronous import statements for Python 3.3 (Simon Feltman)
-          (#682051)
-        - Do not fail tests if pyflakes or pep8 are not installed (Martin Pitt)
-        - Fix PEP-8 whitespace checking and issues in the code (Martin Pitt)
-        - Fix unmarshalling of gssize (David Malcolm) (#680693)
-        - Fix various endianess errors (David Malcolm) (#680692)
-        - Gtk overrides: Add TreeModelSort.__init__(self, model)
-         (Simon Feltman) (#681477)
-        - Convert Gtk.CellRendererState in the pygi-convert script
-         (Manuel Quiñones) (#681596)
-
-3.3.5   06-Aug-2012
-        - Fix list marshalling on big-endian machines (Martin Pitt)
-          (#680693)
-        - Beautify class/interface type mismatch error messages (Martin Pitt)
-        - Skip instead of fail tests which need Pango, Atk, Gdk, Gtk (Martin Pitt)
-        - [API add] pygtkcompat: Add more pixbuf creation functions (Simon Feltman)
-          (#680814)
-        - Fix error messages on interface/class type mismatches (Martin Pitt)
-        - Fix crash when returning (False, None) from Gtk.TreeModel.do_get_iter() (Simon Feltman)
-          (#680812)
-        - Add test case for Gtk.TextIter.forward_search() (Martin Pitt)
-          (#679415)
-        - pygi-info.c: Robustify pointer arithmetic (Martin Pitt)
-        - Add set_attributes() override to Gtk.TreeViewColumn (Manuel Quiñones)
-        - Gtk overrides: Add TreePath.__getitem__() (Simon Feltman)
-          (#680353)
-        - Fix property type mapping from int to TYPE_INT for python3. (Simon Feltman)
-          (#679939)
-        - Convert Gtk.DestDefaults constants in pygi-convert.sh script (Manuel Quiñones)
-          (#680259)
-        - Convert all Gdk.WindowState constants in pygi-convert.sh (Manuel Quiñones)
-          (#680257)
-        - [API add] Add API for checking pygobject's version (Joe R. Nassimian)
-          (#680176)
-        - pygi-convert.sh: Add some missing Gdk.CursorTypes (Manuel Quiñones)
-          (#680050)
-        - pygi-convert.sh: convert rsvg.Handle(data=...) (Manuel Kaufmann)
-          (#680092)
-
-3.3.4   16-Jul-2012
-        - pygi-convert.sh: Drop bogus filter_new() conversion (Martin Pitt)
-          (#679999)
-        - Fix help() for GI modules (Martin Pitt) (#679804)
-        - Skip gi.CallbackInfo objects from a module's dir() (Martin Pitt)
-          (#679804)
-        - Fix __path__ module attribute (Martin Pitt)
-        - pygi-convert.sh: Fix some child â†’ getChild() false positives
-         (Joe R. Nassimian) (#680004)
-       - Fix array handling for interfaces, properties, and signals
-         (Mikkel Kamstrup Erlandsen) (#667244)
-       - Add conversion of the Gdk.PropMode constants to pygi-convert.sh
-         script (Manuel Quiñones) (#679775)
-       - Add the same rules for pack_start to convert pack_end (Manuel
-         Quiñones) (#679760)
-        - Add error-checking for the case where _arg_cache_new() fails
-         (Dave Malcolm) (#678914)
-       - Add conversion of the Gdk.NotifyType constants to pygi-convert.sh
-         script (Manuel Quiñones) (#679754)
-       - Fix PyObject_Repr and PyObject_Str reference leaks (Simon Feltman)
-          (#675857)
-       - [API add] Gtk overrides: Add TreePath.__len__() (Martin Pitt)
-          (#679199)
-        - GLib.Variant: Fix repr(), add proper str() (Martin Pitt) (#679336)
-        - m4/python.m4: Update Python version list (Martin Pitt)
-        - Remove "label" property from Gtk.MenuItem if it is not set
-         (Micah Carrick) (#670575)
-
-3.3.3.1 25-Jun-2012
-        - Do not escape enum and flag names that are Python keywords (Martin Pitt)
-
-3.3.3   25-Jun-2012
-        - Remove obsolete release-tag make target (Martin Pitt)
-       - Do not do any python calls when GObjects are destroyed after the
-         python interpreter has been finalized (Simon Schampijer) (#678046)
-        - Do not change constructor-only "type" Window property (Martin Pitt)
-          (#678510)
-        - Escape identifiers which are Python keywords (Martin Pitt) (#676746)
-       - Fix code for PEP-8 violations detected by the latest pep8 checker.
-          (Martin Pitt)
-        - Fix crash in GLib.find_program_in_path() (Martin Pitt) (#678119)
-        - Revert "Do not bind gobject_get_data() and gobject_set_data()" (Martin Pitt)
-         (#641944)
-        - GVariant: Raise proper TypeError on invalid tuple input (David Keijser)
-          (#678317)
-
-3.3.2   05-Jun-2012
-       - foreign: Register cairo.Path and cairo.FontOptions foreign structs
-         (Bastian Winkler) (#677388)
-        - Check types in GBoxed assignments (Marien Zwart) (#676603)
-       - [API add] Gtk overrides: Add TreeModelRow.get_previous()
-         (Bastian Winkler) (#677389)
-       - [API add] Add missing GObject.TYPE_VARIANT (Bastian Winkler) (#677387)
-        - Fix boxed type equality (Jasper St. Pierre) (#677249)
-        - Fix TestProperties.testBoxed test (Jose Rostagno) (#676644)
-       - Fix handling of by-reference structs as out parameters
-         (Carlos Garnacho) (#653151)
-       - tests: Add more vfunc checks for GIMarshallingTestsObject
-         (Martin Pitt)
-        - Test caller-allocated GValue out parameter (Martin Pitt) (#653151)
-        - GObject.bind_property: Support transform functions (Bastian Winkler)
-          (#676169)
-        - Fix lookup of vfuncs in parent classes (Carlos Garnacho) (#672864)
-        - tests/test_properties.py: Fix whitespace (Martin Pitt)
-        - gi: Support zero-terminated arrays with length arguments
-         (Jasper St. Pierre) (#677124)
-        - [API add] Add GObject.bind_property method (Simon Feltman) (#675582)
-        - pygtkcompat: Correctly set flags (Jose Rostagno) (#675911)
-        - Gtk overrides: Implement __delitem__ on TreeModel (Jose Rostagno)
-          (#675892)
-        - Gdk Color override should support red/green/blue_float properties
-         (Simon Feltman) (#675579)
-        - Support marshalling of GVariants for closures (Martin Pitt) (#656554)
-        - _pygi_argument_from_object(): Check for compatible data type
-         (Martin Pitt)
-        - pygtkcompat: Fix color conversion (Martin Pitt)
-        - test_gi: Check setting properties in constructor (Martin Pitt)
-        - Support getting and setting GStrv properties (Martin Pitt)
-        - Support defining GStrv properties from Python (Martin Pitt)
-        - Add GObject.TYPE_STRV constant (Martin Pitt)
-        - Unref GVariants when destroying the wrapper (Martin Pitt) (#675472)
-        - Fix TestArrayGVariant test cases (Martin Pitt)
-        - pygtkcompat: Add gdk.pixbuf_get_formats compat code (Jose Rostagno)
-          (#675489)
-        - pygtkcompat: Add some more compat functions (Jose Rostagno) (#675489)
-        - Fix tests for Python 3 (Martin Pitt)
-        - Fix building with --disable-cairo (Martin Pitt)
-        - tests: Fix deprecated assertions (Martin Pitt)
-        - Run tests with MALLOC_PERTURB_ (Martin Pitt)
-
-3.3.1   30-Apr-2012
-       - GSettings: allow extra keyword arguments (Giovanni Campagna)
-         (#675105)
-       - pygtkcompat: Correct Userlist module use (Jose Rostagno) (#675084)
-       - Add release-news make rule (Martin Pitt)
-       - Add "make check.nemiver" target (Martin Pitt)
-       - Test flags and enums in GHash values (Martin Pitt) (#637466)
-       - tests: Activate test_hash_in and apply workaround (Martin Pitt)
-         (#666636)
-       - Add special case for Gdk.Atom array entries from Python (Martin Pitt)
-         (#661709)
-       - test_gdbus: Call GetConnectionUnixProcessID() with correct signature
-         (Martin Pitt) (#667954)
-       - Add test case for Gtk.ListStore custom sort (Martin Pitt) (#674475)
-       - GTK overrides: Add missing keyword arguments (Martin Pitt) (#660018)
-       - [API change] Add missing override for TreeModel.iter_previous()
-         (Martin Pitt) (#660018)
-       - pygi-convert.py: Drop obsolete drag method conversions (Martin Pitt)
-         (#652860)
-       - tests: Replace deprecated assertEquals() with assertEqual()
-         (Martin Pitt)
-       - Plug tiny leak in constant_info_get_value (Paolo Borelli) (#642754)
-       - Fix len_arg_index for array arguments (Bastian Winkler) (#674271)
-       - Support defining GType properties from Python (Martin Pitt) (#674351)
-       - Handle GType properties correctly (Bastian Winkler) (#674351)
-       - Add missing GObject.TYPE_GTYPE (Martin Pitt)
-       - Fix test_mainloop.py for Python 3 (Martin Pitt)
-       - Make callback exception propagation test stricter (Martin Pitt)
-         (#616279)
-       - [API add] Add context management to freeze_notify() and
-         handler_block(). (Simon Feltman) (#672324)
-       - Add support for GFlags properties (Martin Pitt) (#620943)
-       - [API add] Wrap GLib.Source.is_destroyed() method (Martin Pitt)
-         (#524719)
-       - Fix error message when trying to override a non-GI class
-         (Martin Pitt) (#646667)
-       - Fix segfault when accessing __grefcount__ before creating the GObject
-         (Steve Frécinaux) (#640434)
-       - [API change] Do not bind gobject_get_data() and gobject_set_data()
-         (Steve Frécinaux) (#641944)
-       - Add test case for multiple GLib.MainLoop instances (Martin Pitt)
-         (#663068)
-       - Add a ccallback type which is used to invoke callbacks passed to a
-         vfunc (John (J5) Palmieri) (#644926)
-       - Regression test: marshalling GValues in GHashTable (Alberto Mardegan)
-         (#668903)
-       - Update .gitignore (Martin Pitt)
-       - Fix "distcheck" and tests with out-of-tree builds (Martin Pitt)
-       - Add a pep8 check to the makefile (Johan Dahlin) (#672627)
-       - PEP8 whitespace fixes (Johan Dahlin) (#672627)
-       - PEP8: Remove trailing ; (Johan Dahlin) (#672627)
-       - tests: Replace deprecated Python API (Martin Pitt)
-       - Fail tests if they use or encounter deprecations (Martin Pitt)
-       - Do not run tests in two phases any more (Martin Pitt)
-       - test_overrides: Find local gsettings schema with current glib
-         (Martin Pitt)
-       - Add GtkComboBoxEntry compatibility (Paolo Borelli) (#672589)
-       - Correct review comments from Martin (Johan Dahlin) (#672578)
-       - Correct pyflakes warnings/errors (Johan Dahlin) (#672578)
-       - Make tests fail on CRITICAL logs, too, and apply to all tests
-         (Martin Pitt)
-       - Support marshalling GI_TYPE_TAG_INTERFACE (Alberto Mardegan)
-         (#668903)
-       - Fix warnings on None values in added tree/list store rows
-         (Martin Pitt) (#672463)
-       - pygtkcompat test: Properly clean up PixbufLoader (Martin Pitt)
-
-3.1.92  19-Mar-2012
-        - Correct Gtk.TreePath.__iter__ to work with Python 3 (Johan Dahlin)
-        - Fix test_everything.TestSignals.test_object_param_signal test case
-          (Martin Pitt)
-        - Add a PyGTK compatibility layer (Johan Dahlin)
-        - pygtkcompat: Remove first argument for get_origin() (Johan Dahlin)
-        - Fix pygtkcompat.py to work with Python 3 (Martin Pitt)
-        - GtkViewport: Add a default values for the adjustment constructor
-          parameters (Johan Dahlin)
-        - GtkIconSet: Add a default value for the pixbuf constructor parameter
-          (Johan Dahlin)
-        - PangoLayout: Add a default value for set_markup() (Johan Dahlin)
-        - Gtk[HV]Scrollbar: Add a default value for the adjustment constructor
-          parameter (Johan Dahlin)
-        - GtkToolButton: Add a default value for the stock_id constructor
-          parameter (Johan Dahlin)
-        - GtkIconView: Add a default value for the model constructor parameter
-          (Johan Dahlin)
-        - Add a default value for column in Gtk.TreeView.get_cell_area()
-          (Johan Dahlin)
-        - Atomic inserts in Gtk.{List,Tree}Store overrides (Martin Pitt)
-        - Fix Gtk.Button constructor to accept use_stock parameter
-          (Martin Pitt)
-        - Correct bad rebase, remove duplicate Window (Johan Dahlin)
-        - Add bw-compatible arguments to Gtk.Adjustment (Johan Dahlin)
-        - GtkTreePath: make it iterable (Johan Dahlin)
-        - Add a default argument to TreeModelFilter.set_visible_func()
-          (Johan Dahlin)
-        - Add a default argument to Gtk.TreeView.set_cursor (Johan Dahlin)
-        - Add a default argument to Pango.Context.get_metrics() (Johan Dahlin)
-        - Fix double-freeing GValues in arrays (Martin Pitt)
-        - Renamed "property" class to "Property" (Simon Feltman)
-        - Fix Python to C marshalling of GValue arrays (Martin Pitt)
-        - Correct the Gtk.Window hierarchy (Johan Dahlin)
-        - Renamed getter/setter instance attributes to fget/fset respectively.
-          (Simon Feltman)
-        - Add Gtk.Arrow/Gtk.Window constructor override (Johan Dahlin)
-        - Fix marshalling to/from Python to work on big endian machines.
-          (Michel Dänzer)
-        - Use gi_cclosure_marshal_generic instead of duplicating it.
-          (Michel Dänzer)
-        - Override Gtk.TreeView.get_visible_range to fix return (René Stadler)
-        - Plug memory leak in _is_union_member (Paolo Borelli)
-        - tests: Split TestInterfaces into separate tests (Sebastian Pölsterl)
-        - README: Update current maintainers (Martin Pitt)
-
-3.1.1   20-Feb-2012
-        - Don't use C99 style (Sebastian Pölsterl)
-        - Add test for GPtrArray with transfer full (Martin Pitt)
-        - Drop obsolete g_thread_init() (Martin Pitt)
-        - Fix deprecated g_source_get_current_time() (Martin Pitt)
-        - Fix deprecated g_value_[gs]et_char() (Martin Pitt)
-        - Make pygiconvert.sh correctly convert gtk.gdk.x11_* (Simon Schampijer)
-        - Raise required glib version to 2.31 because of g_value_(get|set)_schar (Sebastian Pölsterl)
-        - Fix cset_first typo (Dieter Verfaillie)
-        - pygi-convert: Handle Clutter and Cogl (Bastian Winkler)
-        - Provide access to gpointer struct values (Cédric Krier)
-        - Add some GType tests (Paolo Borelli)
-        - Split GStrv and array variant tests in their own classes (Paolo Borelli)
-        - Add unit test for builder's connect_after (Paolo Borelli)
-        - fix GtkBuilder signal connection 'after' logic (Ryan Lortie)
-        - test(1) uses '=' to test if strings are identical (Patrick Welche)
-        - pygspawn: improve error checking (Ryan Lortie)
-
-3.1.0   06-Feb-2012
-        - Updated DOAP file to only include people currently actively working on the project (Sebastian Pölsterl)
-        - Revert "Convert all strings to utf-8 encoding when retrieving from TreeModel" (Sebastian Pölsterl)
-        - tests: Fixed issues with python3 (Sebastian Pölsterl)
-        - Properly distinguish between different integer types for properties (Sebastian Pölsterl)
-        - Distinguish between GArray and GPtrArray when cleaning up (Sebastian Pölsterl)
-        - Add null_gerror_callback unit test (Paolo Borelli)
-        - pyglib_error_check: Re-add missing NULL check (Martin Pitt)
-        - Add tests/runtests-windows.py to source tarball (Michael Culbertson)
-        - Don't issue a depreciation warning for GtkDialog's NO_SEPARATOR flag, even when unused (Sebastian Pölsterl)
-        - Fix bool() operations on GLib.Variant objects (Nirbheek Chauhan)
-        - Fix hash() and __eq__() for GLib.Variant objects (Nirbheek Chauhan)
-        - Fix method names of callback tests (Martin Pitt)
-        - Cairo: add missing braces around array-of-struct definition (Will Thompson)
-        - g_instance_init: cast to PyGObject * as needed (Will Thompson)
-        - Fix a few set-but-not-used warnings. (Will Thompson)
-        - pygmainloop: allow for extra arguments in 'quit' method (Stefano Facchini)
-        - Fix bytearray test compatibility with python3 (Alexandre Rostovtsev)
-        - Respect transfer-type when demarshalling GErrors (Alberto Mardegan)
-        - Support GHashTable and GError as callback/closure arguments (Alberto Mardegan)
-        - Don't leak when marshalling GErrors to C (Will Thompson)
-        - Support functions which return GError (Will Thompson)
-        - Fix indentation of _pygi_argument_to_object() (Alberto Mardegan)
-        - Avoid C99 syntax. (Paolo Borelli)
-        - Connect to first action of a radio group. (Paolo Borelli)
-        - Use g_slist_free_full in pygi-closure. (Paolo Borelli)
-        - Avoid O(n^2) behavior when marshalling lists (Paolo Borelli)
-        - Handle NULL as a valid case of a char** array (Paolo Borelli)
-        - Branching, bump version to 3.1.0 (Tomeu Vizoso)
-        - Add notes about branching to HACKING (Tomeu Vizoso)
-        - Fixed bug where GObject.property did not respect minimum and maximum values (Sebastian Pölsterl)
-        - Remove mention of removed option --enable-docs (Tomeu Vizoso)
-        - Fix sebp's name in NEWS (Tomeu Vizoso)
-
-3.0.3   12-Dec-2011
-        - Convert all modifier constants to Gdk.ModifierType (Manuel Quiñones)
-        - Convert all strings to utf-8 encoding when retrieving from TreeModel (Sebastian Pölsterl)
-        - add test for bytearray variants (John (J5) Palmieri)
-        - handle NULL arrays correctly for each array type (John (J5) Palmieri)
-        - Revert "Revert "Fix array termination and size calculation"" (John (J5) Palmieri)
-        - pygmainloop: avoid lockups if multiple glib.MainLoop exist (Owen W. Taylor)
-        - Properly chain up to the class that implements a given vfunc. (Tomeu Vizoso)
-        - Revert "Fix array termination and size calculation" (Tomeu Vizoso)
-        - Fix array termination and size calculation (Holger Berndt)
-        - pygi-convert: fix for Pango.Alignment (Daniel Drake)
-        - pygi-convert: fix for Gtk.Orientation (Daniel Drake)
-        - Add tests for calling closures (Martin Pitt)
-        - fix marshaling of arrays of GVariants (Mikkel Kamstrup Erlandsen)
-
-3.0.2   21-Oct-2011
-        - Add tests for boxed properties. (Ignacio Casal Quinteiro)
-        - Allow GBoxed types as property (Timo Vanwynsberghe)
-        - when converting an object with transfer none, make sure the wrapper owns a ref (John (J5) Palmieri)
-        - unit test for checking ref count of object param in signals (John (J5) Palmieri)
-        - Gdk overrides: Unbreak for Gdk-2.0 (Martin Pitt)
-        - Do union member checks for unions that are parameters (John (J5) Palmieri)
-
-3.0.1   30-Sep-2011
-       - when checking instances union members are same type as parent
-       - add a floating flag to pygobjects
-       - Revert "Fix refcount bug by not creating python wrapper during gobject init stage"
-
-3.0.0   19-Sep-2011
-        - up version required of gobject-introspection to 1.29.0 (John (J5) Palmieri)
-        - fix most warnings (John (J5) Palmieri)
-
-2.90.4  15-Sep-2011 (3.0 pre-release)
-        - do not pass in len(str) to the length argument of gtk_test_buffer_insert* apis (John (J5) Palmieri)
-        - Switch tarball compression format to tar.xz only. (Dieter Verfaillie)
-        - Remove pygtk_version attribute from internal gi._gobject module. (Dieter Verfaillie)
-        - remove overridesdir from the .pc file and add it to the gi module (John (J5) Palmieri)
-        - fix tests to correctly construct a dummy Gtk.TargetEntry (John (J5) Palmieri)
-        - we now assume that C arrays of structs are flat so memcpy them when marshalling (John (J5) Palmieri)
-        - only update the arg counts once if child arg comes before parent arg (John (J5) Palmieri)
-        - Fix refcount bug by not creating python wrapper during gobject init stage (John (J5) Palmieri)
-        - don't destroy just created wrapper when object is created via g_object_new (John (J5) Palmieri)
-        - Remove deprecated API from pygobject.h (Steve Frécinaux)
-        - Convert gtk.TRUE/FALSE to Python True/False. (Marcin Owsiany)
-        - Drop legacy __gobject_init__ method of GObject.Object. (Steve Frécinaux)
-        - AM_CHECK_PYTHON_LIBS does not work for lib64 (Dieter Verfaillie)
-        - Remove common_ldflags from Makefile.am as it is no longer used. (Dieter Verfaillie)
-        - check if object is actually a PyGFlag before trying to access g_type (John (J5) Palmieri)
-        - fix regression - add instance type checks since Py3 no longer does this for us (John (J5) Palmieri)
-        - refactor in/out marshalling to be to_py/from_py (John (J5) Palmieri)
-        - Examples: fix cairo-demo.py imports (Dieter Verfaillie)
-        - Fix paths and add missing overridesdir variable used in uninstalled pkgconfig file (Dieter Verfaillie)
-        - Remove no longer used variables from pkgconfig files (Dieter Verfaillie)
-        - docs/Makefile.am and m4/python.m4: Python3 portability fixes (Dieter Verfaillie)
-        - Refactor and clean Makefile.am files (Dieter Verfaillie)
-        - Remove all PLATFORM_VERSION = 2.0 traces (Dieter Verfaillie)
-        - Remove gi/tests/ directory as all the tests now live in tests/ (Dieter Verfaillie)
-        - autogen.sh: Use autoreconf instead of a custom script and honor ACLOCAL_FLAGS (Dieter Verfaillie)
-        - use improved python.m4 macros to search for Python headers and libs (Dieter Verfaillie)
-        - Make maintiner mode enabled by default (Javier Jardón)
-        - Disable documentation for now since they are completely wrong for GI. (Dieter Verfaillie)
-        - Fix documentation installation directory (Dieter Verfaillie)
-        - Remove distutils based build system. (Dieter Verfaillie)
-        - [gtk-demo] Fix syntax highlighter encoding issue (Dieter Verfaillie)
-        - overrides: add constants for atoms (Ignacio Casal Quinteiro)
-        - Drop pygobject_construct() from public API. (Steve Frécinaux)
-
-2.90.3  31-Aug-2011 (3.0 pre-release)
-        - support skip annotation for return values (John (J5) Palmieri)
-        - Test GPtrArray regression (Xavier Claessens)
-        - Drop support for old constructor style. (Steve Frécinaux)
-        - Drop support for sink functions. (Steve Frécinaux)
-        - Reinstate copying of in-line structs in arrays (Mike Gorse)
-        - fix inline struct array handling (John (J5) Palmieri)
-        - fix on demos (Dieter Verfaillie)
-        - Added support for __setitem__ to TreeModel and support for slices to TreeModelRow (Sebastian Pölsterl)
-        - Convert ACCEL_* constants into Gtk.AccelFlags. (Olav Vitters)
-        - Convert TREE_VIEW_DROP_* constants into Gtk.TreeViewDropPosition (Olav Vitters)
-
-2.90.2  18-Aug-2011 (3.0 pre-release)
-        - remove tests that were removed from gi (John (J5) Palmieri)
-        - don't calculate item_size using is_pointer (John (J5) Palmieri)
-        - Updated signal example to use GObject introspection (Timo Vanwynsberghe)
-        - Updated properties example to use GObject introspection (Timo Vanwynsberghe)
-        - Add override for GLib.Variant.split_signature() (Martin Pitt)
-        - [pygi-convert.sh] Handle the import of pygtk and require Gtk 3.0 (Timo Vanwynsberghe)
-        - Install pygobject.h again. (Ignacio Casal Quinteiro)
-        - update the doap file (John (J5) Palmieri)
-
-2.90.1  14-Aug-2011 (3.0 pre-release)
-       - pass exta keywords to the Box constructor (John (J5) Palmieri)
-        - add (Tree|List)Store set method override (John (J5) Palmieri)
-        - add test for object arrays (John (J5) Palmieri)
-        - only support C pointer arrays for structs and objects (John (J5) Palmieri)
-        - revert Gtk.Window override because it causes issues with subclasses (John (J5) Palmieri)
-        - take GIL in _pygi_invoke_closure_free (bug #647016) (Jonathan Matthew)
-        - Add a default parameter to GtkTreeModel.filter_new (Johan Dahlin)
-        - Add vbox/action_area properties (Johan Dahlin)
-        - Add a couple of constructors (Johan Dahlin)
-        - Do not always pass in user_data to callbacks. (Johan Dahlin)
-        - Add a default detail value for Widget.render_icon (Johan Dahlin)
-        - Add an override for Gdk.color_parse() (Johan Dahlin)
-        - Support function calling with keyword arguments in invoke. (Laszlo Pandy)
-        - remove references to deprecated GI_INFO_TYPE_ERROR_DOMAIN (John (J5) Palmieri)
-        - Fix gobject vs. gi.repository warning (Martin Pitt)
-        - make GObject and GLib able to take overrides (John (J5) Palmieri)
-        - avoid dependency issue by importing the internal gobject (John (J5) Palmieri)
-        - fix tests to use the new GLib module (John (J5) Palmieri)
-        - add DynamicGLibModule which works like DynamicGObjectModule (John (J5) Palmieri)
-        - refactor, add objects and types to the correct internal module (John (J5) Palmieri)
-        - rename the pyglib shared library so we don't load the old one (John (J5) Palmieri)
-        - refactor tests to only use PyGObject 3 syntax (John (J5) Palmieri)
-        - refactor the internal _glib module to import correct modules (John (J5) Palmieri)
-        - refactor to use the new internal _glib and _gobject modules (John (J5) Palmieri)
-        - refactor gi module to import and use internal _gobject module (John (J5) Palmieri)
-        - move the static bits internal to gi and refactor build files (John (J5) Palmieri)
-        - remove pygtk.py (John (J5) Palmieri)
-        - introspection is no longer optional (John (J5) Palmieri)
-        - up platform version to 3.0 (John (J5) Palmieri)
-        - [gi] Handle GVariants from callback return values (Martin Pitt)
-        - Handle GVariants for callback arguments (Martin Pitt)
-        - [gi] Fix crash: check return value of _invoke_state_init_from_callable_cache() before continuing. (Laszlo Pandy)
-        - [gi] Pass gtype as first parameter to vfuncs (instead of using kwargs). (Laszlo Pandy)
-        - remove codegen (John (J5) Palmieri)
-        - remove some left over ifdefs to complete merge of the invoke-rewrite branch (John (J5) Palmieri)
-        - rename pygi-invoke-ng to pygi-invoke (John (J5) Palmieri)
-        - make invoke-ng the only invoker (John (J5) Palmieri)
-        - Merge branch 'master' into invoke-rewrite (John (J5) Palmieri)
-        - Merge branch 'master' into invoke-rewrite (John (J5) Palmieri)
-        - split the marshalling routines into two source files (John (J5) Palmieri)
-        - Ship tests/te_ST@nouppera in release tarballs for tests to succeed (Martin Pitt)
-        - [invoke] break out caller_allocates allocating into its own function (John (J5) Palmieri)
-        - [invoke] missed a bit when removing constructor_class usage (John (J5) Palmieri)
-        - [invoke] don't hold on to the constructor class, just add a TODO (John (J5) Palmieri)
-        - [gi] Port test_properties from static gio to GI Gio (Martin Pitt)
-        - [python3] Fix maketrans import (Martin Pitt)
-        - [caching] remove all inline compiler flags (John (J5) Palmieri)
-        - [caching] refactor function names to be less confusing (John (J5) Palmieri)
-        - [overrides] deprecate the use of type keyword MessageDialog constructor (John (J5) Palmieri)
-        - gdbus tests: Fix hang if test case fails (Martin Pitt)
-        - use an enum instead of booleans to denote function type (John (J5) Palmieri)
-        - rename aux arguments to child arguments to make their purpose clearer (John (J5) Palmieri)
-        - Fixed the cairo example (Timo Vanwynsberghe)
-        - Add override binding for Gtk.ListStore.prepend(). (Adam Dingle)
-        - Fix crash in Gtk.TextIter overrides (Martin Pitt)
-        - use gssize instead of int for arg indexes (John (J5) Palmieri)
-        - [cache] remove refrence to default value as it is not implemented yet (John (J5) Palmieri)
-        - Handle arguments that are flags correctly (Sebastian Pölsterl)
-        - correctly initialize the _gi_cairo_functions array to be zero filled (John (J5) Palmieri)
-        - correctly initialize the _gi_cairo_functions array to be zero filled (John (J5) Palmieri)
-        - pass in the address of the gerror, not the gerror itself (John (J5) Palmieri)
-        - [gi] handle marshalling gerrors arguments for signals (John (J5) Palmieri)
-        - [gi-invoke-ng] fix NULL check to check before we access the cache struct (John (J5) Palmieri)
-        - [gi-tests] add test for PyGObject->PyObject TreeModel storage (John (J5) Palmieri)
-        - [gtk-overrides] special case TreeModel columns of PYGOBJECT types (John (J5) Palmieri)
-        - [gi-invoke-ng] copy structs when transfer is full for array (John (J5) Palmieri)
-        - [gtk-override] print warning if user imports Gtk 2.0 (John (J5) Palmieri)
-        - [gtk-overrides] allow the message_type keyword to be used for MessageDialogs (John (J5) Palmieri)
-        - Add support for enums in gobject.property (Johan Dahlin)
-        - Add support for enums in gobject.property (Johan Dahlin)
-        - [gi-invoke-ng] use g_slice for allocating GValues that are caller allocated (John (J5) Palmieri)
-        - [gi-invoke-ng] Convert Overflow errors to ValueErrors when marshalling integers (John (J5) Palmieri)
-        - [gi-invoke-ng] only cache caller allocates for interfaces as some API are broken (John (J5) Palmieri)
-        - [gi-invoke-ng] handle in pointer array marshalling (John (J5) Palmieri)
-        - Adding GPtrArray tests (Alex Eftimie)
-        - [gi-invoke-ng] fix array element offset calculations (John (J5) Palmieri)
-        - [gi] don't clean up arguments that weren't yet processed during in arg failure (John (J5) Palmieri)
-        - [gi-overrides] use new instead of init when constructing a GLib.VariantBuilder (John (J5) Palmieri)
-        - [gi-invoke-ng] actual code to import overrides (John (J5) Palmieri)
-        - [gi-invoke-ng] import pytypes so we get overrides (John (J5) Palmieri)
-        - [gi-invoke-ng] handle gvariants now that they are not foreign (John (J5) Palmieri)
-        - [gi-invoke-ng] do not try to clean up NULL arguments (John (J5) Palmieri)
-        - Merge branch 'master' into invoke-rewrite (John (J5) Palmieri)
-        - Merge branch 'master' into invoke-rewrite (John (J5) Palmieri)
-        - closure: avoid double free crash (Ignacio Casal Quinteiro)
-        - Added __eq__ method for Gdk.Color and Gdk.RGBA (Jason Siefken)
-        - closure: Check the out arg is not null. Fixes bug #651812 (Ignacio Casal Quinteiro)
-        - Use constants instead of literals (Tomeu Vizoso)
-        - GVariant has now a GType, take that into account (Tomeu Vizoso)
-        - GVariantType is a boxed struct (Tomeu Vizoso)
-        - Use _gi.Struct to wrap fundamentals (Tomeu Vizoso)
-        - Merge gi/HACKING into /HACKING (Tomeu Vizoso)
-        - Fix GC-related crash during PyGObject deallocation (Daniel Drake)
-        - [gi-invoke-ng] enable invoke-ng by default (John (J5) Palmieri)
-        - [gi-invoke-ng] add code to clean up when input values fail to marshal (John (J5) Palmieri)
-        - [gi-invoke-ng] add hash cleanup routines (John (J5) Palmieri)
-        - [gi-invoke-ng] handle arrays with transfers of GI_TRANSFER_CONTAINER (John (J5) Palmieri)
-        - [gi-invoke-ng] add list cleanup routines (John (J5) Palmieri)
-        - indentation fix (John (J5) Palmieri)
-        - [gi-invoke-ng] add out array cleanup (John (J5) Palmieri)
-        - [gi-invoke-ng] do not allocate null terminator for garray (John (J5) Palmieri)
-        - [gi-invoke-ng] add array cleanup for in arrays (John (J5) Palmieri)
-        - [gi-invoke-ng] remove remaining bits of the invoke stage state machine (John (J5) Palmieri)
-        - [gi-invoke-ng] revamp cleanup framework to be orthogonal to cache setup (John (J5) Palmieri)
-        - [gi-invoke-ng] stub out a cleaner way of cleaning up after ourselves (John (J5) Palmieri)
-        - Doc Extractor: Correct the logic of the --no-since option. (José Alburquerque)
-        - Doc Extractor: Add a --no-since option. (José Alburquerque)
-        - [gi-invoke-ng] tweek cleanup routines (John (J5) Palmieri)
-        - Fix symbol names to be locale independent (Martin Pitt)
-        - [gi] pygi-convert.sh: Convert gtk.gdk.CROSSHAIR (Martin Pitt)
-        - [gi-invoke-ng] handle filename cleanup with the utf8 cleanup function (John (J5) Palmieri)
-        - [gi-invoke-ng] handle caller allocates cleanup (John (J5) Palmieri)
-        - [gi-invoke-ng] refactor the cleanup code and add utf8 cleanup as initial test (John (J5) Palmieri)
-        - use PyCapsule when importing pycairo/require pycairo 1.10.0 for python3 builds (John (J5) Palmieri)
-        - [python3] fix build. PYcairo_IMPORT doesn't exists anymore (Ignacio Casal Quinteiro)
-        - Updated DOAP file (Sebastian Pölsterl)
-        - [gi] Don't create variant twice (Sebastian Pölsterl)
-        - pygi-convert.sh: Make sure the uppercase GObject module is imported instead of the lowercase (Sebastian Pölsterl)
-        - [gi] Removed hack to avoid using GLib.Variant.new_variant. (Sebastian Pölsterl)
-        - [gi] Added additional test case for GVariant handling (Sebastian Pölsterl)
-        - [gi] Added support for GVariant arguments (Sebastian Pölsterl)
-        - fix static ABI for setting string gvalues from python objects (John (J5) Palmieri)
-        - dsextras.py: ensure eol characters are preserved when writing template files (so \n does not become \r\n) (Dieter Verfaillie)
-        - dsextras.py: remove \r as wel as \n character (Dieter Verfaillie)
-        - use PyCapsule when importing pycairo/require pycairo 1.10.0 for python3 builds (John (J5) Palmieri)
-        - [python3] fix build. PYcairo_IMPORT doesn't exists anymore (Ignacio Casal Quinteiro)
-        - Updated DOAP file (Sebastian Pölsterl)
-        - [gi] Don't create variant twice (Sebastian Pölsterl)
-        - pygi-convert.sh: Make sure the uppercase GObject module is imported instead of the lowercase (Sebastian Pölsterl)
-        - [gi] Removed hack to avoid using GLib.Variant.new_variant. (Sebastian Pölsterl)
-        - [gi] Added additional test case for GVariant handling (Sebastian Pölsterl)
-        - [gi-invoke-ng] fix prototype (John (J5) Palmieri)
-        - [gi-invoke-ng] create new framework for cleaning up args (John (J5) Palmieri)
-        - [gi] Added support for GVariant arguments (Sebastian Pölsterl)
-        - [gi-invoke-ng] fix marshal header that is no longer part of pygi-arguments.h (John (J5) Palmieri)
-        - [gi-invoke-ng] code style space fixes (John (J5) Palmieri)
-        - [gi-invoke-ng] don't decref value taken from a dict as it is borrowed (John (J5) Palmieri)
-        - [gi-invoke-ng] return None when appropriate so we don't crash (John (J5) Palmieri)
-        - [gi-invoke-ng] fix aux value caching (John (J5) Palmieri)
-        - [gi-invoke-ng] backport handling flags with no gtype (John (J5) Palmieri)
-        - [gi-invoke-ng] backport raw gvalue handling (John (J5) Palmieri)
-        - [gi-invoke-ng] marshal instances seperately since they differ slightly from other args (John (J5) Palmieri)
-        - [gi-invoke-ng] refactor FunctionCache to be more generic CallableCache (John (J5) Palmieri)
-        - [gi-invoke-rewrite] backport glib error handling (John (J5) Palmieri)
-        - [gi-invoke-ng] backport closure passing from invoke (John (J5) Palmieri)
-        - [gi-invoke-ng] handle vfuncs and fix cosntrutors (John (J5) Palmieri)
-        - [gi-invoke-ng] handle foreign types correctly (John (J5) Palmieri)
-        - [gi] remove the class parameter from the argument list of constructors (John (J5) Palmieri)
-        - fix static ABI for setting string gvalues from python objects (John (J5) Palmieri)
-        - dsextras.py: ensure eol characters are preserved when writing template files (so \n does not become \r\n) (Dieter Verfaillie)
-        - dsextras.py: remove \r as wel as \n character (Dieter Verfaillie)
-        - [gi] make new invoke-ng codepath compile correctly (John (J5) Palmieri)
-        - [gi] conditionalize invoke code paths (John (J5) Palmieri)
-        - [gi] revert back to the type.py from master (John (J5) Palmieri)
-        - [gi] revert pygi-argument.h and move the invoke-ng code to pygi-marshal.h (John (J5) Palmieri)
-        - Merge branch 'master' into invoke-rewrite (John (J5) Palmieri)
-        - [gi] foreign types now take interface infos instead of type infos (John (J5) Palmieri)
-        - Fix GSchema tests for separate build tree (Martin Pitt)
-        - [gi] start of merge from master (John (J5) Palmieri)
-        - [gi] marshal raw closures (John (J5) Palmieri)
-        - pygi-convert.sh add GObject.xxx and webkit (John Stowers)
-        - pygi-convert.sh remove gobject tests, GObject works now (John Stowers)
-        - [gi-demos] add pickers demo (John (J5) Palmieri)
-        - [gi-demos] add menu demo (John (J5) Palmieri)
-        - [gi-overrides] fix exception block so it works in Python 2.5 (John (J5) Palmieri)
-        - Revert "Deduce PYTHON_LIBS in addition to PYTHON_INCLUDES" (Martin Pitt)
-        - setup.py: fix user_access_control option (Dieter Verfaillie)
-        - [gi] Respect the MessageType for Gtk.MessageDialog (Martin Pitt)
-        - [gi] Do not require signature for D-BUS methods without arguments (Martin Pitt)
-        - [gi-overrides] TreeViewColumn.set_cell_data_func func_data can be None (John Stowers)
-        - [gi-demos] dont try and run demos that represent directories (John Stowers)
-        - [gi-demos] some python 3 compat fixes (John (J5) Palmieri)
-        - [gi-demos] add liststore demo (John (J5) Palmieri)
-        - [gi-demos] catch the correct error class (John (J5) Palmieri)
-        - Do not leak python references when using the gobject.property() helper. (Steve Frécinaux)
-        - handle uchar as bytes, not strings in python 3 (John (J5) Palmieri)
-        - [gi-overrides] handle unichar gvalues when setting treemodels (John (J5) Palmieri)
-        - [gi-overrides] special case python 2 keywords that crept in (John (J5) Palmieri)
-        - check for the py3 _thread module in configure.ac if thread is not found (John (J5) Palmieri)
-        - [gi-demos] add iconview demo (John (J5) Palmieri)
-        - [gi] wrap the keyword argument in a dict so we don't break Python 2.5 (John (J5) Palmieri)
-        - [gi-demos] add the combobox with string ids section to the demos (John (J5) Palmieri)
-        - [gi-overrides] add an override for Gdk.RGBA (John (J5) Palmieri)
-        - [gi-demos] fix up search-entry to reflect annotations fixed in Gtk+ master (John (J5) Palmieri)
-        - [gi-demos] add search entry demo (John (J5) Palmieri)
-        - [gi] wrap map in a list for Python 3 compat (John (J5) Palmieri)
-        - [gi-demos] fix up the validation combobox (John (J5) Palmieri)
-        - add overridesdir variable in the .pc file for 3rd party overrides (John (J5) Palmieri)
-        - setup.py: Set bdist_wininst user-access-control property (Dieter Verfaillie)
-        - Fix uninitialized variable in gi.require_version() (Martin Pitt)
-        - Run tests with LC_MESSAGES="C" (Martin Pitt)
-        - [gi-overrides] override Gtk.stock_lookup to not return success (John (J5) Palmieri)
-
-2.27.91 28-Feb-2011 (2.28 pre-release)
-       - [gi-tests] use Gdk.test_simulate_button instead of emitting event ourselves (John (J5) Palmieri)
-       - [gi-tests] tests for EventButton override. (Laszlo Pandy)
-       - Skip interfaces when checking for conflicts in the MRO (Tomeu Vizoso)
-       - [gi-overrides] Add event methods to all event union members (John (J5) Palmieri)
-       - [gi] check to see if object is a member of a union when validating paramaters (John (J5) Palmieri)
-       - [gi] Remove DyanmicModule.load() to _load() to prevent overriding GI attrs. (Laszlo Pandy)
-       - Test case with John's fix for crash with C arrays and a GError is set. (Laszlo Pandy)
-       - [gi-overrides] fix setting rows in treeview to accept None as a value (John (J5) Palmieri)
-       - [gi] Add value_name for enum and flags from introspection "c:identifier" (if attr is available). (Laszlo Pandy)
-       - Don't force loading of DynamicModule until set in sys.modules (Laszlo Pandy)
-       - Fix flags with multiple names for the same value. (Laszlo Pandy)
-       - [gi-demos] add liststore demo (John (J5) Palmieri)
-       - [gi-demos] run through the demos and remove the FIXMEs that have been fixed (John (J5) Palmieri)
-       - Load typelibs at import time, add gi.require_version() (Tomeu Vizoso)
-       - use GValue support to marshal GtkTreeModel values correctly (John (J5) Palmieri)
-       - [gi] pass raw GValues instead of trying to marshal them (John (J5) Palmieri)
-       - [gi-demos] add icon view edit and drag-and-drop demo (John (J5) Palmieri)
-       - [gi] Register GType for non-GType enums and flags at runtime. (Laszlo Pandy)
-       - [gi-demos] add info bars demo (John (J5) Palmieri)
-       - tests/runtests.py: Add missing "import sys" (Martin Pitt)
-       - [gi] Add Pythonic gdbus method invocation (Martin Pitt)
-       - Skip GError out parameters in Python closure. (Laszlo Pandy)
-       - [gi-demos] added rotate text demo (John (J5) Palmieri)
-       - [gi-demos] add images demo (John (J5) Palmieri)
-       - [gi-demos] add pixbuf demo (John (J5) Palmieri)
-       - [gi-demos] remove fixmes from print demo, fixed in pango (John (J5) Palmieri)
-       - [gi-demos] add printing demo (John (J5) Palmieri)
-       - [gi-overrides] add cursor overrides (John (J5) Palmieri)
-       - [gi-demos] add the links demo (John (J5) Palmieri)
-       - [gi-demos] add expander demo (John (J5) Palmieri)
-       - [gi-overrides] use pop instead of del and add extra tests for Gtk.Table kwargs (John (J5) Palmieri)
-       - [tests] Separate processes for GI and static binding tests. (Laszlo Pandy)
-       - [GI] Remove implicit loading of gi module preserve the code path for static bindings. (Laszlo Pandy)
-       - [gi-demos] add dialogs demo (John (J5) Palmieri)
-       - [gi-overrides] fix typo in GtkTable constructor (John (J5) Palmieri)
-       - [gi-demos] keep popup menu from destroying itself by holding a ref in app class (John (J5) Palmieri)
-       - [gi-overrides] add a Gtk.Menu override for the popup method (John (J5) Palmieri)
-       - [gi-demos] fix the about dialog in appwindow demo (John (J5) Palmieri)
-       - [gi-demos] fix clipboard demo so DnD works (John (J5) Palmieri)
-       - [gi-demos] fix clipboard demo to reflect new API (John (J5) Palmieri)
-       - [gi-demo] Fix color dialog demo to run with new draw, style and color apis (John (J5) Palmieri)
-       - [gi-demos] fix most of the combobox app (John (J5) Palmieri)
-       - Use PyGI type conversion (to fix foreign types) for signal callbacks. (Laszlo Pandy)
-       - [gi-demos] fix drawingarea app to use the new draw api (John (J5) Palmieri)
-       - [gi-overrides] for Gtk 3 alias Gdk.Rectangle to cairo.RectangleInt (John (J5) Palmieri)
-       - [gi-overrides] let user set the proper property names in Gtk.Table (John (J5) Palmieri)
-       - [gi-demos] get appwindow demo working again (John (J5) Palmieri)
-       - [gi-demos] fixed use of tree_iter_get (John (J5) Palmieri)
-
-2.27.90 11-Feb-2011 (2.28 pre-release)
-       - fix build to correctly use python-config (John (J5) Palmieri)
-       - Run gio tests separately when enabled (Martin Pitt)
-       - Revert "Remove gio static bindings" (Martin Pitt)
-       - Decrease the refcount for GInitiallyUnowned constructors. (Steve Frécinaux)
-       - Ensure the sink functions are only ran once. (Steve Frécinaux)
-       - Revert "Fix wrong refcount when calling introspected widget constructors" (Steve Frécinaux)
-       - Revert "Fix reference leaks for GInitiallyUnowned objects" (Steve Frécinaux)
-       - Run test suite under dbus-launch (Martin Pitt)
-       - Fix test_gdbus.py to be Python3 friendly (Martin Pitt)
-       - [gi] Provide comfortable GSettings API (Martin Pitt)
-       - Fix vfunc search bug when using GInterfaces and a do_* method. (Laszlo Pandy)
-       - [GI] Add tests for Gtk.Widget.drag_* methods. (Laszlo Pandy)
-       - [python 3] use the right syntaxis to raise exceptions (Ignacio Casal Quinteiro)
-       - [gi] return PYGLIB_MODULE_ERROR_RETURN on error and use pygobject_init (Ignacio Casal Quinteiro)
-       - [gi] return PYGLIB_MODULE_ERROR_RETURN on error (Ignacio Casal Quinteiro)
-       - Fix wrong refcount when calling introspected widget constructors (Steve Frécinaux)
-       - Gdk.Window: Map the standard constructor to the *new* constructor (Simon Schampijer)
-       - Ship tests/org.gnome.test.gschema.xml in dist tarballs (Martin Pitt)
-       - [gi] Add GSettings tests (Martin Pitt)
-       - [gi] Provide GtkTextBuffer.insert_with_tags_by_name() (Martin Pitt)
-       - [gi] Support tag names in GtkTextBuffer.insert_with_tags() (Martin Pitt)
-       - Add MAINTAINERCLEANFILES (Ignacio Casal Quinteiro)
-       - Remove .gitignore files and use git.mk (Ignacio Casal Quinteiro)
-       - pygi-convert.sh: Convert Pango.TabAlign.* (Martin Pitt)
-       - pygi-convert.sh: Drop window -> get_window() conversion (Martin Pitt)
-       - pygi-convert.sh: Don't convert self.window assignments (Martin Pitt)
-       - Fix leaked python reference in python-defined subclasses (Steve Frécinaux)
-       - Add some tests for the number of python refs held at creation time (Steve Frécinaux)
-       - Factor out parameter marshalling from construction functions. (Steve Frécinaux)
-       - [gi] in python 3 an array of uint8 can be bytes but not string (John (J5) Palmieri)
-       - [gi] fix Gio.FileEnumerator to reflect the Python 3 iter protocol (John (J5) Palmieri)
-       - [gi] python 3 fixes (John (J5) Palmieri)
-       - [gi] fix try/except blocks using depricated raise format (John (J5) Palmieri)
-       - [gi] Add docstring to GLib.Variant constructor (Martin Pitt)
-       - [gi] update gdbus test cases for previous GVariant change (Martin Pitt)
-       - [gi] Accept only a single object in GLib.Variant constructor (Martin Pitt)
-       - Speed up _setup_native_vfuncs() (Laszlo Pandy)
-       - Speed up class creation: rewrite _setup_vfuncs() to be much more efficient. (Laszlo Pandy)
-       - pygi-convert.sh: Convert gtk.UI_MANAGER_* (Sebastian Pölsterl)
-       - pygi-convert.sh: Convert gdk.GRAB_* (Sebastian Pölsterl)
-       - [gi] set the gtype GValue correctly (Ignacio Casal Quinteiro)
-       - [gi] use the right argument type for callback (Ignacio Casal Quinteiro)
-       - [gi] Add test cases for GDBus client operations (Martin Pitt)
-       - [gi] Add Variant construction/unpack support for boxed Variants (Martin Pitt)
-       - Merge branch 'windows-setup-fixes' (Dieter Verfaillie)
-       - pygi-convert.sh: GdkPixbuf methods (Thomas Hindoe Paaboel Andersen)
-       - pygi-convert.sh: Gdk.COLORSPACE_RGB (Thomas Hindoe Paaboel Andersen)
-       - [gi] Support nested objects and empty sequences in GLib.Variant building (Martin Pitt)
-       - Uncomment test_gi.TestInterfaceClash (Tomeu Vizoso)
-       - Fix reference leaks for GInitiallyUnowned objects (Steve Frécinaux)
-       - Add tests for refcount of a GObject owned by a library (Steve Frécinaux)
-       - Add a test to check for regular object reference count (Steve Frécinaux)
-       - [gi] Update TreeView.enable_model_drag_{source,dest} to current GTK (Martin Pitt)
-       - Fix a typo in a private symbol name. (Steve Frécinaux)
-       - pygi-convert.sh: Convert glib.source_remove() (Martin Pitt)
-       - Fix typo in previous commit to actually convert glib.GError (Martin Pitt)
-       - pygi-convert.sh: Move some glib bits which are better handled by gobject (Martin Pitt)
-       - Modify override for Gtk.Adjustment to allow position or keyword arguments in __init__(). (Laszlo Pandy)
-       - [gi] Fix small typo in previous commit (Martin Pitt)
-       - [gi] Add pythonic iterator and indexing for string GVariants (Martin Pitt)
-       - Construct structs using default API constructor (Tomeu Vizoso)
-       - pygi-convert.sh: Migrate Gdk.Cursor constructor, and some cursor names (Martin Pitt)
-       - pygi-convert.sh: Handle .window attributes (Martin Pitt)
-       - Also deal with foreign boxed structs (Tomeu Vizoso)
-       - [gi] Convert GErrors to GObject.GError exceptions, and throw them upon returning from calling the C function. (Laszlo Pandy)
-       - pygi-convert.sh: Don't convert glib -> GLib for now (Martin Pitt)
-       - Link libregress.so to GIO_LIBS again (Tomeu Vizoso)
-       - Fix attributes 2BUTTON_PRESS and 3BUTTON_PRESS of Gdk.EventType. (Laszlo Pandy)
-       - [gi] Fixed typo in exception (Sebastian Pölsterl)
-       - [gi] Enable handling of Gdk.EventType.2BUTTON_PRESS and 3BUTTON_PRESS (Sebastian Pölsterl)
-       - Revert "Fix Pango FontDescription override" (Martin Pitt)
-       - Python iterator interface support for GFileEnumerator. (Tony Young)
-       - Remove gio static bindings (Tomeu Vizoso)
-       - [gi] set length when marshalling guint8 erases (Ignacio Casal Quinteiro)
-       - Convert Gdk.Pixbuf to GdkPixbuf.Pixbuf (Sebastian Pölsterl)
-       - Disable calls to PyGILState_* when threads are disabled (Arnaud Charlet)
-       - pygi-convert.sh: Do not comment out set_cell_data_func() calls; these should be ported properly (Martin Pitt)
-       - pygi-convert.sh: Fix match for adding missing imports (Martin Pitt)
-       - pygi-convert.sh: Fix Gtk.Label handling to be idempotent (Martin Pitt)
-       - Remove trailing whitespace from gi/overrides/Gtk.py (Laszlo Pandy)
-       - Fix Pango FontDescription override (Martin Pitt)
-       - tests: Respect existing $GI_TYPELIB_PATH (Martin Pitt)
-       - Merge branch 'value' (Sebastian Pölsterl)
-       - GTK overrides: Do type conversion to column types of ListStore and TreeStore in set_value (Sebastian Pölsterl)
-       - Always register a new GType when a GObject class is subclassed (Steve Frécinaux)
-       - Raise required versions of GLib and GObject-Introspection (Simon van der Linden)
-       - pygi-convert.sh: Handle keysyms (Martin Pitt)
-       - GLib overrides: Add test case for array variant building (Martin Pitt)
-       - Remove cairo.RectangleInt from the foreign module (Tomeu Vizoso)
-       - Dont try to guess the transfer if its a boxed (Tomeu Vizoso)
-       - The tags can be Empty not None. (Ignacio Casal Quinteiro)
-       - Add Pythonic iterators and indexing to GVariant (Martin Pitt)
-       - Add GLib.Variant.unpack() (Martin Pitt)
-       - Add override for gtk_text_buffer_insert_with_tags (Ignacio Casal Quinteiro)
-       - Deduce PYTHON_LIBS in addition to PYTHON_INCLUDES (Simon van der Linden)
-       - Kill JD_CHECK_PYTHON_HEADERS (Simon van der Linden)
-       - Revert "Override Gtk.Box.pack_start and pack_end to set default values to be compliant with pygtk" (Sebastian Pölsterl)
-       - Revert "Override Gtk.CellLayout.pack_start and pack_end to add default values to be compliant with pygtk" (Sebastian Pölsterl)
-       - Revert "Override Gtk.TreeViewColumn.pack_start, pack_end and set_cell_data_func to add default values to be compliant with pygtk" (Sebastian Pölsterl)
-       - pygi-convert.sh: Handle gtk.combo_box_new_text() (Martin Pitt)
-       - Override TreeSortable.set_sort_func and set_default_sort_func to add default values to be pygtk compliant (Sebastian Pölsterl)
-       - Override Gtk.TreeViewColumn.pack_start, pack_end and set_cell_data_func to add default values to be compliant with pygtk (Sebastian Pölsterl)
-       - Override Gtk.CellLayout.pack_start and pack_end to add default values to be compliant with pygtk (Sebastian Pölsterl)
-       - Override Gtk.Paned pack1 and pack2 to add default values to be compliant with pygtk (Sebastian Pölsterl)
-       - Override Gtk.Box.pack_start and pack_end to set default values to be compliant with pygtk (Sebastian Pölsterl)
-       - Handle GObject subclasses in the property helper. (Steve Frécinaux)
-       - Fix handling of unicode for GtkTreeModels (Martin Pitt)
-       - In IntrospectionModule and DynamicModule classes, make all instance attributes start with an underscore. (Laszlo Pandy)
-       - Amend previous enum wrapping commit to remove redundant setting of __info__ attribute. (Laszlo Pandy)
-       - pygi-convert.sh: Handle GdkPixbuf.InterpType (Martin Pitt)
-       - Fix wrapping of enums: Create new Python type for each non-gtype enum. (Laszlo Pandy)
-       - Use g_vfunc_info_invoke for chaining up in vfuncs (Tomeu Vizoso)
-       - Move pyglib_{main_context, option_context, option_group}_new into _PyGLib_API (Simon van der Linden)
-       - pygi-convert.sh: Handle Gdk.DragAction (Martin Pitt)
-       - pygi-convert.sh: Generalize Gtk.Settings migration (Martin Pitt)
-       - pygi-convert.sh: Don't change the name of "glib" submodules (Martin Pitt)
-       - Plug another memory leak (Paolo Borelli)
-       - Plug a small memory leak. (Paolo Borelli)
-       - Override Table.attach() to behave like pygtk (Paolo Borelli)
-       - pygi-convert.sh: Convert Pango.WrapMode (Martin Pitt)
-       - pygi-convert.sh: Don't change the name of "gtk" submodules (Martin Pitt)
-       - Fix the __dir__() methods on DynamicModule and IntrospectionModule (Laszlo Pandy)
-       - pygi-convert.sh: handle ReliefStyle (Paolo Borelli)
-       - setup.py: fix the provides keyword argument (Dieter Verfaillie)
-       - setup.py: use the same spaces-less format for all setup() parameters (Dieter Verfaillie)
-       - Add a __repr__() method to DynamicModule. (Laszlo Pandy)
-       - Go back to using getattr() in DynamicModule.__getattr__ (Tomeu Vizoso)
-       - Change __dir__() to report all the attributes that __getattr__ supports (Laszlo Pandy)
-       - Bump the minimum gio dependency (Emilio Pozuelo Monfort)
-       - Add test for incorrect attributes in Gdk.Event (Tomeu Vizoso)
-       - Don't call getattr again in gi.overrides.Gdk.Event.__getattr__ (Simon van der Linden)
-       - Release allocated array of arguments when handling closures (Mike Gorse)
-       - Release GIValueInfo when checking an enum argument (Mike Gorse)
-       - Respect different type lengths when assigning out-argument pointers. (Eitan Isaacson)
-       - Fix stupid name clash (Tomeu Vizoso)
-       - Add /usr/share to XDG_DATA_DIRS when running the tests (Tomeu Vizoso)
-       - Comment out tests that require SRV lookups (Tomeu Vizoso)
-       - Use suppresion file when running valgrind (Tomeu Vizoso)
-       - Fix warnings. (Ignacio Casal Quinteiro)
-       - Allow comparing Gtk.TreePath to None (Jesse van den Kieboom)
-       - handle unicode objects in properties (John (J5) Palmieri)
-       - dsextras.py: check if gcc is there when platform is win32 and compiler is mingw32 (Dieter Verfaillie)
-       - dsextras.py: be consistent in how distutils imports are done (Dieter Verfaillie)
-       - dsextras.py: add have_gcc() function (Dieter Verfaillie)
-       - dsextras.py: use distutils.spawn.find_executable for have_pkgconfig() (Dieter Verfaillie)
-       - setup.py: fix another case of use True/False instead of 1/0 (Dieter Verfaillie)
-       - pygi-convert.sh: improve GtkSourceView conversion (Paolo Borelli)
-       - pygi-convert.sh: Gtk.DialogFlags conversion (Paolo Borelli)
-       -       Doc Extractor: Print the gtk-doc blocks sorted by function name. (José Alburquerque)
-       - pygi-convert.sh: add more Gtk conversions and sort (Paolo Borelli)
-       - pygi-convert.sh: convert Atk (Paolo Borelli)
-       - pygi-convert.sh: convert a few more Gio types (Paolo Borelli)
-       - pygi-convert.sh: more GLib conversion (Paolo Borelli)
-       - pygi-convert.sh: remove two cases handled by overrides (Paolo Borelli)
-       - Override Gtk.ScrolledWindow constructor (Paolo Borelli)
-       - pygi-convert.sh: Fix 'find' syntax (Paolo Borelli)
-       - pygi-convert.sh: start handling Gio and GLib (Paolo Borelli)
-       - pygi-convert.sh: convert Gdk.ScrollDirection. (Paolo Borelli)
-       - Override Pango.Layout constructor. (Paolo Borelli)
-       - Remove Pango.FontDescription() conversion. (Paolo Borelli)
-       - Override GtkAction and GtkRadioAction constructors. (Paolo Borelli)
-       - Override Adjustment constructor to behave like pygtk (Dmitrijs Ledkovs)
-       - add secondary_text apis to MessageDialog (John (J5) Palmieri)
-       - [gi] get rid of some debug prints and fix error messages (John (J5) Palmieri)
-       - Fix demo for override changes. (Paolo Borelli)
-       - Override Pango.FontDescription. (Paolo Borelli)
-       - Stop checking that all vfuncs are implemented (Tomeu Vizoso)
-       - Fix usage of TreeIter api that is now an override. (Paolo Borelli)
-       - Fix Gtk.Label(label="Foo") (Paolo Borelli)
-       - Fix typo when raising an exception (Paolo Borelli)
-       - pygi-convert.sh: Added more conversions (Sebastian Pölsterl)
-       - Override LinkButton constructor to make 'uri' mandatory (Paolo Borelli)
-       - Container should be iterable. (Dmitry Morozov)
-       - No need to import Gdk (Paolo Borelli)
-       - Remove semicolumns (Paolo Borelli)
-       - [gi] make sure Gtk.Button override passes all keywords to parent constructor (John (J5) Palmieri)
-       - Fix cut&paste error in the Label override (Paolo Borelli)
-       - pygi-convert.sh: handle TextWindowType (Paolo Borelli)
-       - Override Label constructor to behave like pygtk (Paolo Borelli)
-       - Override GtkTable constructor to behave like pygtk (Paolo Borelli)
-       - pygi-convert.sh: convert MovementStep (Paolo Borelli)
-       - Update Gdk overrides to work with latest Gtk+ 3 (Paolo Borelli)
-       - Gtk: add an override for Gtk.main_quit (Johan Dahlin)
-       - [gi] handle subtypes when inserting into tree models (John (J5) Palmieri)
-       - Override TreeSelection.select_path and TreeView.scroll_to_cell (Paolo Borelli)
-       - Override TreePath.__new__ (Paolo Borelli)
-       - Override Container to behave like a sequence (Paolo Borelli)
-       - refactor Jonathan Matthew recurse vfunc patch so it applys and clean up a bit (John (J5) Palmieri)
-       - Recurse up through base classes when setting up vfuncs (Jonathan Matthew)
-       - add a profiling torture test for when we fix up invoke (John (J5) Palmieri)
-       - moved dynamic and base modules outside of gtk-2.0 directory (John (J5) Palmieri)
-       - add test for inout argument count (John (J5) Palmieri)
-       - [gi] add check for UNICHAR (John (J5) Palmieri)
-       - Support gunichar (Paolo Borelli)
-       - pygi-convert.sh: gtk.accel_map -> Gtk.AccelMap._ (Paolo Borelli)
-       - pygi-convert.sh: handle "from gtk import gdk" (Paolo Borelli)
-       - pygi-convert.sh: add some Pango special cases (Paolo Borelli)
-       - Override TextIter (begins|ends|toggles)_tag() (Paolo Borelli)
-       - Override TextBuffer.set_text() to make length optional (Paolo Borelli)
-       - Override TextBuffer.create_mark() (Paolo Borelli)
-       - Fix TextBuffer.get_selection_bounds() override (Paolo Borelli)
-       - [gi] fix ActionGroup constructor to allow other keyword properties to be set (John (J5) Palmieri)
-       - [gi] require the name parameter when creatin a Gtk.ActionGroup (John (J5) Palmieri)
-       - Override UIManager.insert_action_group (Paolo Borelli)
-       - Override TreeModel.get() to return a tuple (Paolo Borelli)
-       - Make TreeSelection.get_selected_rows compatible with PyGtk (Paolo Borelli)
-       - [gi] switch to using sequences/tuples when marshalling cairo_rectangle_int_t (John (J5) Palmieri)
-       - [gi] overrides for treeview Drag and Drop (John (J5) Palmieri)
-       - [gi] when encountering guint8 arrays treat them as byte arrays (John (J5) Palmieri)
-       - pygi-convert.sh: Add pynotify -> Notify (Martin Pitt)
-       - pygi-convert.sh: Remove sugar specifics, and allow command line file list (Martin Pitt)
-       - pygi-convert.sh: Cover Message and Buttons types (Martin Pitt)
-       - [gi] fix actiongroup test since actions are hashed (John (J5) Palmieri)
-       - [gi] when converting to UTF-8 accept Python Unicode objects as input (Python 2) (John (J5) Palmieri)
-       - Correct a bug in the freeing of memory in pygi-invoke.c. (Damien Caliste)
-       - update news for release (John (J5) Palmieri)
-       - Implement richcompare for GIBaseInfo (Jonathan Matthew)
-       - [gi] add the rectangle_int_t forign cairo type (John (J5) Palmieri)
-       - add a foreign type for cairo_rectangle_int_t and allow it to be caller-allocated (John (J5) Palmieri)
-       - [gi] add overrides to Gtk.Editable (John (J5) Palmieri)
-       - [gi] handle virtual invokers (John (J5) Palmieri)
-       - add overrides for the insert* apis of list_store and tree_store (John (J5) Palmieri)
-       - fix dialogs overrides which were relying on broken inheritance behavior (John (J5) Palmieri)
-       - Add a overrides registry so we can refrence overrides inside the module (John (J5) Palmieri)
-       - Merge remote branch 'dieterv/setup-fixes-for-merge' (John Stowers)
-       - setup.py: ease maintenance burden for tests installation (Dieter Verfaillie)
-       - fix inheritence issues in overrides (John (J5) Palmieri)
-       - tests: add runtests-windows.py script (Dieter Verfaillie)
-       - pygobject_postinstall.py: remove pygobject-2.0.pc treatment from postinstall as pkg-config on windows figures out the correct prefix at runtime (Dieter Verfaillie)
-       - pygobject_postinstall.py: remove shortcut creation (Dieter Verfaillie)
-       - setup.py: formatting cleanup, makes things readable (Dieter Verfaillie)
-       - setup.py: build and install tests (Dieter Verfaillie)
-       - setup.py: install documentation when available on build system (Dieter Verfaillie)
-       - setup.py: install pygobject-codegen script (Dieter Verfaillie)
-       - setup.py: install fixxref.py script (Dieter Verfaillie)
-       - setup.py: rearrange constants (Dieter Verfaillie)
-       - setup.py: check python version and pkgconig availability before anything else (Dieter Verfaillie)
-       - setup.py: simplify sys.platform != 'win32' detection and error reporting (Dieter Verfaillie)
-       - setup.py: rearrange imports (Dieter Verfaillie)
-       - README.win32: update build instructions (Dieter Verfaillie)
-       - dsextras.py: formatting cleanup, makes things readable (Dieter Verfaillie)
-       - dsextras.py: add ggc4 to MSVC compatible struct packing comment (Dieter Verfaillie)
-       - dsextras.py: use the pkgc_ functions instead of repeating pgk-config incantations all over the place (Dieter Verfaillie)
-       - dsextras.py: add pkgc_get_version and pkgc_get_defs_dir functions (Dieter Verfaillie)
-       - dsextras.py: PEP8: Comparisons to singletons like None should always be done with 'is' or 'is not', never the equality operators. (Dieter Verfaillie)
-       - dsextras.py: use True/False instead of 1/0 (Dieter Verfaillie)
-       - dsextras.py: rearrange imports (Dieter Verfaillie)
-       - Add distutils generated build/dist directories and eclipse configuration files to .gitignore (Dieter Verfaillie)
-       - [gi] add tests for calling dir on a dynamic module (John (J5) Palmieri)
-       - [gi] dir() now works for modules (Deepankar Sharma)
-       - Don't check the inner type when comparing gpointers (Simón Pena)
-       - Release GIL when calling into C functions (John (J5) Palmieri)
-       - _gi.Repository : Implement missing info bindings. (José Aliste)
-       - include Python.h so that PY_VERSION_HEX gets defined (John (J5) Palmieri)
-       - [gi] make overrides work for python 3.x protocols and alias for python 2.x (John (J5) Palmieri)
-       - Override Gtk.Widget.translate_coordinates to not return success value (Sebastian Pölsterl)
-       - Override Gtk.TreeViewColumn.cell_get_position to not return success value (Sebastian Pölsterl)
-       - Override get_path_at_pos and get_dest_row_at_pos of Gtk.TreeView to not return success value (Sebastian Pölsterl)
-       - Override Gtk.TreeSortable.get_sort_column_id to not return success value (Sebastian Pölsterl)
-       - Override forward_search and backward_search of Gtk.TextIter to not return success value (Sebastian Pölsterl)
-       - Override Gtk.TextBuffer.get_selection_bounds to not return success value (Sebastian Pölsterl)
-       - Override Gtk.RecentInfo.get_application_info to not return success value (Sebastian Pölsterl)
-       - Override Gtk.IMContext.get_surrounding to not return success value (Sebastian Pölsterl)
-       - Override get_item_at_pos, get_visible_range, get_dest_item_at_pos of Gtk.IconView to not return success value (Sebastian Pölsterl)
-       - Override Gtk.Container.get_focus_chain to not return success value (Sebastian Pölsterl)
-       - Override Gtk.ComboBox.get_active_iter to not return success value (Sebastian Pölsterl)
-       - [gi] make parameter check less strict when dealing with GValue params (John (J5) Palmieri)
-       - Shortcut removal is not needed on post-uninstall (John Stowers)
-       - Disable shortcut creation in windows installer (John Stowers)
-       - overrides for all subclasses of dialog (John (J5) Palmieri)
-       - Make TreeModel behave like in GTK-2.x (Sebastian Pölsterl)
-       - Correctly build GIO on windows (John Stowers)
-       - Require Python >= 2.6.0 for Windows build (John Stowers)
-       - Fix depreciation warning in dsextras.py (John Stowers)
-       - Fix build on windows (John Stowers)
-       - Support for GCC4 in Windows distutils build - bug 626548 (Michael Culbertson)
-       - Remove obsolete comments in dsextras.py (John Stowers)
-       - Broken dsextras.py pkg-config check error message (John Stowers)
-       - add compat functions for the deprecated PyCObject api (John (J5) Palmieri)
-       - Add __path__ attributes. (Damien Caliste)
-       - Override Gtk.TreeSelection.get_selected to not return success value. (Sebastian Pölsterl)
-       - Make row optional in Gtk.TreeStore/ListStore.append override (Vincent Untz)
-       - Revert "add compat functions for the deprecated PyCObject api" (John (J5) Palmieri)
-       - return NULL instead of -1 which fixes crash when introspection is turned off (John (J5) Palmieri)
-       - add compat functions for the deprecated PyCObject api (John (J5) Palmieri)
-       - fix commit 7fe83108 which didn't use the compat functions for string handling (John (J5) Palmieri)
-       - Python 3 fixes for dsextras and the python.m4 distribution files (John (J5) Palmieri)
-
-2.27.0 10-Nov-2010
-       - Implement richcompare for GIBaseInfo (Jonathan Matthew)
-        - [gi] add the rectangle_int_t forign cairo type (John (J5) Palmieri)
-        - add a foreign type for cairo_rectangle_int_t and allow it to be caller-allocated (John (J5) Palmieri)
-        - [gi] add overrides to Gtk.Editable (John (J5) Palmieri)
-        - [gi] handle virtual invokers (John (J5) Palmieri)
-        - add overrides for the insert* apis of list_store and tree_store (John (J5) Palmieri)
-        - fix dialogs overrides which were relying on broken inheritance behavior (John (J5) Palmieri)
-        - Add a overrides registry so we can refrence overrides inside the module (John (J5) Palmieri)
-        - Merge remote branch 'dieterv/setup-fixes-for-merge' (John Stowers)
-        - setup.py: ease maintenance burden for tests installation (Dieter Verfaillie)
-        - fix inheritence issues in overrides (John (J5) Palmieri)
-        - tests: add runtests-windows.py script (Dieter Verfaillie)
-        - pygobject_postinstall.py: remove pygobject-2.0.pc treatment from postinstall as pkg-config on windows figures out the correct prefix at runtime (Dieter Verfaillie)
-        - pygobject_postinstall.py: remove shortcut creation (Dieter Verfaillie)
-        - setup.py: formatting cleanup, makes things readable (Dieter Verfaillie)
-        - setup.py: build and install tests (Dieter Verfaillie)
-        - setup.py: install documentation when available on build system (Dieter Verfaillie)
-        - setup.py: install pygobject-codegen script (Dieter Verfaillie)
-        - setup.py: install fixxref.py script (Dieter Verfaillie)
-        - setup.py: rearrange constants (Dieter Verfaillie)
-        - setup.py: check python version and pkgconig availability before anything else (Dieter Verfaillie)
-        - setup.py: simplify sys.platform != 'win32' detection and error reporting (Dieter Verfaillie)
-        - setup.py: rearrange imports (Dieter Verfaillie)
-        - README.win32: update build instructions (Dieter Verfaillie)
-        - dsextras.py: formatting cleanup, makes things readable (Dieter Verfaillie)
-        - dsextras.py: add ggc4 to MSVC compatible struct packing comment (Dieter Verfaillie)
-        - dsextras.py: use the pkgc_ functions instead of repeating pgk-config incantations all over the place (Dieter Verfaillie)
-        - dsextras.py: add pkgc_get_version and pkgc_get_defs_dir functions (Dieter Verfaillie)
-        - dsextras.py: PEP8: Comparisons to singletons like None should always be done with 'is' or 'is not', never the equality operators. (Dieter Verfaillie)
-        - dsextras.py: use True/False instead of 1/0 (Dieter Verfaillie)
-        - dsextras.py: rearrange imports (Dieter Verfaillie)
-        - Add distutils generated build/dist directories and eclipse configuration files to .gitignore (Dieter Verfaillie)
-        - [gi] add tests for calling dir on a dynamic module (John (J5) Palmieri)
-        - [gi] dir() now works for modules (Deepankar Sharma)
-        - Don't check the inner type when comparing gpointers (Simón Pena)
-        - Release GIL when calling into C functions (John (J5) Palmieri)
-        - _gi.Repository : Implement missing info bindings. (José Aliste)
-        - include Python.h so that PY_VERSION_HEX gets defined (John (J5) Palmieri)
-        - [gi] make overrides work for python 3.x protocols and alias for python 2.x (John (J5) Palmieri)
-        - Override Gtk.Widget.translate_coordinates to not return success value (Sebastian Pölsterl)
-        - Override Gtk.TreeViewColumn.cell_get_position to not return success value (Sebastian Pölsterl)
-        - Override get_path_at_pos and get_dest_row_at_pos of Gtk.TreeView to not return success value (Sebastian Pölsterl)
-        - Override Gtk.TreeSortable.get_sort_column_id to not return success value (Sebastian Pölsterl)
-        - Override forward_search and backward_search of Gtk.TextIter to not return success value (Sebastian Pölsterl)
-        - Override Gtk.TextBuffer.get_selection_bounds to not return success value (Sebastian Pölsterl)
-        - Override Gtk.RecentInfo.get_application_info to not return success value (Sebastian Pölsterl)
-        - Override Gtk.IMContext.get_surrounding to not return success value (Sebastian Pölsterl)
-        - Override get_item_at_pos, get_visible_range, get_dest_item_at_pos of Gtk.IconView to not return success value (Sebastian Pölsterl)
-        - Override Gtk.Container.get_focus_chain to not return success value (Sebastian Pölsterl)
-        - Override Gtk.ComboBox.get_active_iter to not return success value (Sebastian Pölsterl)
-        - [gi] make parameter check less strict when dealing with GValue params (John (J5) Palmieri)
-        - Shortcut removal is not needed on post-uninstall (John Stowers)
-        - Disable shortcut creation in windows installer (John Stowers)
-        - overrides for all subclasses of dialog (John (J5) Palmieri)
-        - Make TreeModel behave like in GTK-2.x (Sebastian Pölsterl)
-        - Correctly build GIO on windows (John Stowers)
-        - Require Python >= 2.6.0 for Windows build (John Stowers)
-        - Fix depreciation warning in dsextras.py (John Stowers)
-        - Fix build on windows (John Stowers)
-        - Support for GCC4 in Windows distutils build - bug 626548 (Michael Culbertson)
-        - Remove obsolete comments in dsextras.py (John Stowers)
-        - Broken dsextras.py pkg-config check error message (John Stowers)
-        - add compat functions for the deprecated PyCObject api (John (J5) Palmieri)
-        - Add __path__ attributes. (Damien Caliste)
-        - Override Gtk.TreeSelection.get_selected to not return success value. (Sebastian Pölsterl)
-        - Make row optional in Gtk.TreeStore/ListStore.append override (Vincent Untz)
-        - Revert "add compat functions for the deprecated PyCObject api" (John (J5) Palmieri)
-        - return NULL instead of -1 which fixes crash when introspection is turned off (John (J5) Palmieri)
-        - add compat functions for the deprecated PyCObject api (John (J5) Palmieri)
-        - fix commit 7fe83108 which didn't use the compat functions for string handling (John (J5) Palmieri)
-        - Python 3 fixes for dsextras and the python.m4 distribution files (John (J5) Palmieri)
-
-2.26.0 24-Sep-2010
-        - Wrap g_get_system_{config,data}_dirs () (John Strowers)
-       - fixed make check and make dist (John (J5) Palmieri)
-        - Disable GI tests when introspection disabled (John Stowers)
-        - Wrap g_uri_list_extract_uris. Fixes bug #584431 (Tomeu Vizoso)
-        - Fix a few uses of TRUE and FALSE in the docs (Paul Bolle)
-        - pygi: always free the invocation_state struct (Damien Caliste)
-        - Start implementing something equivalent to g_variant_new (Tomeu Vizoso)
-        - fixed typo - missing comma in glib.option module (John (J5) Palmieri)
-        - add checks so we can compile under python 3 by setting PYTHON=python3 (John (J5) Palmieri)
-        - Rename static methods as functions (Tomeu Vizoso)
-        - fix a couple of compiler warnings (John (J5) Palmieri)
-        - remove unused code (John (J5) Palmieri)
-        - Check the type of the instance object (John (J5) Palmieri)
-        - include the correct pycairo version (John (J5) Palmieri)
-        - Use PyMapping_Keys to determine if an object is a dict (py3k fix) (John (J5) Palmieri)
-        - fix handling of UINT64 and INT64 arguments in py3k (John (J5) Palmieri)
-        - properly handle ulongs properties in py3k (John (J5) Palmieri)
-        - Specify encoding of tests/test_gi.py (Tomeu Vizoso)
-        - use actual unicode in the tests on py3k, not the byte representation (John (J5) Palmieri)
-        - s/METH_KEYWORDS/METH_VARARGS|METH_KEYWORDS/ when defining object methods (John (J5) Palmieri)
-        - fix subclassing PyLong by calling __new__ correctly (John (J5) Palmieri)
-        - minor py3k fixups for python modules (John (J5) Palmieri)
-        - minor fixes in tests for py3k compat (John (J5) Palmieri)
-        - compilation: Fix syntax error (Colin Walters)
-        - Add missing file (Tomeu Vizoso)
-        - Add override for GLib.Variant.new_tuple (Tomeu Vizoso)
-        - fix for changes in the gi test libraries (John (J5) Palmieri)
-        - Gtk.DialogFlags.NO_SEPARATOR has been removed in Gtk 3.0 (John (J5) Palmieri)
-        - no need to offset arg positions when is_method is true (John (J5) Palmieri)
-        - gi: Add support for more property types (Tomeu Vizoso)
-        - use PyObject_SetAttrString, not PyDict_SetItemString when setting __gtype__ (John (J5) Palmieri)
-        - Rename GArgument to GIArgument (Tomeu Vizoso)
-        - fix up tests so they run in py3k (John (J5) Palmieri)
-        - tests: Port to new introspection tests (Colin Walters)
-        - we need to specify tp_hash since we overide tp_richcompare (John (J5) Palmieri)
-        - working enum/flags/pid subclasses of long (John Ehresman)
-        - make vfuncs work in py3k (John (J5) Palmieri)
-        - make cairo module compile in py3k (John (J5) Palmieri)
-        - fix exceptions so they work in python 3.x (John (J5) Palmieri)
-        - make the gi module compile under 3.x (John (J5) Palmieri)
-        - fix up testshelper module so it compiles in python 3.x (John (J5) Palmieri)
-        - convert to using PYGLIB_DEFINE_TYPE for module objects (John (J5) Palmieri)
-        - some more p3k PyString and PyInt eradication in GI (John (J5) Palmieri)
-        - pyglib: Fix typo (Leo Singer) (Tomeu Vizoso)
-        - Add defines for size_t and ssize_t conversion functions (Gustavo Noronha Silva)
-        - pyglib: Fix a compiler warning (Colin Walters)
-        - Don't force gtk 2.0 (Tomeu Vizoso)
-        - Fix some ref leaks in hook_up_vfunc_implementation() (Steve Frécinaux)
-        - handle strings correctly in gio (John (J5) Palmieri)
-        - make giomodule compile under py3k (John (J5) Palmieri)
-        - for py3k we need to do some more processing to get bytes from a unicode string (John (J5) Palmieri)
-        - use Bytes instead of Unicode when reading io (John (J5) Palmieri)
-        - prefix compat macros with PYGLIB (John (J5) Palmieri)
-        - Gtk.Button unit tests (John (J5) Palmieri)
-        - [Gtk] Add overrides for Button (Johan Dahlin)
-        - Make Cairo an optional dependency (Simon van der Linden)
-        - Don't import again PyGObject (John Ralls) (Tomeu Vizoso)
-        - move to using richcompare slot instead of compare (John (J5) Palmieri)
-        - Replace autogen.sh by a newer version (Simon van der Linden)
-        - Fix some warnings (Simon van der Linden)
-        - Fix caller-allocates emergency free. (Simon van der Linden)
-        - Remove useless checks. (Simon van der Linden)
-        - Call valgrind with G_SLICE=always-malloc G_DEBUG=gc-friendly (Tomeu Vizoso)
-        - Fix some warnings. (Ignacio Casal Quinteiro)
-        - Add myself as a maintainer (Simon van der Linden)
-        - Properly allocate boxed structs that are (caller-allocates) (Tomeu Vizoso)
-        - override gdk.Event to return attribute from the proper event object (Toms Baugis)
-        - check if z# needs an int or Py_ssize_t (John (J5) Palmieri)
-        - make sure we parse parameters to python object vars not glib vars (John (J5) Palmieri)
-        - Make an example and a demo work out of the box (Paul Bolle)
-        - make sure caller allocated structs are freed when they go out of scope (John (J5) Palmieri)
-        - Revert "override gdk.Event to return attribute from the proper event object." (Tomeu Vizoso)
-        - PyGI: properly quit cairo-demo (Paul Bolle)
-        - override gdk.Event to return attribute from the proper event object. (Toms Baugis)
-        - Clean and improve the test infrastructure (Simon van der Linden)
-        - Add some more transformations to pygi-convert.sh (Tomeu Vizoso)
-        - Adapt to API changes: g_irepository_enumerate_versions (Tomeu Vizoso)
-        - Add GValue<->GArgument marshalling for some more types (Tomeu Vizoso)
-        - Chain up with the non-introspection implementation for properties if needed (Tomeu Vizoso)
-        - Improve error reporting for missing attributes in introspection modules (Tomeu Vizoso)
-        - Implement getting and setting properties using introspection information. (Tomeu Vizoso)
-        - Readd Gdk.Rectangle override for Gtk-2.0 (Tomeu Vizoso)
-        - Allow specifying a version when loading a typelib (Tomeu Vizoso)
-        - treat GFreeFunc as equivalent to GDestroyNotify when scanning callbacks (Jonathan Matthew)
-        - Don't use == to compare doubles, use <= and =>. (Simon van der Linden)
-        - Allow passing ints as enum args (Tomeu Vizoso)
-        - Make error message less ambiguous (Tomeu Vizoso)
-        - fix passing in type names as a GType and add gtype unit tests (John (J5) Palmieri)
-        - Increase a bit verbosity of tests so people know which test failed (Tomeu Vizoso)
-        - Actually add the files for GVariant foreign structs (Tomeu Vizoso)
-        - Add foreign struct support for GVariant (Tomeu Vizoso)
-
-2.21.5 12-Jul-2010
-        - Shut up some compiler warnings (Florian Müllner)
-        - Adjust to API break in GObject-Introspection (Florian Müllner)
-        - pass in the demo app so demos can use utility methods like requesting file paths (John (J5) Palmieri)
-        - demo fixes to keep up with Gtk+ (John (J5) Palmieri)
-        - override test fixes for new GTK+ annotations (John (J5) Palmieri)
-        - Fix warning. (Ignacio Casal Quinteiro)
-        - fix up treeiter usage due to caller-allocates annotations in gtk+ (John (J5) Palmieri)
-        - add entry completion demo (John (J5) Palmieri)
-        - string changes (John (J5) Palmieri)
-        - add the Entry demo directory and the entry_buffer demo (John (J5) Palmieri)
-        - fix loading of demo modules to support sub modules (John (J5) Palmieri)
-        - add the ability to have demos in sub catagories (John (J5) Palmieri)
-        - Add  __name__ to DynamicModule class. (Jose Aliste)
-        - Do not override GdkRectangle. (Ignacio Casal Quinteiro)
-        - Add override for TreeModel implementing __len__() (Philip Withnall)
-
-2.21.4 29-Jun-2010
-        - Build the cairo shim as a python module so the _gi module stops linking to it (Tomeu Vizoso)
-        - add drawing area demo (John (J5) Palmieri)
-        - sort the demo list (John (J5) Palmieri)
-        - rename iter to treeiter so we aren't using a python reserved word (John (J5) Palmieri)
-        - Fixup for change in buffer API (John (J5) Palmieri)
-        - add ListStore, TreeStore and TreeViewColumn APIs (John (J5) Palmieri)
-        - Add unit test for add_actions user data. (Ignacio Casal Quinteiro)
-        - Pass user_data param when adding actions (Paolo Borelli)
-        - add an exception type to the try/except block (John (J5) Palmieri)
-        - return PyList instead of PyTuple for array, return empty list for NULL arrays (John (J5) Palmieri)
-        - Fix 'make distcheck' (Tomeu Vizoso)
-        - Allow building pygobject without introspection support by providing --disable-introspection to configure. (Tomeu Vizoso)
-        - Make sure that sys.argv is a list and not a sequence. (Tomeu Vizoso)
-        - Force loading the GObject typelib so we have available the wrappers for base classes such as GInitiallyUnowned. (Tomeu Vizoso)
-        - we shouldn't g_array_free NULL pointers (John (J5) Palmieri)
-        - remove unneeded TextIter creation in the tests (John (J5) Palmieri)
-        - add override for TextBuffer (John (J5) Palmieri)
-        - fix up some build issues (John (J5) Palmieri)
-        - make the overrides file git friendly by appending to __all__ after each override (John (J5) Palmieri)
-        - Override Dialog constructor and add_buttons method (Paolo Borelli)
-        - Merge PyGI (Johan Dahlin)
-
-2.21.3 21-Jun-2010
-        - Proper handling of null-ok in virtual methods (Ludovic L'Hours)
-        - Fall back to use the floating references API in glib if there isn't a sinkfunc defined. (Tomeu Vizoso)
-        - Revert "Drop sinkfuncs." (Tomeu Vizoso)
-        - [giounix] Make it possible to compile on glib 2.20 (Johan Dahlin)
-        - Release the lock when potentially invoking Python code. (Sjoerd Simons)
-
-2.21.2 10-Jun-2010
-        - Drop sinkfuncs. (Tomeu Vizoso)
-        - Clear error if we failed the import (Colin Walters)
-        - Added missing , to keyword list of gio.GFile.set_attribute (John Ehresman)
-        - Fix arg conversion in gio.GFile.set_attribute (John Ehresman)
-        - Set constants under python 2.5 or before (John Ehresman)
-        - Doc Extractor: Use replacements that make sense for &...; expressions. (José Alburquerque)
-        - Add build docs for windows (John Stowers)
-        - Setup.py cosmetic tidy (John Stowers)
-        - Fix crash when importing gio (John Stowers)
-        - Bug 589671 - Dont use generate-constants (John Stowers)
-        - Bug 589671 - Fix setup.py for windows build (John Stowers)
-        - Include pygsource.h (John Stowers)
-        - codegen/docextract_to_xml.py: One more &...; replacement (&nbsp;). (José Alburquerque)
-        - codegen/docextract_to_xml.py: Replace some &..; that cause errors. (José Alburquerque)
-        - codegen/docextract_to_xml.py: Handle C++ multi-line comments. (José Alburquerque)
-        - codegen/docextract.py: Stop final section processing on first match. (José Alburquerque)
-        - Update doc extraction tool to handle GObjectIntrospection annotations. (José Alburquerque)
-        - Docs: replace gio.IO_ERROR_* with gio.ERROR_* (Paul Bolle)
-        - Bug 613341 - pygobject tests seem to require pygtk causing a circular (Gian Mario)
-        - Don't raise an error in _pygi_import if pygi support is disabled (Simon van der Linden)
-        - Initialize PyGPollFD_Type.fd_obj to NULL (Tomeu Vizoso)
-        - Bug 605937 - pygobject: Makefile.am sets $TMPDIR, disrupting distcc (Gian Mario)
-        - Wrap gio.Cancellable.make_pollfd() and add a test (Gian Mario)
-        - Make cancellable an optional parameter in many methods (Gian Mario)
-
-2.21.1 02-Jan-2010
-        - Wrap gio.Volume.eject_with_operation (Gian Mario)
-        - Wrap gio.Mount.eject_with_operation (Gian Mario)
-        - Wrap gio.Mount.unmount_mountable_with_operation (Gian Mario)
-        - Wrap File.unmount_mountable_with_operation (Gian Mario)
-        - Wrap gio.File.stop_mountable (Gian Mario)
-        - Wrap gio.File.start_mountable (Gian Mario)
-        - Wrap gio.File.replace_readwrite_async (Gian Mario)
-        - Wrap gio.File.poll_mountable (Gian Mario)
-        - Wrap gio.File.open_readwrite_async (Gian Mario)
-        - Wrap gio.File.eject_mountable_with_operation (Gian Mario)
-        - Wrap gio.File.create_readwrite_async (Gian Mario)
-        - Wrap gio.Drive.stop (Gian Mario)
-        - Wrap gio.Drive.start (Gian Mario)
-        - Wrap gio.SocketListener.accept_socket_async|finish (Gian Mario)
-        - Wrap gio.SocketListener.accept_finish (Gian Mario)
-        - Wrap gio.SocketListener.accept_async (Gian Mario)
-        - Wrap gio.SocketListener.accept_socket (Gian Mario)
-        - Wrap gio.SocketListener.accept (Gian Mario)
-        - Make cancellable optional in gio.SocketClient.connect_to_host
-          (Gian Mario)
-        - Wrap gio.SocketListener.add_address (Gian Mario)
-        - Wrap gio.SocketClient.connect_to_service_async (Gian Mario)
-        - Wrap gio.SocketClient.connect_to_host_async (Gian Mario)
-        - Wrap gio.SocketClient.connect_async (Gian Mario)
-        - Wrap gio.SocketAddressEnumerator.next_async (Gian Mario)
-        - Add a missing object gio.InetSocketAddress new in GIO 2.22
-          (Gian Mario)
-        - Make cancellable optional for gio.SocketAddressEnumerator.next
-          (Gian Mario)
-        - Wrap gio.Socket.condition_wait (Gian Mario)
-        - Wrap gio.Socket.condition_check (Gian Mario)
-        - Wrap gio.Resolver.lookup_service_finish (Gian Mario)
-        - Wrap gio.Resolver.lookup_service_async (Gian Mario)
-        - Wrap gio.Resolver.lookup_service (Gian Mario)
-        - Wrap gio.Resolver.lookup_by_address_async (Gian Mario)
-        - Wrap gio.Resolver.lookup_by_name_finish (Gian Mario)
-        - Wrap gio.Drive.eject_with_data (Gian Mario)
-        - Deprecate old gio.Drive methods (Gian Mario)
-        - Wrap gio.Resolver.lookup_by_name (Gian Mario)
-        - Make cancellable optional in gio.Resolver.lookup_by_address
-          (Gian Mario)
-        - Strip g_ prefix for many other functions (Gian Mario)
-        - Strip g_ prefix from InetAddress functions (Gian Mario)
-        - Fix function name gio.resolver_get_default (Gian Mario)
-        - Wrap gio.FileIOStream.query_info_async (Gian Mario)
-        - Register enums and flags in PyGI if needed (Tomeu Vizoso, #603534)
-        - Wrap gio.IOStream.close_async (Gian Mario)
-        - Make cancellable optional in GFile.create_readwrite (Gian Mario)
-        - Remove a duplicate entry in gio.defs (Gian Mario)
-        - Wrap gio.FileInfo.set_modification_time (Gian Mario)
-        - Wrap gio.EmblemedIcon.get_emblems (Gian Mario)
-        - Update Enums and Flags with new API (Gian Mario)
-        - Fix handling of uchar in pyg_value_from_pyobject (Bastian Winkler)
-
-2.21.0 18-dec-2009
-        - pygmainloop: fix use of PySignal_WakeUpFD API for nested loops
-          (Philippe Normad, #481569)
-        - Add capabilities to import wrappers from pygi (Simon van der Linden)
-        - Move threads_init() function from 'gobject' to 'glib' (Paul)
-        - Fix wrong minimum checking in float properties (Paul, #587637)
-        - Wrap new API added in GIO 2.22 (Gian Mario)
-        - Fix bad name when rebuilding the unix source module (Gian Mario)
-        - Add the missing limit constants from glibconfig.h
-          (Tomeu Vizoso, #603244)
-        - Suppress warnings about format conversion
-          (Simon van der Linden, #603355)
-        - Properly define Connectable as interface type and not object type
-          (Gian Mario)
-        - Wrap new API added in GIO-UNIX 2.22 (Gian Mario)
-        - Wrap g_find_program_in_path (Gian Mario, #598435)
-        - Add pygi-external.h into Makefile SOURCES (Gian Mario)
-
-2.20.0 23-sep-2009
-        - Allow to use automake 1.11 (Paolo Borelli)
-        - Specify programming language in .devhelp file (Frédéric Péters)
-        - Plug reference leak of GSource in pyg_main_loop_init (Paul)
-        - Updated uninstalled.pc file (Brian Cameron)
-
-2.19.0 10-aug-2009
-        - Add macros to help with Python list to/from GList/GSList conversions.
-          (John Finlay)
-        - GIO docs practically completed (Gian)
-        - GFileInfo.list_attributes should accept None/NULL (Gian)
-        - Strip out Windows DLL API macros (John Finlay)
-        - Document that many functions got moved gobject -> glib (Paul)
-        - Allow h2def.py to work when there are tabs or multiple spaces after
-          the struct keyword. (Murray Cumming)
-        - Fix build when builddir is not the same as srcdir
-          (Theppitak Karoonboonyanan)
-        - Make gio.Emblem constructor new-style (Paul)
-        - Cleanup GIO overrides to use Python function/method names (Paul)
-        - Make codegen report errors using Python function/method names (Paul)
-        - Fix object type in gio.BufferedInputStream_fill_async (Gian)
-        - Wrap gio.BufferedInputStream.fill_async (Gian)
-        - Add gio.BufferedOutputStream which was forgotten in the types (Gian)
-        - Split overrides for gio.MemoryOutputStream (Gian)
-        - Wrap gio.memory_input_stream_new_from_data (Gian)
-        - Introduces the girepository module from the former PyBank
-          (Simon van der Linden)
-        - Add API appeared in 2.20 but not marked as such in gio docs (Gian)
-        - Wrap gio.FileOutputStream.query_info_async (Gian)
-        - Wrap gio.FileInputStream.query_async (Gian)
-        - Install executable codegen parts with executing permissions (Paul)
-        - Wrap gio.DataInputStream.read_line_async and read_until_async (Paul)
-        - Fix gio.OutputStream.splice_async (Paul)
-        - Add GIO 2.20 API and update docs (Gian)
-
-2.18.0 24-may-2009
-        - Improve gio docs with some more classes (Gian)
-        - Wrap gio.OutputStream.splice_async() (Gian)
-        - Add Python ver into installed libpyglib name (Emilio Pozuelo Monfort)
-        - Wrap gio.OutputStream.flush_async() (Gian)
-        - Use 'Requires.private' for libffi in '.pc' files (Josselin Mouette)
-        - Add wrapper for gio.FileAttributeMatcher (Gian)
-        - Mark relevant glib.IOChannel methods as METH_NOARGS (Paul)
-        - Retire hand-written ChangeLog; autocreate from Git history (Paul)
-        - Wrap gio.InputStream.skip_async() (Gian)
-        - Add in codegen -n --namespace option and the code to remove dll
-          API in headers, added documentation (Siavash Safi)
-        - Properly mark glib.get_user_special_dir() as a keywords method (Paul)
-
-2.17.0 30-apr-2009
-        - Write a good part of the docs for gio (Gian)
-        - Wrap g_mount_guess_content_type g_mount_guess_content_type_finish
-          g_mount_guess_content_type_sync (Gian, #580802)
-        - Swap first two arguments of gio.File.query_info_async (Paul, #580490)
-        - Fix a crash in pyg_type_add_interfaces (Paul, #566571)
-        - Remove an empty structure, use sizeof(PyObject)
-          instead (Paul, #560591)
-        - Wrap four g_get_user_*_dir() functions (Paul, #575999)
-        - Remove 'ltihooks.py' as using deprecated Python module (Paul)
-        - Code maintenance: add .gitignore files (Paul)
-        - CellRendererPixbuf stock-size property has wrong type (Paul, #568499)
-        - Add a doap file after git migration (Johan Dahlin)
-        - missing dep on libffi in pygobject-2.0.pc (Götz Waschk, #550231)
-        - g_volume_monitor_tp_new new function, return the singleton object.
-          (Paul, #555613)
-        - Remove a DeprecationWarning under python 2.6 (James Westby, #573753)
-        - several scripts from codegen directory are not distributed
-          (Krzesimir Nowak)
-        - g_file_copy_async change argument order to keep it consistent with the
-          other methods (Gian)
-        - memory leak in gio.File.copy_async (Paul Pogonyshev, #578870)
-        - g_file_monitor should accept None for cancellable and set the default
-          flag to G_FILE_MONITOR_NONE (Gian)
-        - pyg_notify_free needs to ensure it has GIL before calling Py_XDECREF
-          (Jonathan Matthew)
-        - Wrap g_file_set_display_name_async (Gian)
-        - Add a semi-private method to return the option context C object from
-          an option context wrapper (Tristan Hill)
-        - Converting a negative long Python value to a GUINT64 GValue doesn't
-          error out as it should (Gustavo J. A. M. Carneiro, #577999)
-        - Wrap g_file_set_attributes_async and
-          g_file_set_attributes_finish (Gian)
-        - g_file_query_filesystem_info_async fix a typo (Gian)
-        - Wrap g_file_query_filesystem_info_async (Gian)
-        - Add missing g_file_query_filesystem_info_async and
-         g_file_query_filesystem_info_finish (Gian)
-        - Wrap g_file_eject_mountable (Gian)
-        - g_file_copy callback cannot be optional (Gian)
-        - Swap various kwargs names to reflect the code (Gian)
-        - Update the address of the FSF (Tobias Mueller, #577134)
-        - Add g_volume_should_automount (Gian)
-        - Wrap g_drive_enumerate_identifiers and g_volume_enumerate_identifiers
-          (Gian)
-       - Add a couple of convinence functions to convert from/to a python list
-         and an array of strings (Gian)
-       - Allow setting pytype wrapper class (Mark Lee, John Ehresman, #559001)
-       - Wrap g_file_enumerator_close_async (Gian Mario Tagliaretti)
-
-2.16.1 22-feb-2009
-        - Apply the patch provided by Cygwin Ports maintainer
-          (Paul Pogonyshev, #564018)
-        - Bad -I ordering can break build, patch from [dmacks netspace org]
-          (Gian Mario Tagliaretti, #566737)
-        - Fix keyword list to be in sync with positional arguments
-          (Paul, #566744)
-        - Add a comment explaining why the two for loops for registering
-          interfaces (Gustavo Carneiro)
-        - Huge cleanup of GIO overrides (Paul, #566706)
-        - gtk.Buildable interface method override is not recognized
-          (Paul, #566571)
-        - Do not escape the ampersand "&" in entity references. Replace some
-          unusual entity references in the output with their literal values.
-          (Daniel Elstner, #568485)
-        - gio.InputStream.read_async can cause memory corruption.
-          (Paul, #567792)
-        - Inconsistent use of tabs and spaces in pygtk.py (Paul, #569350)
-        - Huge fix of memory leaks in GIO (Paul, Paolo Borelli, Gian, #568427)
-        - non-async functions don't release python locks before calling
-          blocking C functions (Gian, Gustavo, #556250)
-        - Change comment to avoid false positives when grep'ing for deprecated
-          gtk functions (Andre Klapper)
-        - ltihooks.py updating license header from GPL to LGPL
-          (James Henstridge)
-
-2.16.0 04-jan-2009
-        - gobject.timeout_add_seconds() not found in docs
-          (Paul Pogonyshev, #547119)
-        - _wrap_g_output_stream_write_async not adding a reference to the
-          buffer passed (Paul, #564102)
-        - gio.VolumeMonitor segfaults (Gian Mario Tagliaretti, #555613)
-        - Test if `domain' is not-null before using it to avoids segfaults
-          (Paul, #561826)
-        - g_output_stream_write_all use gsize instead of gssize (Gian)
-        - add __repr__ to gio.Drive, gio.Mount and gio.Volume
-          (Paul, #530935)
-        - Missing AC_CONFIG_MACRO_DIR([m4]) (Loïc Minier, #551227)
-        - Make codegen not import when corresponding argument types are not
-          registered (Paul, #551056)
-        - Fix typos breaking compilation (Frederic Peters #551212)
-        - GFile load_contents methods chop data at first \0
-          (Jonathan Matthew, #551059) 
-
-2.15.4 3-sep-2008
-        - Fix typo in GPointer type registration (Loïc Minier,#550463)
-        - support G_TYPE_CLOSURE in codegen (Gian)
-
-2.15.3 31-aug-2008
-        - Beginning of porting to 3.0. glib & gobject module ported.
-        - Wrap g_app_info_* functions (Gian)
-        - Wrap gio.FileAttributeInfo (Gian)
-        - Wrap g_vfs_get_supported_uri_schemes (Johan, #545846)
-        - Wrap g_file_info_get_modification_time (Johan, #545861)
-        - Wrap gio.Volume.mount/eject (Johan)
-        - Wrap gio.File.move (Johan)
-        - Wrap gio.query_writable_namespaces (Gian, #545920)
-        - Separate glib & gobject documentation
-        - Wrap GFile.append_to_async (Gian, #545959)
-        - Wrap GFile.create_async (Gian, #546020)
-        - Change return value from 'gboolean' to 'int' and changed semantics
-          to Pythonic (Paul, #544946)
-        - Wrap GFile.replace_async and query_info_async (Gian, #546046)
-        - GIcon and implementations improvements (Paul, #546135)
-        - Improve __repr__ and richcompare for gio classes (Paul)
-        - Missing Py_INCREFs for some file async methods (Jonathan Matthew, #546734)
-        - File.copy progress_callback does not work (Paul, #546591)
-        - add File.replace_contents, replace_contents_async, replace_contents_finish.
-          (Jonathan Matthew, #547067)
-        - Add GFile.query_default_handler (Gian)
-        - fix docstring line length (Jonathan Matthew, #547134)
-        - improve runtime type wrapper creation (Paul, #547104)
-        - make gio.File more Pythonic (Paul, #546120)
-        - No TypeError raised when type is None (Paul, #540376)
-        - wrap a few memory stream methods (Paul, #547354)
-        - wrap gio.DataInputStream.read_line and ...read_until (Paul, #547484)
-        - wrap four important asynchronous methods in gio.Drive and gio.Mount
-          (Paul, #547495)
-        - gio.InputStream.read() looks broken (Paul, #547494)
-        - wrap g_content_types_get_registered() (Paul, #547088)
-        - cannot create new threads when pygtk is used (Paul, #547633)
-        - an unitialized variable in PyGLib (Paul, #549351)
-        - Constructor of gtk.TreeView raises TypeError when model is None
-          (Paul, #549191)
-        - Fix memory problems reported by valgrind due to invalid tp_basicsize in
-          PyGPropsDescr_Type. (Gustavo, #549945)
-
-2.15.2 26-jul-2008
-        - New module: glib, which contains the parts of the old
-          gobject bindings which are in the glib library.
-          MainLoop/MainContext/Sources/GOption and a few others has now moved.
-        - Add a new installed library libpyglib-2.0, which contains the extension
-          API for third-part modules instead of relying on macros which accesses
-          struct fields.
-        - Add bindings for gio.File.enumerate_children_async,
-          gio.FileEnumerator.next_files_async, gio.Mount.mount,
-          gio.File.mount_mountable, gio.File.mount_enclosing_volume,
-          gio.File.unmount_mountable, gio.File.copy.
-        - Add a new api for mapping a GError domain to an exception and register
-          an exception for GIOError.
-        - Remove leading IO_* prefix for the gio flags and register a quark
-          for the domain.
-        - Use GSlice in the glib module and bump required version to 2.14.
-
-2.15.1 15-jul-2008
-        - Rename pygtk-codegen-2.0 to pygobject-codegen-2.0 to avoid
-          conflicting with PyGTK (Paul Pogonyshev)
-
-2.15.0 15-jul-2008
-        - Add GIO bindings (Johan, Mario Tagliaretti, Thomas Leonard)
-       - Move codegen from PyGTK (Johan, Paul Pogonyshev, #542821)
-       - Add more variables to the .pc files (Damien Carbery, Paul, 
-          Dan Winship, #486876)
-       - Add pyg_option_group_new to the public API (Johan)
-       - Add g_get_application_anme and g_get_progname (Sebastian Rittau)
-       - Avoid making wakeups when using Python 2.6 (Johan, Gustavo,
-         Adam Olsen, Josselin Mouette, Philippe Normand, Guido Van Rossum)
-       - Only link against libffi when found (Ed Catmur, #496006)
-       - Improve gobject.property (Tomeu Vizoso, #523352)
-       - Improve enum comparision and warnings (Paul, Phil Dumont, #428732)
-       - Many gobject.Source improvements (Bryan Silverthorn)
-       - Apply some fixes to make pylint happier (Johan, Simon Schampijer,
-         #523821)
-       - Fix error message in pyg_io_add_watch (Juha Sahkangas)
-       - Improve h2def.py (Oliver Crete, Murray Cumming, Lauro Moura)
-
-2.14.0 16-sep-2007
-       - Fix a Python 2.6 deprecation warning (Johannes Hölzl, #342948)
-       - Wrap g_timeout_add_seconds, when compiling with glib 2.14 (Gustavo)
-       - Always fully initialize the PyGObject (Ed Catmur, #466082)
-       - Fix compilation in Solaris, again (#339924, Gustavo)
-       - Fix check for default value in boolean type (Marco Giusti, #470230)
-       - Fix new style properties with subclasses (Johan Dahlin, #470718)
-       - Docs generation fixes (John Finlay)
-
-2.13.2 07-jul-2007
-       - Fix build on opensolaris (Damien Carbery, #339924)
-       - Proxy GOption exceptions from Python to C (Johannes Hölzl, #342948)
-       - Support G_TYPE_VALUE boxed args/signals
-        (Ed Catmur, Carlos Martin, #351072)
-       - pyg_error_exception_check bug fix (Sebastian Granjoux, #449879)
-       - Toggle references bug fix (#447271, Gustavo Carneiro)
-       - use python-config to get python includes (#448173, Sebastien Bacher)
-       - Support GObject properties in new properties API (Gustavo)
-       - generate-constants fixes (Muntyan)
-        - Allow running autogen.sh from outside $srcdir (Muntyan)
-
-2.13.1 02-may-2007
-        - Generic CClosure marshaller using libffi (Johan, #353816)
-       - Uninstalled .pc file (Damien Carbery, #385129)
-       - Fix leak in GFlags handling (Daniel Berrange, #428726)
-       - Use dirname in autogen (Loïc Minier, #409234)
-       - Treat None in a GValueArray as pointer/NULL (Ed Catmur, #352209)
-       - Toggle reference bug fix in tp_setattro (Gustavo, #434659)
-       - Add a simplified helper for creating properties (Johan, Gustavo, #338089)
-       - Avoid throwing an exception in GValue converter (James Livingstone,
-          Ed Catmur, #374653)
-       - Build fix in .pc file (Luca Ferretti, #435132)
-
-2.13.0 23-april-2007
-        - Release the GIL in g_object_set_property (Edward Hervey, #395048)
-        - Break PyGObject<->GObject reference cycle (Gustavo Carneiro, #320428)
-        - use static inline functions for init_pygobject (Gustavo, #419379)
-        - Wrap g_set_application_name, g_set_prgname
-          (Havoc Pennington, #415853)
-        - New pyg_gerror_exception_check API (Gustavo, #425242)
-        - New API to get/set multiple properties
-          (Gian Mario Tagliaretti, #403212)
-        - Misc. bug fixes.
-
-2.12.3 18-november-2006
-       - distutils build fixes (Cedric)
-       - documentation updates (John)
-       - gobject.handler_block_by_func and friends now accept methods 
-         (Johan, Dima, #375589)
-       - avoid truncating of gparamspec (Yevgen Muntyan, #353943)
-       - set __module__ on gobject derived types (Johan, 
-         Osmo Salomaa, #376099)
-       - Ensure exceptions are raised on errors in gobject.OptionGroup
-                (Johan, Laszlo Pandy, #364576
-
-2.12.2 3-october-2006
-       - Make PyGObject 64-bit safe for Python 2.5 (Gustavo)
-       - All headers are now LGPL and not GPL (Johan)
-       - Remove a couple of GCC warnings (Gustavo)
-       - Revive distutils support (Cedric Gustin)
-       - Emission hook reference count bugfix (Gustavo)
-       - MSVC/ANSI C compilation fix (John Ehresman)
-       - Bump Ctrl-C timeout handler from 100ms to 1000 (Johan)
-
-2.12.1 4-september-2006
-       - Corrected version check (Sebastian Dröge, #354364)
-
-2.12.0 4-september-2006
-      - Install the html files even when using --disable-docs (#353159, Johan,
-        Matthias Clasen)
-
-2.11.4 27-august-2006
-      - Include pre-generated html docs in the tarball  (Johan)
-      - Fix bug in do_set_property called from constructor (Gustavo, #353039)
-      - Fix type registration involving interfaces with signals and/or
-        properties (Gustavo)
-
-2.11.3 21-august-2006
-      - Documentation updates (John)
-      - Documentation build fixes (Johan, John, Gian Mario Tagliaretti)
-      - PyGObject can now be compiled using a C++ compiler (Murray Cumming)
-      - Type registration bug fix (Gustavo)
-
-2.11.2 8-august-2006
-      - Add fixxref.py from PyGTK (Johan)
-      - Fix parallel build (#350225, Ed Catmur)
-
-2.11.1 4-august-2006
-      - Add John Finlay's reference manual (Johan, John)
-      - Fix GOption mem leak (Gustavo)
-      - Infrastructure for lazy type registration (Johan)
-      - Enum/Flags fixes (Gustavo, John)
-      - Eliminate some GCC warnings (Johan)
-
-2.11.0 12-july-2006
-      - Add GOption support (#163645, Johannes Hölzl)
-      - GObject metaclass converted to Python code (Gustavo)
-      - Register GType constants from Python-land (Johan)
-      - Distutils updates (John Ehresman, Cedric Gustin)
-      - Add support for signal emission hooks (#154845, Johan)
-      - g_spawn_close_pid support (Gustavo)
-      - Add new APIs do add or disable log redirections (Muntyan, #323786)
-      - "sub-sub-type" bug fixed (Gustavo)
-      - Coverity report code fixes (Johan)
-      - Support retrieving signal and property info from interfaces (Finlay)
-      - Support parameters of type G_TYPE_GSTRING in signals (Gustavo)
-      - Wrap a few g_filename_* APIs (Gustavo)
-
-2.10.1 11-april-2006
-      - uint64 property bug fix (Andy Wingo)
-      - Hard code path to 2.0 (Gustavo)
-      - Allow only tuples and lists in strv to value (Gustavo)
-      - Include dsextras.py in the dist (Johan)
-
-2.10.0 13-march-2006
-      - enum/leak fix (Michael Smith)
-
-2.9.0 16-january-2006
-      - Signal accumulator support (Gustavo)
-      - GObject doc string generation improvements (Gustavo)
-      - Discover GInterfaces in runtime (Gustavo)
-      - Warn if return value in iowatch callback is not bool (Gustavo)
-      - Convert string arrays properly (Christopher Aillon)
-
-2.8.0 9-january-2006
-      - Initial release, split of from PyGTK.
-      - Updates for Python 2.5's richcompare (Manish Yosh)
-      - PyFlags bug fixes (Gustavo)
-      - Fix leak in pygobject_new_with_interfaces (Johan)
-      - Undeprecate gobject.type_register (Johan)
+3.27.2 - 2018-02-07
+-------------------
+
+* setup.py: Add a "quality" command which is equal to "make check.quality".
+* setup.py: Add a "test" command which is equal to "make check". :mr:`5`
+* setup.py: Install pkg-config and header files.
+* setup.py: Improve pycairo header lookup with pycairo >=1.16. :issue:`150`
+* autotools: "make check.quality" now requires flake8.
+* overrides: Fix ``Gtk.Adjustment.__init__()`` overrides not setting "value"
+  sometimes. :issue:`151` :mr:`3`
+* overrides: ``GLib.Variant``: add support to create maybe types.
+  :issue:`152` :mr:`4` (:user:`Alberto Ruiz <aruiz>`)
+* Make it possible to resolve ambiguous vmethod names. Ambiguities can be
+  resolved by implementing methods named
+  "do_$namespaced_base_class_name_$vfunc_name". :mr:`9` :issue:`105`
+  (:user:`Mathieu Duponchelle <mathieudu>`)
+* Fix setting a property installed in Python from C in some cases. :mr:`8`
+  (:user:`Mathieu Duponchelle <mathieudu>`)
+* pygobject-object: fix memory corruption around list of closures. :mr:`12`
+  :issue:`158` (:user:`Mikhail Fludkov <fludkov.me>`)
+* Don't copy the boxed if we are the sole owner of the wrapper after a closure.
+  :mr:`14`
+* Only copy transfer-none boxed values in closures once the closure exists.
+  This allows modifying the passed boxed while allowing to keep the wrapper
+  around after the closure is done. :mr:`10`
+  (:user:`Mathieu Duponchelle <mathieudu>`)
+
+
+3.27.1 - 2017-12-11
+-------------------
+
+* Revert "setup.py: Also set setup_requires to require pycairo" (Christoph Reiter)
+* setup.py: Also set setup_requires to require pycairo (Christoph Reiter)
+* setup.py: Provide a os.path.samefile fallback for Python 2 under Windows (Christoph Reiter)
+* Add sphinx based documentation (Christoph Reiter) (:bzbug:`791448`)
+* PKG-INFO: Revert name back to PyGObject (Christoph Reiter)
+* setup.py: Rework pycairo discovery to not use pkg-config (Christoph Reiter)
+* setup.py: Fix the distcheck command on Windows (Christoph Reiter)
+* setup.py: Remove various classifiers and the download-url which aren't accepted by pypi (Christoph Reiter)
+* version bump (Christoph Reiter)
+
+3.27.0 - 2017-12-08
+-------------------
+
+* demo: pep8 fixes (Christoph Reiter)
+* Fix ctypes.PyDLL construction under Windows (Christoph Reiter) (:bzbug:`622084`)
+* configure.ac: Error out in case autoconf-archive isn't installed (Christoph Reiter) (:bzbug:`784428`)
+* Move pygi-convert.sh into tools (Christoph Reiter)
+* README: Convert to reST (Christoph Reiter)
+* demo: Move demo into examples and dist it (Christoph Reiter) (:bzbug:`735918`)
+* demo: Add new Gtk.FlowBox example (Gian Mario Tagliaretti) (:bzbug:`735918`)
+* demo: Use HeaderBar for main app window (Simon Feltman) (:bzbug:`735918`)
+* demo: PyFlakes and PEP8 fixes (Simon Feltman) (:bzbug:`735918`)
+* demo: Rename gtk-demo.py to demo.py (Simon Feltman) (:bzbug:`735918`)
+* demo: Rename demos/gtk-demo to simply demo (Simon Feltman) (:bzbug:`735918`)
+* Remove AUTHORS file (Christoph Reiter)
+* Remove pre-commit.hook (Christoph Reiter)
+* setup.py: Port to distutils/setuptools (Christoph Reiter) (:bzbug:`789211`)
+* Install a default SIGINT handler for functions which start an event loop (Christoph Reiter) (:bzbug:`622084`)
+* Make Python OS signal handlers run when an event loop is idling (Christoph Reiter) (:bzbug:`622084`)
+* Drop Python 3.3 support (Christoph Reiter) (:bzbug:`790787`)
+* Drop set_value usage in Gtk.List/TreeStore.set override (Sander Sweers) (:bzbug:`790346`)
+* pygobject-object: Fix Python GC collecting a ref cycle too early (Christoph Reiter) (:bzbug:`731501`)
+* Fix potential uninitialized memory access during GC (Daniel Colascione) (:bzbug:`786872`)
+* test: revert parts of the previous test as it's broken on 32 bit builds (Christoph Reiter) (:bzbug:`786948`)
+* flags: Add testcase for bug 786948 (Christoph Reiter) (:bzbug:`786948`)
+* fix potential overflow when marshalling flags from py interface (Philippe Renon) (:bzbug:`786948`)
+* to_py_array: Properly handle enum array items (Christoph Reiter) (:bzbug:`788890`)
+* pygobject.doap: Add myself as maintainer (Christoph Reiter)
+* closure: Fix unaligned and out-of-bounds access (James Clarke) (:bzbug:`788894`)
+* build: Fix not installing .egg-info file (Christoph Reiter) (:bzbug:`777719`)
+* Drop pygobject-3.0-uninstalled.pc file (Christoph Reiter)
+* tests: Windows fix (Christoph Reiter)
+* tests: some more C locale fixes (Christoph Reiter)
+* tests: Make the test suite pass with the C locale (Christoph Reiter)
+* configure.ac: post-release version bump to 3.27.0 (Christoph Reiter)
+
+3.26.1 - 2017-10-27
+-------------------
+
+* pygobject-object: Fix Python GC collecting a ref cycle too early (Christoph Reiter) (:bzbug:`731501`)
+* Fix potential uninitialized memory access during GC (Daniel Colascione) (:bzbug:`786872`)
+* test: revert parts of the previous test as it's broken on 32 bit builds (Christoph Reiter) (:bzbug:`786948`)
+* flags: Add testcase for bug 786948 (Christoph Reiter) (:bzbug:`786948`)
+* fix potential overflow when marshalling flags from py interface (Philippe Renon) (:bzbug:`786948`)
+* to_py_array: Properly handle enum array items (Christoph Reiter) (:bzbug:`788890`)
+* closure: Fix unaligned and out-of-bounds access (James Clarke) (:bzbug:`788894`)
+* build: Fix not installing .egg-info file (Christoph Reiter) (:bzbug:`777719`)
+* configure.ac: version bump to 3.26.1 (Christoph Reiter)
+
+2.28.7 - 2017-10-13
+-------------------
+
+* Move property and signal creation into _class_init() (Martin Pitt)
+* gio-types.defs: change some enums to flags (Ryan Lortie)
+* Fix set_qdata warning on accessing NULL gobject property (Ivan Stankovic)
+* Disable introspection support by default (Dieter Verfaillie)
+* Don't install codegen for Python 3 (Arfrever Frehtes Taifersar Arahesis)
+* Ship tests/te_ST@nouppera in release tarballs for tests to succeed (Martin Pitt)
+* [gi] Port test_properties from static gio to GI Gio (Martin Pitt)
+* [python3] fix build. PYcairo_IMPORT doesn't exists anymore (Ignacio Casal Quinteiro)
+* [python3] Fix maketrans import (Martin Pitt)
+* [gi-overrides] fix MessageBox so it correctly handles the type constructor param (John (J5) Palmieri)
+* gdbus tests: Fix hang if test case fails (Martin Pitt)
+* Fix crash in Gtk.TextIter overrides (Martin Pitt)
+* correctly initialize the _gi_cairo_functions array to be zero filled (John (J5) Palmieri)
+* [gtk-override] print warning if user imports Gtk 2.0 (John (J5) Palmieri)
+* Add support for enums in gobject.property (Johan Dahlin)
+
+3.26.0 - 2017-09-12
+-------------------
+
+* configure.ac: pre-release version bump to 3.26.0 (Christoph Reiter)
+* closure: silence a new compiler warning (Christoph Reiter)
+* tests: skip some failing test under Windows with Python 3.6 (Christoph Reiter)
+* tests: pyflakes/pep8 fixes (Christoph Reiter)
+* tests: Fix cairo test with pycairo >= 1.13 (Christoph Reiter)
+* Make sure version information passed to require_version is a string. (Benjamin Berg) (:bzbug:`781582`)
+* configure.ac: post-release version bump to 3.25.2 (Christoph Reiter)
+
+3.25.1 - 2017-04-21
+-------------------
+
+* Bump pycairo requirement to 1.11.1 (Christoph Reiter) (:bzbug:`707196`)
+* configure.ac: Always disable -Werror (Christoph Reiter)
+* foreign-cairo: Enable cairo.Region support also on Python 2 if available (Christoph Reiter)
+* configure.ac: remove unused PLATFORM variable (Christoph Reiter)
+* configure.ac: Remove unused PySignal_SetWakeupFd check (Christoph Reiter)
+* tests: remove python 2.5/3.2 compat code (Christoph Reiter)
+* configure.ac: Require Python 3.3 (Christoph Reiter)
+* tests: Make test suite run with GTK+ 4 (Christoph Reiter)
+* tests: always call require_version; add TEST_GTK_VERSION env var (Christoph Reiter)
+* tests: Fix make check.valgrind (Christoph Reiter)
+* tests: Don't skip Regress tests when cairo is missing (Christoph Reiter)
+* tests: fix invalid regex escaping (Christoph Reiter)
+* tests: avoid mapping a GtkWindow (Christoph Reiter) (:bzbug:`780812`)
+* tests: silence some glib deprecation warnings (Christoph Reiter) (:bzbug:`780812`)
+* tests: avoid deprecation warnings for assertRegexpMatches/assertRaisesRegexp (Christoph Reiter) (:bzbug:`780812`)
+* pygi-source: clear exceptions in finalize handler (Christoph Reiter) (:bzbug:`780812`)
+* Fix pep8 errors (Christoph Reiter)
+* Remove gi._gi._gobject and gi._gobject modules (Christoph Reiter) (:bzbug:`735206`)
+* Remove gi._gi._glib module (Christoph Reiter) (:bzbug:`735206`)
+* GValue: add overflow checking for py -> gint; forward marshaling exceptions (Christoph Reiter) (:bzbug:`769789`)
+* pygobject_lookup_class: clear exceptions between calls and don't return with one set (Christoph Reiter) (:bzbug:`773394`)
+* Avoid some new deprecation warnings (Christoph Reiter) (:bzbug:`780768`)
+* Raise RuntimeError in case an uninitilialized GObject.Object is marshaled (Christoph Reiter) (:bzbug:`730908`)
+* closure: support unichar args (Christoph Reiter) (:bzbug:`759276`)
+* Add support for bytes and non-utf-8 file names. (Christoph Reiter) (:bzbug:`746564`)
+* test_gi: use correct min/max constants for gsize/gssize (Christoph Reiter) (:bzbug:`780591`)
+* Don't use long format string for formatting pointers (Christoph Reiter) (:bzbug:`780591`)
+* Fix conversion from pointers to hashfunc return values. (Christoph Reiter) (:bzbug:`780591`)
+* Fix PyLong <-> GPid conversion on 64bit Windows (Christoph Reiter) (:bzbug:`780591`)
+* property: support setting flags (Christoph Reiter) (:bzbug:`726484`)
+* overrides: warn on instantiation of Gio.VolumeMonitor (Christoph Reiter) (:bzbug:`744690`)
+* Remove gi.overrides.overridefunc (Christoph Reiter) (:bzbug:`686835`)
+* tests: Reduce usage of timeout_add() and sleep() (Christoph Reiter) (:bzbug:`698548`)
+* tests: Remove TestMainLoop.test_concurrency (Christoph Reiter) (:bzbug:`698548`)
+* Update .gitignore: add ``*.dll``, ``*.dylib``, ``.DS_STORE`` (Christoph Reiter)
+* tests: Make test suite run on Windows (Christoph Reiter) (:bzbug:`780396`)
+* tests: Make test suite run on macOS (Christoph Reiter) (:bzbug:`780396`)
+* Fix various compiler warnings for 32bit builds (Christoph Reiter) (:bzbug:`780409`)
+* pep8 fix (Christoph Reiter)
+* testhelper: only link against libpython on Windows (Christoph Reiter) (:bzbug:`773803`)
+* overrides: Fix Gtk.TextBuffer.insert_with_tags_by_name() with no tags (Garrett Regier) (:bzbug:`772896`)
+* Make use of instance-argument annotations (Christoph Reiter) (:bzbug:`735076`)
+* Remove pyglib_gil_state_ensure/pyglib_gil_state_release (Christoph Reiter) (:bzbug:`699440`)
+* Remove support for building without threads (Christoph Reiter) (:bzbug:`699440`)
+* pygtkcompat: Allow multiple calls to enable(), enable_gtk() as long as the version matches (Christoph Reiter) (:bzbug:`759009`)
+* tests: Update Makefile for building tests on OS X (Simon Feltman) (:bzbug:`762176`)
+* testhelper: propagate exception if _gobject could not be imported (Mikhail Fludkov) (:bzbug:`772949`)
+* pygi-info: initialize GIArgument before passing it to g_constant_info_get_value (Christoph Reiter) (:bzbug:`772949`)
+* tests: build libregress with disabled cairo (Mikhail Fludkov) (:bzbug:`772949`)
+* tests: use g-ir utils found by pkg-config (Mikhail Fludkov) (:bzbug:`772949`)
+* Add a foreign type for cairo_region_t. (Shyouzou Sugitani) (:bzbug:`667959`)
+* aclocal: make local file discover by reading AC_CONFIG_MACRO_DIR work (Christoph Reiter) (:bzbug:`777713`)
+* Port from gnome-common to autoconf-archive (Christoph Reiter) (:bzbug:`777713`)
+* Fix various potential compiler warnings (Christoph Reiter) (:bzbug:`777713`)
+* configure.ac: post-release version bump to 3.25.0 (Christoph Reiter)
+* Remove egg make target (Christoph Reiter) (:bzbug:`777719`)
+* Remove legacy docs (Christoph Reiter) (:bzbug:`777719`)
+
+3.24.1 - 2017-04-10
+-------------------
+
+* pygi-info: initialize GIArgument before passing it to g_constant_info_get_value (Christoph Reiter) (:bzbug:`772949`)
+* configure.ac: post-release version bump to 3.24.1 (Christoph Reiter)
+
+3.24.0 - 2017-03-20
+-------------------
+
+* configure.ac: pre-release version bump to 3.24.0 (Christoph Reiter)
+
+3.23.92 - 2017-03-13
+--------------------
+
+* overrides: Update for Gdk-4.0 and Gtk+-4.0 (Fabian Orccon) (:bzbug:`777680`)
+* Disable -Werror=missing-prototypes (Christoph Reiter) (:bzbug:`777534`)
+* Fix new PEP8 errors (Christoph Reiter) (:bzbug:`776009`)
+* Move pep8/pyflakes tests from 'make check' to 'make check.quality' (Christoph Reiter) (:bzbug:`764087`)
+* overrides: Update for Gtk-4.0 (Christoph Reiter) (:bzbug:`773315`)
+* Handle exception unreffing Variant at exit (Dan Nicholson) (:bzbug:`776092`)
+* Handle multiple deinit of callable cache (Dan Nicholson) (:bzbug:`776092`)
+* configure.ac: post-release version bump to 3.23.0 (Christoph Reiter)
+
+3.22.0 - 2016-09-19
+-------------------
+
+* configure.ac: pre-release version bump to 3.22.0 (Christoph Reiter)
+
+3.21.92 - 2016-09-11
+--------------------
+
+* Handle nullable filename parameters (Christoph Reiter) (:bzbug:`770821`)
+* Fix list/hashtable enum <-> hash conversion on 64-bit big endian (Aurelien Jarno) (:bzbug:`770608`)
+* Allow passing sockets to io_add_watch on win32 (Lukas K) (:bzbug:`766396`)
+* tests: use dbus-run-session instead of dbus-launch to run tests (Michael Biebl) (:bzbug:`770798`)
+* configure.ac: post-release version bump to 3.21.92 (Christoph Reiter)
+
+3.21.91 - 2016-08-25
+--------------------
+
+* Allow installing with pip (Mathieu Bridon) (:bzbug:`767988`)
+* Skip a test with older glib (Christoph Reiter) (:bzbug:`740301`)
+* Fix a test with Python 3.1/3.2 (Arfrever Frehtes Taifersar Arahesis, Christoph Reiter) (:bzbug:`740324`)
+* tests: Use places kwarg for assertAlmostEqual (Arfrever Frehtes Taifersar Arahesis, Christoph Reiter) (:bzbug:`740337`)
+* Print exception if marshalling a signal argument fails (Christoph Reiter) (:bzbug:`748198`)
+* overrides: allow treemodel sequence shorthands (Marinus Schraal) (:bzbug:`766580`)
+* Remove pygobject-external.h (Christoph Reiter) (:bzbug:`767084`)
+* Remove pygobject-private.h and rename pygobject.c to pygobject-object.c (Christoph Reiter) (:bzbug:`767084`)
+* Merge pyglib-private.h into pyglib.h (Christoph Reiter) (:bzbug:`767084`)
+* Remove pygi.h and pygi-private.h (Christoph Reiter) (:bzbug:`767084`)
+* configure.ac: post-release version bump to 3.21.1 (Simon Feltman)
+
+3.21.0 - 2016-04-24
+-------------------
+
+* gi: Add require_versions() function (Dustin Falgout) (:bzbug:`761141`)
+* test_gerror_novalue: Don't assign the error to a variable
+  (Iain Lane) (:bzbug:`764165`)
+* build: Do not enable code coverage based on lcov
+  (Emmanuele Bassi) (:bzbug:`764075`)
+
+3.20.1 - 2016-04-24
+-------------------
+
+* test_gerror_novalue: Don't assign the error to a variable
+  (Iain Lane) (:bzbug:`764165`)
+
+3.20.0 - 2016-03-21
+-------------------
+
+3.19.92 - 2016-03-15
+--------------------
+
+3.19.91 - 2016-03-01
+--------------------
+
+* Fix marshaling of GError stored in GValue
+  (Simon Feltman) (Thibault Saunier) (:bzbug:`761592`)
+* Fix marshaling or GError from Python to C from function calls
+  (Simon Feltman) (:bzbug:`685197`)
+* Error handling/reporting fixes (Christoph Reiter) (:bzbug:`751956`)
+* Fix crash due to GVariant implemented as PyGBoxed not PyGIStruct
+  (Christoph Reiter) (:bzbug:`751956`)
+* Fix crash with GValueArray stored in GValue
+  (Mikhail Fludkov) (:bzbug:`754359`)
+
+3.19.90 - 2016-02-20
+--------------------
+
+* tests: Set the active style context state before retrieving values
+  (Simon Feltman)
+* tests: Fix crash with empty drag source icon names
+  (Simon Feltman) (:bzbug:`762392`)
+* Try to import GdkX11 in Gdk overrides (Christoph Reiter) (:bzbug:`673396`)
+* Fix import warnings pointing to the wrong code with CPython 3.3/3.5
+  (Christoph Reiter) (:bzbug:`757184`)
+
+3.19.2 - 2015-10-31
+-------------------
+
+* tests: Fix failure due to new GTK+ warning regarding size_allocate()
+  (Simon Feltman)
+* Fix build warnings regarding _POSIX_C_SOURCE redefinition
+  (Simon Feltman)
+* Drop -std=c90 for now (Matthias Clasen)
+
+3.19.1 - 2015-10-30
+-------------------
+
+* Use a named tuple for returning multiple values (Christoph Reiter) (:bzbug:`727374`)
+* enum/flags: use gir info for type names and __repr__ instead of the gtype name (Christoph Reiter) (:bzbug:`657915`)
+* Improve and unify __repr__ format for PyGObject, PyGBoxed and PyGIStruct (Christoph Reiter) (:bzbug:`657915`)
+* Don't leak internal RepositoryError on import. (Christoph Reiter) (:bzbug:`756033`)
+* Import dependencies when importing typelibs from gi.repository (Christoph Reiter) (:bzbug:`656314`)
+* Fix Gdk.rectangle_intersect/rectangle_union missing with GTK+ 3.18 (Christoph Reiter) (:bzbug:`756364`)
+* Don't import inspect at module level (Christoph Reiter)
+* invoke state: add a free memory cache for PyGIInvokeArgState (Christoph Reiter) (:bzbug:`750658`)
+* invoke/closure: reduce g_slice_alloc usage (Christoph Reiter) (:bzbug:`750658`)
+* pep8: ignore new errors reported by pep8 1.6 (Christoph Reiter)
+* Bump g-i dependency to latest stable (Garrett Regier)
+* Avoid calling g_slist_length() during invoke (Garrett Regier)
+* Simplify closure_convert_arguments() (Garrett Regier)
+* Remove a level of indentation in convert_ffi_arguments() (Garrett Regier)
+* Prevent passing the user data multiple times to callbacks (Garrett Regier) (:bzbug:`750347`)
+* Support throwing exceptions in closures (Garrett Regier) (:bzbug:`710671`)
+* Don't emit require_version warning if namespace was loaded previously using g_irepository_require (Christoph Reiter) (:bzbug:`754491`)
+* configure.ac: post release version bump to 3.19.1 (Garrett Regier)
+
+3.18.2 - 2015-10-24
+-------------------
+
+* configure.ac: post release version bump to 3.18.2 (Christoph Reiter)
+
+3.18.1 - 2015-10-23
+-------------------
+
+* Fix Gdk.rectangle_intersect/rectangle_union missing with GTK+ 3.18 (Christoph Reiter) (:bzbug:`756364`)
+* pep8: ignore new errors reported by pep8 1.6 (Christoph Reiter)
+* Don't emit require_version warning if namespace was loaded previously using g_irepository_require (Christoph Reiter) (:bzbug:`754491`)
+* configure.ac: post release version bump to 3.18.1 (Garrett Regier)
+
+3.18.0 - 2015-09-22
+-------------------
+
+3.17.90 - 2015-08-19
+--------------------
+
+* Allow passing unicode lists to GStrv properties on Python 2
+  (Christoph Reiter) (:bzbug:`744745`)
+* Avoid a silent long to int truncation (Rui Matos) (:bzbug:`749698`)
+* Handle gtype marshalling (Mathieu Bridon) (:bzbug:`749696`)
+* pygi-foreign-cairo.c: fix include for py3cairo.h
+  (Daniel Hahler) (:bzbug:`746742`)
+* tests: Silence various error messages and warnings
+  (Christoph Reiter) (:bzbug:`751156`)
+* Fix test regression when xdg-user-dirs is not installed
+  (Christoph Reiter) (:bzbug:`751299`)
+* Explicitly check if an override exists instead of ImportError
+  (Garrett Regier) (:bzbug:`749532`)
+
+3.17.1 - 2015-06-15
+-------------------
+
+* Add gi.PyGIWarning used when import version is not specified
+  (Christoph Reiter) (:bzbug:`727379`)
+* Remove Gdk.Rectangle alias with newer gobject-introspection and GTK+
+  (Christoph Reiter) (:bzbug:`749625`)
+* overrides: Provide _overrides_module attribute
+  (Christoph Reiter) (:bzbug:`736678`)
+* overrides: Conditionalize touch override support in Gdk
+  (Simon Feltman) (:bzbug:`747717`)
+* Field setters: Remove unneeded type/range checks and unused code
+  (Christoph Reiter) (:bzbug:`746985`)
+* pygi-argument: Remove unused imports/includes
+  (Christoph Reiter) (:bzbug:`746985`)
+* Improve test coverage for field setters/getters
+  (Christoph Reiter) (:bzbug:`746985`)
+
+3.16.2 - 2015-06-15
+-------------------
+
+* overrides: Provide _overrides_module attribute
+  (Christoph Reiter) (:bzbug:`736678`)
+
+3.16.1 - 2015-04-13
+-------------------
+
+* overrides: Conditionalize touch override support in Gdk
+  (Simon Feltman) (:bzbug:`747717`)
+
+3.16.0 - 2015-03-24
+-------------------
+
+3.15.91 - 2015-03-05
+--------------------
+
+* tests: Don't use deprecated override attributes
+  (Christoph Reiter) (:bzbug:`743514`)
+* Add GLib.MINFLOAT etc. and mark GObject.G_MINFLOAT etc. deprecated
+  (Christoph Reiter) (:bzbug:`743514`)
+* Emit PyGIDeprecationWarning when accessing deprecated override attributes
+  (Christoph Reiter) (:bzbug:`743514`)
+* Add namespace and container name to all warnings/error messages
+  (Christoph Reiter) (:bzbug:`743468`)
+* tests: Add test for GIRepository.UnionInfo.get_size()
+  (Garrett Regier) (:bzbug:`745362`)
+* Avoid duping filenames when marshalling from Python to C
+  (Garrett Regier) (:bzbug:`744719`)
+
+3.15.0 - 2015-02-20
+-------------------
+
+* Avoid copying bytearrays from Python to C when transfer nothing (Garrett Regier) (:bzbug:`743278`)
+* Allows passing arguments to opaque Boxed types (Garrett Regier) (:bzbug:`743214`)
+* Emit ImportWarning when gi.require_version() is not used (Christoph Reiter) (:bzbug:`727379`)
+* Refactor overrides import/modules (Christoph Reiter) (:bzbug:`736678`)
+* Replace statically bound GLib.Variant.new_tuple() with GI (Simon Feltman) (:bzbug:`735199`)
+* overrides: Add Gdk.EventTouch union discrimination (Simon Feltman) (:bzbug:`736380`)
+* PyGObjectFlags: Remove a trailing comma on the enum. (Murray Cumming)
+* Remove redefinitions of function and vfunc cache typedefs (Simon Feltman) (:bzbug:`737874`)
+
+3.14.0 - 2014-09-22
+-------------------
+
+* configure.ac: pre release version bump to 3.14.0 (Simon Feltman)
+
+3.13.92 - 2014-09-15
+--------------------
+
+* tests: Add test for Gio.Application.add_main_option() (Simon Feltman)
+* tests: Split up various test cases (Simon Feltman) (:bzbug:`735193`)
+* Fix invalid read error in argument cleanup code (Simon Feltman)
+* Fix memory management problems with struct arguments to signals
+  (Simon Feltman) (:bzbug:`736175`)
+
+3.13.91 - 2014-09-01
+--------------------
+
+* docs: Fix return types in auto-generated doc strings (Simon Feltman)
+* Special case signal output arguments which are structs as
+  pass-by-reference (Simon Feltman) (:bzbug:`735486`)
+* Ignore closure callbacks when Python is not initialized
+  (Simon Feltman) (:bzbug:`722562`)
+* Change boxed init with args to warn instead of raise
+  (Christoph Reiter) (:bzbug:`727810`)
+* Fix crash in GList/GSList marshaling error handling path.
+  (Christoph Reiter) (:bzbug:`735201`)
+* Fix reference counting problems with GLib.Variant.new_tuple()
+  (Simon Feltman) (:bzbug:`735166`)
+* Skip marshalling NULL output arguments in Python closures
+  (Simon Feltman) (:bzbug:`735090`)
+
+3.13.90 - 2014-08-18
+--------------------
+
+* Support array lengths on struct fields (Simon Feltman) (:bzbug:`688792`)
+* Fast path Python property get access (Simon Feltman) (:bzbug:`723872`)
+* Unify accessing properties through props and get_property()
+  (Simon Feltman) (:bzbug:`726999`)
+* Refactor boxed wrapper memory management strategy
+  (Simon Feltman) (:bzbug:`726999`)
+* Replace GObject.signal_query with introspected version
+  (Simon Feltman) (:bzbug:`688792`)
+* Fix memory leak with unboxed caller allocated structs (Simon Feltman)
+* tests: Add failing tests for GObject sub-class doc-strings
+  (Piotr Iwaniuk) (:bzbug:`731452`)
+* Don't mask GObject sub-class doc strings in meta-class
+  (Tobias Mueller) (:bzbug:`731452`)
+
+3.13.4 - 2014-08-14
+-------------------
+
+* Marshaling cache refactor and cache usage in vfuncs
+  (Garrett Regier) (:bzbug:`727004`)
+* Fix array argument out and inout marshaling from vfuncs
+  (Garrett Regier) (:bzbug:`702508`)
+* Cleanup input args when marshaling in closures
+  (Garrett Regier) (:bzbug:`727004`)
+* Add deprecation warning for connect_object() with non-GObject argument
+  (Simon Feltman) (:bzbug:`688064`)
+* Add Python implementation of Object.connect_data()
+  (Simon Feltman) (:bzbug:`701843`)
+* Add GClosure marshaling cleanup (Simon Feltman) (:bzbug:`695128`)
+* Fix GCallback Python wrapper leak (Simon Feltman) (:bzbug:`695130`)
+* tests: Add failing test for marshaling an array of GValues through
+  signals (Martin Pitt) (:bzbug:`669496`)
+* Add protection against attempts at importing static bindings
+  (Simon Feltman) (:bzbug:`709183`)
+* Update and deprecate gi.overrides.keysyms (Simon Feltman) (:bzbug:`721295`)
+* Generate .dll libraries on windows (Ignacio Casal Quinteiro) (:bzbug:`734288`)
+* Windows build fixes (Alexey Pavlov)
+  (:bzbug:`734284`, :bzbug:`734289`, :bzbug:`734286`, :bzbug:`734287`)
+
+3.13.3 - 2014-06-23
+-------------------
+
+* demos: Cleanup CSS accordion demo to use a loop for adding buttons
+  (Simon Feltman)
+* refactor: Move builder connection utilities outside of Builder class
+  (Simon Feltman) (:bzbug:`701843`)
+* tests: Move TestSignals from test_everything into test_signal
+  (Simon Feltman) (:bzbug:`701843`)
+
+3.13.2 - 2014-05-26
+-------------------
+
+* Python 3.4 make check fixes (Simon Feltman) (:bzbug:`730411`)
+* overrides: Add Gtk.Container.child_get/set overrides (Simon Feltman)
+  (:bzbug:`685076`)
+* overrides: Make value argument to Widget.style_get_property optional
+  (Simon Feltman) (:bzbug:`685076`)
+* overrides: Make value argument to Container.child_get_property optional
+  (Simon Feltman) (:bzbug:`685076`)
+* Add GTypeClass methods as Python GObject class methods
+  (Johan Dahlin) (:bzbug:`685218`)
+* Add marshalling coercion for Python classes and instances to GTypeClass
+  (Simon Feltman) (:bzbug:`685218`)
+* Replace direct parent class call by super() (Andrew Grigorev) (:bzbug:`729970`)
+* Add cairo marshaling support for non-introspected signals
+  (Simon Feltman) (:bzbug:`694604`)
+* [New API] Add gi.require_foreign (Simon Feltman) (:bzbug:`707735`)
+* Initialize the foreign API at PyGI load time (Simon Feltman) (:bzbug:`694604`)
+* Move pygi foreign API into pygi-foreign-api.h (Simon Feltman) (:bzbug:`694604`)
+* Unify GLib.GError and GLib.Error (Simon Feltman) (:bzbug:`712519`)
+* PEP8 fixes (Simon Feltman)
+
+3.12.2 - 2014-05-26
+-------------------
+
+* PEP8 fixes (Simon Feltman)
+* Python 3.4 make check fixes (Simon Feltman) (:bzbug:`730411`)
+
+3.13.1 - 2014-04-28
+-------------------
+
+* Raise TypeError if arguments are passed to Boxed.__init__
+  (Christoph Reiter) (:bzbug:`727810`)
+* Gdk.Event: Override __setattr__ to set fields based on the event type
+  (Christoph Reiter) (:bzbug:`727810`)
+* Gdk.Event: Include GdkEventType in __repr__ (Christoph Reiter) (:bzbug:`727810`)
+* Fix crash with type checking for GObject arguments (Simon Feltman) (:bzbug:`727604`)
+* Do not leak info of destroy notify (Paolo Borelli)
+* Ignore GValueArray deprecations (Simon Feltman)
+* Raise ImportError when importing modules not found in repository
+  (Simon Feltman) (:bzbug:`726877`)
+* tests: Rename test_overrides to test_import_machinery
+  (Simon Feltman) (:bzbug:`726877`)
+
+3.12.1 - 2014-04-14
+-------------------
+
+* Fix crash with type checking invalid GObject arguments
+  (Simon Feltman) (:bzbug:`727604`)
+* Do not leak info of destroy notify (Paolo Borelli)
+
+3.12.0 - 2014-03-24
+-------------------
+
+3.11.92 - 2014-03-17
+--------------------
+
+* configure.ac: Remove option to build without libffi (Simon Feltman)
+* docs: Standardize Python doc strings (Simon Feltman)
+* Fix reference leaks with (transfer full) foreign struct returns
+  (Owen W. Taylor) (:bzbug:`726206`)
+
+3.11.91 - 2014-03-03
+--------------------
+
+* Use ffi_call directly instead of g_callable_info_invoke
+  (Simon Feltman) (:bzbug:`723642`)
+* configure.ac: Use -std=c90 and error on declaration-after-statement
+  (Simon Feltman)
+* Fix Build on Visual Studio (Chun-wei Fan) (:bzbug:`725122`)
+
+3.11.90 - 2014-02-17
+--------------------
+
+* Use GObject type checking for instance arguments (Simon Feltman) (:bzbug:`724009`)
+* configure.ac: post release version bump to 3.11.90 (Simon Feltman)
+
+3.11.5 - 2014-02-03
+-------------------
+
+* cache refactoring: Move all cache marshalers into files based on type
+  (Simon Feltman) (:bzbug:`709700`)
+* tests: Add test for an owned boxed struct passed in a callback
+  (Mike Gorse) (:bzbug:`722899`)
+* build: Add --without-common configure option for package maintainers
+  (Patrick Welche) (:bzbug:`721646`)
+* demo: Add TreeModel interface implementation demonstration
+  (Simon Feltman)
+* build: Set PLATFORM_VERSION again to 3.0 (Colin Walters)
+* tests: Run PyFlakes and PEP8 only on SUBDIRS (Simon Feltman)
+* Merge static PyGLib and PyGObject modules into PyGI
+  (Simon Feltman) (:bzbug:`712197`)
+* Add test for callback user data arguments with following arguments
+  (Martin Pitt) (:bzbug:`722104`)
+
+3.11.4 - 2014-01-13
+-------------------
+
+* overrides: Fix __repr__ for various Gdk structs (Simon Feltman)
+* Add enum and flags member methods (Simon Feltman) (:bzbug:`693099`)
+* python.m4: g/c JD_PYTHON_CHECK_VERSION (Patrick Welche) (:bzbug:`721662`)
+* Support union creation with PyGIStruct (Simon Feltman)
+* docs: List constructors in object and struct doc strings
+  (Simon Feltman) (:bzbug:`708060`)
+* docs: Fix array length argument skipping with preceding out arguments
+* docs: Add return values and skip implicit out arguments in functions
+  (Simon Feltman) (:bzbug:`697356`)
+* docs: Skip implicit array length args when building function doc
+  strings (Simon Feltman) (:bzbug:`697356`)
+* gtk-demo: Add CSS demos (Gian Mario Tagliaretti) (:bzbug:`719722`)
+* build: Avoid clash between gi/types.py and stdlib
+  (Colin Watson) (:bzbug:`721025`)
+
+3.11.3 - 2013-12-16
+-------------------
+
+* Replace usage of PyGIBoxed_Type with PyGIStruct_Type
+  (Simon Feltman) (:bzbug:`581525`)
+
+3.11.2 - 2013-11-17
+-------------------
+
+* gkt-demo: Change main info/source notebook into a GtkStack (Simon Feltman)
+* Add deprecation warnings and cleanup class initializer overrides (Simon Feltman) (:bzbug:`705810`)
+* Fix dir method for static GParamSpec in Python 3 (Simon Feltman)
+* Remove overzealous argument checking for callback userdata (Simon Feltman) (:bzbug:`711173`)
+
+3.10.2 - 2013-11-11
+-------------------
+
+* Fix thread safety problems by always enabling the GIL
+  (Simon Feltman) (:bzbug:`709223`, :bzbug:`710447`)
+
+3.11.1 - 2013-10-28
+-------------------
+
+* Fix toggleref safety problems by always enabling the GIL
+  (Simon Feltman) (:bzbug:`709223`)
+* Add consistent GLib.MainLoop SIGINT cleanup (Simon Feltman) (:bzbug:`710978`)
+* docs: Add a keyword value of None for allow-none annotations
+  (Simon Feltman) (:bzbug:`640812`)
+* Remove overrides for supporting pre-3.10 GObject signal functions
+  (Simon Feltman)
+* Add threads_init back as a requirement for non-Python threaded repos
+  (Simon Feltman) (:bzbug:`710447`)
+* Add dir method to GObject props accessor (Simon Feltman) (:bzbug:`705754`)
+* Remove PyGObjectWeakRef now that g_binding_unbind exists
+  (Simon Feltman) (:bzbug:`699571`)
+* Fix lots of memory leaks leaks (Simon Feltman) (:bzbug:`693402`, :bzbug:`709397`)
+* Add support for variable user data arguments (Simon Feltman) (:bzbug:`640812`)
+* Bump glib and g-i dependencies to latest stable. (Martin Pitt)
+* Fix TypeError when setting drag target_list to None (Nuno Araujo)
+  (:bzbug:`709926`)
+* Use qdata for wrapper retrieval in toggle reference notifications
+  (Simon Feltman) (:bzbug:`709223`)
+* Expose all GI enum and flags types (Simon Feltman) (:bzbug:`709008`)
+* Add support for default arguments annotated with allow-none
+  (Simon Feltman) (:bzbug:`640812`)
+* Refactor argument cache handling (Simon Feltman) (:bzbug:`640812`)
+* Remove support for allowing PyObjects as void pointers
+  (Simon Feltman) (:bzbug:`688081`)
+
+3.10.1 - 2013-10-14
+-------------------
+
+* Fix TypeError when setting drag target_list to None (Nuno Araujo)
+  (:bzbug:`709926`)
+* Use qdata for wrapper retrieval in toggle reference notifications
+  (Simon Feltman) (:bzbug:`709223`)
+* Fix memory leak for caller allocated GValue out arguments
+  (Simon Feltman) (:bzbug:`709397`)
+
+3.10.0 - 2013-09-23
+-------------------
+
+* Fix test_gi.TestProjectVersion.test_version_str() (Martin Pitt)
+
+3.9.92 - 2013-09-16
+-------------------
+
+* Fix union argument regression when marshaling from python
+  (Simon Feltman) (:bzbug:`703873`)
+* Fix GLib.Source sub-classing with initializer args (Simon Feltman)
+  (:bzbug:`707904`)
+* Copy __doc__ when wrapping function (Vratislav Podzimek)
+
+3.9.91 - 2013-09-02
+-------------------
+
+* Fix GObject signal methods to work with new annotations
+  (Simon Feltman) (:bzbug:`707280`)
+* Fix build on C89 Compilers (Chun-wei Fan) (:bzbug:`707264`)
+* Change boxed type checking in marshaling to use __gtype__ attribute
+  (Simon Feltman) (:bzbug:`707140`)
+* Use G_IS_VALUE for checking return values in closure marshaling
+  (Simon Feltman) (:bzbug:`707170`)
+* Fix PEP-8 errors in propertyhelper.py (Yanko Kaneti) (:bzbug:`706319`)
+
+3.9.90 - 2013-08-19
+-------------------
+
+* Create GLib.Pid in the same way on python 2 and 3 (Benjamin Berg)
+  (:bzbug:`705451`)
+* Use PyLong_Type.tp_new for GLib.Pid (Benjamin Berg) (:bzbug:`705451`)
+* Add accumulator and accu_data arguments to GObject.Signal decorator
+  (Simon Feltman) (:bzbug:`705533`)
+* Pass return values through the GObject.Signal.emit wrapper
+  (Simon Feltman) (:bzbug:`705530`)
+
+3.9.5 - 2013-07-29
+------------------
+
+* Ensure exceptions set in closure out argument marshaling are printed
+  (Simon Feltman) (:bzbug:`705064`)
+* Always raise OverflowError for marshaling integers from Python
+  (not ValueError or OverflowError) (Simon Feltman) (:bzbug:`705057`)
+* Cleanup invoke args and kwargs combiner code (Simon Feltman) (:bzbug:`640812`)
+* gtk-demo: Change demo to use Gtk.Application (Simon Feltman) (:bzbug:`698547`)
+* Add callable and descriptor protocols to PyGICallableInfo
+  (Simon Feltman) (:bzbug:`704037`)
+* Unify basic type argument marshaling for methods, closures, and
+  properties (Simon Feltman) (:bzbug:`693405`)
+* Override GValue.set/get_boxed with static C marshaler
+  (Simon Feltman) (:bzbug:`688081`, :bzbug:`693405`)
+* Add deprecation warning for marshaling arbitrary objects as pointers
+  (Simon Feltman) (:bzbug:`688081`)
+* Replace usage of __import__ with importlib.import_module
+  (Simon Feltman) (:bzbug:`682320`)
+* Always unref the GiTypeInfo when generating an argument cache
+  (Mike Gorse) (:bzbug:`703973`)
+* Unref interface info when fetching enums or flags
+  (Mike Gorse) (:bzbug:`703960`)
+* Speed up MRO calculation (Daniel Drake) (:bzbug:`703829`)
+* Add GIL safety to pyobject_copy for copying boxed PyObjects
+  (Simon Feltman) (:bzbug:`688081`)
+* Add marshaling of GI_TYPE_TAG_VOID held in a GValue to int
+  (Simon Feltman) (:bzbug:`694233`)
+* GTK overrides: Make connect_signals handle tuple
+  (Cole Robinson) (:bzbug:`693994`)
+* Re-add support for passing GValue's by reference
+  (Simon Feltman) (:bzbug:`701058`)
+* Clear return value of closures to zero when an exception occurs
+  (Simon Feltman) (:bzbug:`702552`)
+* Don't use doctest syntax in docstrings for examples
+  (Martin Pitt) (:bzbug:`701009`)
+* Add support for properties of type GInterface
+  (Garrett Regier) (:bzbug:`703456`)
+* pygtkcompat: Fix for missing methods on Windows
+  (Martin Pitt) (:bzbug:`702787`)
+* gi/pygi-info.c: Avoid C99-style variable declaration
+  (Chun-wei Fan) (:bzbug:`702786`)
+
+3.8.3 - 2013-07-05
+------------------
+
+* Add marshalling of GI_TYPE_TAG_VOID held in a GValue to int.  While
+  not particularly useful this allows some callbacks in WebKit to
+  function without causing a segfault. (Simon Feltman) (:bzbug:`694233`)
+* pygtkcompat: Fix for missing methods on Windows (Martin Pitt)
+  (:bzbug:`702787`)
+* gi/pygi-info.c: Avoid C99-style variable declaration (Chun-wei Fan)
+  (:bzbug:`702786`)
+* Clear return value of closures to zero when an exception occures
+  (Simon Feltman) (:bzbug:`702552`)
+* Re-add support for passing GValue's by reference (Simon Feltman)
+  (:bzbug:`701058`)
+* Don't use doctest syntax in docstrings for examples, to fix test
+  failures with pyflakes 0.7.x (Martin Pitt) (:bzbug:`701009`)
+* examples/option.py: Port to GI and Python 3 (Martin Pitt)
+
+3.9.2 - 2013-05-28
+------------------
+
+* examples/option.py: Port to GI and Python 3 (Martin Pitt)
+* Fix vfunc info search for classes with multiple inheritance
+  (Simon Feltman) (:bzbug:`700092`)
+* Fix closure argument conversion for enum and flag in args
+  (Simon Feltman)
+* Fix marshaling Python to FFI return value for enum and flags
+  (Simon Feltman)
+* Remove half implemented GC in PyGIBaseInfo, PyGIStruct, and PyGIBoxed
+  (Simon Feltman) (:bzbug:`677091`)
+* Replace usage of pyg_begin_allow_threads with Py_BEGIN_ALLOW_THREADS
+  (Simon Feltman) (:bzbug:`699440`)
+* Remove and deprecate API for setting of thread blocking functions
+  (Simon Feltman) (:bzbug:`699440`)
+
+3.8.2 - 2013-05-13
+------------------
+
+* Fix vfunc info search for classes with multiple inheritance
+  (Simon Feltman) (:bzbug:`700092`)
+* Fix closure argument conversion for enum and flag in args
+  (Simon Feltman)
+* Fix marshaling Python to FFI return value for enum and flags
+  (Simon Feltman)
+* Use correct class for GtkEditable's get_selection_bounds() function
+  (Mike Ruprecht) (:bzbug:`699096`)
+* Test results of g_base_info_get_name for NULL (Simon Feltman)
+  (:bzbug:`698829`)
+* Change interpretation of NULL pointer field from None to 0
+  (Simon Feltman) (:bzbug:`698366`)
+* Remove Python keyword escapement in Repository.find_by_name
+  (Simon Feltman) (:bzbug:`697363`)
+
+3.9.1 - 2013-04-30
+------------------
+
+* gtk-demo: Wrap description strings at 80 characters (Simon Feltman)
+  (:bzbug:`698547`)
+* gtk-demo: Use textwrap to reformat description for Gtk.TextView
+  (Simon Feltman) (:bzbug:`698547`)
+* gtk-demo: Use GtkSource.View for showing source code (Simon Feltman)
+  (:bzbug:`698547`)
+* Use correct class for GtkEditable's get_selection_bounds() function
+  (Mike Ruprecht) (:bzbug:`699096`)
+* Test results of g_base_info_get_name for NULL (Simon Feltman)
+  (:bzbug:`698829`)
+* Add ObjectInfo.get_class_struct() (Johan Dahlin) (:bzbug:`685218`)
+* Change interpretation of NULL pointer field from None to 0
+  (Simon Feltman) (:bzbug:`698366`)
+* Do not build tests until needed (Sobhan Mohammadpour) (:bzbug:`698444`)
+* pygi-convert: Support toolbar styles (Kai Willadsen) (:bzbug:`698477`)
+* pygi-convert: Support new-style constructors for Gio.File
+  (Kai Willadsen) (:bzbug:`698477`)
+* pygi-convert: Add some support for recent manager constructs
+  (Kai Willadsen) (:bzbug:`698477`)
+* pygi-convert: Don't transform arbitrary keysym imports
+  (Kai Willadsen) (:bzbug:`698477`)
+* Remove Python keyword escapement in Repository.find_by_name
+  (Simon Feltman) (:bzbug:`697363`)
+* Optimize signal lookup in gi repository (Daniel Drake) (:bzbug:`696143`)
+* Optimize connection of Python-implemented signals (Daniel Drake)
+  (:bzbug:`696143`)
+* Consolidate signal connection code (Daniel Drake) (:bzbug:`696143`)
+* Fix setting of struct property values (Daniel Drake)
+* Optimize property get/set when using GObject.props (Daniel Drake)
+  (:bzbug:`696143`)
+* configure.ac: Fix PYTHON_SO with Python3.3 (Christoph Reiter)
+  (:bzbug:`696646`)
+* Simplify registration of custom types (Daniel Drake) (:bzbug:`696143`)
+* pygi-convert.sh: Add GStreamer rules (Christoph Reiter) (:bzbug:`697951`)
+* pygi-convert: Add rule for TreeModelFlags (Jussi Kukkonen)
+* Unify GI marshalling code (Simon Feltman) (:bzbug:`693405`)
+* Use distutils.sysconfig to retrieve the python include path.
+  (Christoph Reiter) (:bzbug:`696648`)
+* Support PEP 3149 (ABI version tagged .so files) (Christoph Reiter)
+  (:bzbug:`696646`)
+* Fix stack corruption due to incorrect format for argument parser
+  (Simon Feltman) (:bzbug:`696892`)
+* Deprecate GLib and GObject threads_init (Simon Feltman) (:bzbug:`686914`)
+* Drop support for Python 2.6 (Martin Pitt)
+* Remove static PollFD bindings (Martin Pitt) (:bzbug:`686795`)
+* Drop test skipping due to too old g-i (Martin Pitt)
+* Bump glib and g-i dependencies (Martin Pitt)
+
+3.8.1 - 2013-04-15
+------------------
+
+* pygi-convert.sh: Add GStreamer rules (Christoph Reiter) (:bzbug:`697951`)
+* pygi-convert: Add rule for TreeModelFlags (Jussi Kukkonen)
+* Fix enum and flags marshaling type assumptions (Simon Feltman)
+* Use g_strdup() consistently (Martin Pitt) (:bzbug:`696650`)
+* Fix stack corruption due to incorrect format for argument parser
+  (Simon Feltman) (:bzbug:`696892`)
+
+3.8.0 - 2013-03-25
+------------------
+
+* tests: Fix incorrect assumption when testing pyglib version
+  (Simon Feltman)
+
+3.7.92 - 2013-03-18
+-------------------
+
+* Fix stack smasher when marshaling enums as a vfunc return value
+  (Simon Feltman) (:bzbug:`637832`)
+* Change base class of PyGIDeprecationWarning based on minor version
+  (Simon Feltman) (:bzbug:`696011`)
+* autogen.sh: Source gnome-autogen to fix out of source builddir (Alban
+  Browaeys) (:bzbug:`694889`)
+* pygtkcompat: Make gdk.Window.get_geometry return tuple of 5
+  (Simon Feltman)
+* pygtkcompat: Initialize hint to zero in set_geometry_hints
+  (Simon Feltman)
+* Remove incorrect bounds check with property helper flags
+  (Simon Feltman)
+* Fix crash when setting property of type object to an incorrect type
+  (Simon Feltman) (:bzbug:`695420`)
+* Give more informative error when setting property to incorrect type
+  (Simon Feltman) (:bzbug:`695420`)
+
+3.7.91.1 - 2013-03-05
+---------------------
+
+* Revert "Drop gi.overrides.overridefunc()" (Martin Pitt) (:bzbug:`695199`)
+
+3.7.91 - 2013-03-04
+-------------------
+
+* Fix many memory leaks (:bzbug:`675726`, :bzbug:`693402`, :bzbug:`691501`, :bzbug:`510511`, :bzbug:`691501`,
+  :bzbug:`672224`, and several more which are detected by our test suite)
+  (Martin Pitt)
+* Dot not clobber original Gdk/Gtk functions with overrides
+  (Martin Pitt) (:bzbug:`686835`)
+* Optimize GValue.get/set_value by setting GValue.g_type to a local
+  (Simon Feltman) (:bzbug:`694857`)
+* Run tests with G_SLICE=debug_blocks (Martin Pitt) (:bzbug:`691501`)
+* Add override helper for stripping boolean returns (Martin Pitt)
+  (:bzbug:`694431`)
+* Drop obsolete pygobject_register_sinkfunc() declaration (Martin Pitt)
+  (:bzbug:`639849`)
+* Fix marshalling of C arrays with explicit length in signal arguments
+  (Martin Pitt) (:bzbug:`662241`)
+* Fix signedness, overflow checking, and 32 bit overflow of GFlags
+  (Martin Pitt) (:bzbug:`693121`)
+* gi/pygi-marshal-from-py.c: Fix build on Visual C++ (Chun-wei Fan)
+  (:bzbug:`692856`)
+* Raise DeprecationWarning on deprecated callables (Martin Pitt)
+  (:bzbug:`665084`)
+* pygtkcompat: Add Widget.window, scroll_to_mark, and window methods
+  (Simon Feltman) (:bzbug:`694067`)
+* pygtkcompat: Add Gtk.Window.set_geometry_hints which accepts keyword
+  arguments (Simon Feltman) (:bzbug:`694067`)
+* Ship pygobject.doap for autogen.sh (Martin Pitt) (:bzbug:`694591`)
+* Fix crashes in various GObject signal handler functions
+  (Simon Feltman) (:bzbug:`633927`)
+* pygi-closure: Protect the GSList prepend with the GIL (Olivier Crête)
+  (:bzbug:`684060`)
+* generictreemodel: Fix bad default return type for get_column_type
+  (Simon Feltman)
+
+3.7.90 - 2013-02-19
+-------------------
+
+* overrides: Fix inconsistencies with drag and drop target list API
+  (Simon Feltman) (:bzbug:`680640`)
+* pygtkcompat: Add pygtk compatible GenericTreeModel implementation
+  (Simon Feltman) (:bzbug:`682933`)
+* overrides: Add support for iterables besides tuples for TreePath
+  creation (Simon Feltman) (:bzbug:`682933`)
+* Prefix __module__ attribute of function objects with gi.repository
+  (Niklas Koep) (:bzbug:`693839`)
+* configure.ac: only enable code coverage when available, to fix
+  autogen.sh with older gnome-commons (Jonathan Ballet) (:bzbug:`693328`)
+* Correctly set properties on object with statically defined properties
+  (Jonathan Ballet) (:bzbug:`693618`)
+* autogen.sh: Use gnome-autogen.sh (Martin Pitt) (:bzbug:`693328`)
+* Fix reference leaks with transient floating objects (Simon Feltman)
+  (:bzbug:`687522`)
+
+3.7.5.1 - 2013-02-05
+--------------------
+
+* Fix ABI break with pygobject.h from 3.7.5 (Simon Feltman) (:bzbug:`675726`)
+
+3.7.5 - 2013-02-04
+------------------
+
+* Move various signal methods from static bindings to GI
+  (Simon Feltman) (:bzbug:`692918`)
+* GLib overrides: Support unpacking 'maybe' variants (Paolo Borelli)
+  (:bzbug:`693032`)
+* Fix ref count leak when creating pygobject wrappers for input args
+  (Mike Gorse) (:bzbug:`675726`)
+* Prefix names of typeless enums and flags for GType registration
+  (Simon Feltman) (:bzbug:`692515`)
+* Fix compilation with non-C99 compilers such as Visual C++
+  (Chun-wei Fan) (:bzbug:`692856`)
+* gi/overrides/Glib.py: Fix running on Windows/non-Unix (Chun-wei Fan)
+* Do not immediately initialize Gdk and Gtk on import (Martin Pitt)
+  (:bzbug:`692300`)
+* Accept Â±inf and NaN as float and double values (Martin Pitt) (:bzbug:`692381`)
+* Fix repr() of GLib.Variant (Martin Pitt)
+* Fix gtk-demo for Python 3 (Martin Pitt)
+* Define GObject.TYPE_VALUE gtype constant (Martin Pitt)
+* gobject: Go through introspection on property setting (Olivier Crête)
+  (:bzbug:`684062`)
+* Clean up caller-allocated GValues and their memory (Mike Gorse)
+  (:bzbug:`691820`)
+* Use GNOME_COMPILE_WARNINGS from gnome-common (Martin Pitt)
+
+3.7.4 - 2013-01-14
+------------------
+
+* Allow setting values through GtkTreeModelFilter (Simonas Kazlauskas)
+  (:bzbug:`689624`)
+* Support GParamSpec signal arguments from Python (Martin Pitt)
+  (:bzbug:`683099`)
+* pygobject_emit(): Fix cleanup on error (Martin Pitt)
+* Add signal emission methods to TreeModel which coerce the path
+  argument (Simon Feltman) (:bzbug:`682933`)
+* Add override for GValue (Bastian Winkler) (:bzbug:`677473`)
+* Mark caller-allocated boxed structures as having a slice allocated
+  (Mike Gorse) (:bzbug:`699501`)
+* pygi-property: Support boxed GSList/GList types (Olivier Crête)
+  (:bzbug:`684059`)
+* tests: Add missing backwards compat methods for Python 2.6
+  (Martin Pitt) (:bzbug:`691646`)
+* Allow setting TreeModel values to None (Simon Feltman) (:bzbug:`684094`)
+* Set clean-up handler for marshalled arrays (Mike Gorse) (:bzbug:`691509`)
+* Support setting string fields in structs (Vadim Rutkovsky) (:bzbug:`678401`)
+* Permit plain integers for "gchar" values (Martin Pitt)
+* Allow single byte values for int8 types (Martin Pitt) (:bzbug:`691524`)
+* Fix invalid memory access handling errors when registering an enum
+  type (Mike Gorse)
+* Fix (out) arguments in callbacks (Martin Pitt)
+* Fix C to Python marshalling of struct pointer arrays (Martin Pitt)
+* Don't let Property.setter() method names define property names
+  (Martin Pitt) (:bzbug:`688971`)
+* Use g-i stack allocation API (Martin Pitt) (:bzbug:`615982`)
+* pyg_value_from_pyobject: support GArray (Ray Strode) (:bzbug:`690514`)
+* Fix obsolete automake macros (Marko Lindqvist) (:bzbug:`691101`)
+* Change dynamic enum and flag gtype creation to use namespaced naming
+  (Simon Feltman) (:bzbug:`690455`)
+* Fix Gtk.UIManager.add_ui_from_string() override for non-ASCII chars
+  (Jonathan Ballet) (:bzbug:`690329`)
+* Don't dup strings before passing them to type registration functions
+  (Mike Gorse) (:bzbug:`690532`)
+* Fix marshalling of arrays of boxed struct values (Carlos Garnacho)
+  (:bzbug:`656312`)
+
+3.7.3 - 2012-12-17
+------------------
+
+* Add support for caller-allocated GArray out arguments (Martin Pitt)
+  (:bzbug:`690041`)
+* [API add] Re-support calling GLib.io_add_watch with an fd or Python
+  file (Martin Pitt)
+* pygtkcompat: Work around IndexError on large flags (Martin Pitt)
+* Fix pyg_value_from_pyobject() range check for uint (Martin Pitt)
+* Fix tests to work with g-i 1.34.2 (Martin Pitt)
+* Fix wrong refcount for GVariant property defaults (Martin Pitt)
+  (:bzbug:`689267`)
+* Fix array arguments on 32 bit architectures (Martin Pitt)
+* Add backwards compatible API for GLib.unix_signal_add_full()
+  (Martin Pitt)
+* Drop MININT64/MAXUINT64 workaround, current g-i gets this right now
+  (Martin Pitt)
+* Fix maximum and minimum ranges of TYPE_(U)INT64 properties
+  (Simonas Kazlauskas) (:bzbug:`688949`)
+* Ship pygi-convert.sh in tarballs (Martin Pitt) (:bzbug:`688697`)
+
+3.7.2 - 2012-11-19
+------------------
+
+* [API change] Drop almost all static GLib bindings and replace them
+  with proper introspection. This gets rid of several cases where the
+  PyGObject API was not matching the real GLib API, makes the full GLib
+  API available through introspection, and makes the code smaller,
+  easier to maintain. For backwards compatibility, overrides are
+  provided to emulate the old static binding API, but this will throw a
+  PyGIDeprecationWarning for the cases that diverge from the official
+  API (in particular, GLib.io_add_watch() and GLib.child_watch_add()
+  being called without a priority argument). (Martin Pitt, Simon Feltman)
+* [API change] Deprecate calling GLib API through the GObject
+  namespace. This has always been a misnomer with introspection, and
+  will be removed in a later version; for now this throws a
+  PyGIDeprecationWarning.
+* [API change] Do not bind gobject_get_data() and gobject_set_data().
+  These have been deprecated for a cycle, now dropped entirely.
+  (Steve Frécinaux) (:bzbug:`641944`)
+* [API change] Deprecate void pointer fields as general PyObject
+  storage. (Simon Feltman) (:bzbug:`683599`)
+* Add support for GVariant properties (Martin Pitt)
+* Add type checking to GVariant argument assignment (Martin Pitt)
+* Fix marshalling of arrays of struct pointers to Python (Carlos Garnacho) (:bzbug:`678620`)
+* Fix Gdk.Atom to have a proper str() and repr() (Martin Pitt) (:bzbug:`678620`)
+* Make sure g_value_set_boxed does not cause a buffer overrun with GStrvs (Simon Feltman) (:bzbug:`688232`)
+* Fix leaks with GValues holding boxed and object types (Simon Feltman) (:bzbug:`688137`)
+* Add doc strings showing method signatures for gi methods (Simon Feltman) (:bzbug:`681967`)
+* Set Property instance doc string and blurb to getter doc string (Simon Feltman) (:bzbug:`688025`)
+* Add GObject.G_MINSSIZE (Martin Pitt)
+* Fix marshalling of GByteArrays (Martin Pitt)
+* Fix marshalling of ssize_t to smaller ints (Martin Pitt)
+* Add support for lcov code coverage, and add a lot of missing
+  GIMarshallingTests and g-i Regress tests. (Martin Pitt)
+* pygi-convert: remove deprecated GLib â†’ GObject conversions (Jose Rostagno)
+* Add support for overriding GObject.Object (Simon Feltman) (:bzbug:`672727`)
+* Add --with-python configure option (Martin Pitt)
+* Do not prefer unversioned "python" when configuring, as some distros
+  have "python" as Python 3. Use Python 3 by default if available. Add
+  --with-python configure option as an alternative to setting $PYTHON,
+  whic is more discoverable. (Martin Pitt)
+* Fix property lookup in class hierarchy (Daniel Drake) (:bzbug:`686942`)
+* Move property and signal creation into _class_init() (Martin Pitt) (:bzbug:`686149`)
+* Fix duplicate symbols error on OSX (John Ralls)
+* [API add] Add get_introspection_module for getting un-overridden modules (Simon Feltman) (:bzbug:`686828`)
+* Work around wrong 64 bit constants in GLib Gir (Martin Pitt) (:bzbug:`685022`)
+* Mark GLib.Source.get_current_time() as deprecated (Martin Pitt)
+* Fix OverflowError in source_remove() (Martin Pitt) (:bzbug:`684526`)
+
+3.4.2 - 2012-11-12
+------------------
+
+* Fix marshalling of GByteArrays (Martin Pitt)
+* Fix marshalling of ssize_t to smaller ints (Martin Pitt)
+* Fix crash with GLib.child_watch_add (Daniel Narvaez) (:bzbug:`688067`)
+* Fix various bugs in GLib.IOChannel (Martin Pitt)
+* Work around wrong 64 bit constants in GLib Gir (Martin Pitt)
+  (:bzbug:`685022`)
+* Fix OverflowError in source_remove() (Martin Pitt) (:bzbug:`684526`)
+* Fix Signal decorator to not use base class gsignals dict
+  (Simon Feltman) (:bzbug:`686496`)
+
+3.7.1 - 2012-10-22
+------------------
+
+* Bump version to 3.7.1; let's follow the real GNOME versioning from
+  now on (Martin Pitt)
+* Change install_properties to not use getattr on classes
+  (Simon Feltman) (:bzbug:`686559`)
+* Move property install function into propertyhelper.py (Simon Feltman)
+  (:bzbug:`686559`)
+* Fix Signal decorator to not use base class gsignals dict
+  (Simon Feltman) (:bzbug:`686496`)
+* tests: Consistently use GLib.MainLoop (Martin Pitt)
+* Install the .egg-info files into correct multilib directory
+  (Kalev Lember) (:bzbug:`686315`)
+* Fix leaked vfunc return values (Simon Feltman) (:bzbug:`686140`)
+* Skip Regress tests with --disable-cairo (Martin Pitt) (:bzbug:`685094`)
+* Fix leak with python callables as closure argument. (Simon Feltman)
+  (:bzbug:`685598`)
+* Gio overrides: Handle setting GSettings enum keys (Martin Pitt)
+  (:bzbug:`685947`)
+* tests: Check reading GSettings enums in Gio overrides (Martin Pitt)
+* Fix unsigned values in GArray/GList/GSList/GHash (Martin Pitt)
+  (:bzbug:`685860`)
+* _pygi_marshal_from_py_uint64(): Use correct data type in py2.7 check
+  (Alban Browaeys) (:bzbug:`685000`)
+* Install an .egg-info file (Johan Dahlin) (:bzbug:`680138`)
+* PyGProps_getattro(): Fix GObjectClass leak (Johan Dahlin) (:bzbug:`685218`)
+* pygobject.c: Don't leak GObjectClass reference (Olivier Crête)
+  (:bzbug:`684062`)
+* Fix memory leak in _pygi_argument_to_array() (Alban Browaeys)
+  (:bzbug:`685082`)
+* Fix error messages for out of range numbers (Martin Pitt) (:bzbug:`684314`)
+* Kill dbus-daemon after running tests (Martin Pitt) (:bzbug:`685009`)
+* GVariant overrides: Support empty tuple arrays (Martin Pitt)
+  (:bzbug:`684928`)
+* tests: Fix wrong return type in test_int64_callback() (Martin Pitt)
+  (:bzbug:`684700`)
+* Fix GValue marshalling of long and unsigned long (Giovanni Campagna)
+  (:bzbug:`684331`)
+* Clean up deprecation message for assigning gpointers to objects.
+  (Simon Feltman) (:bzbug:`683599`)
+* pygi-property: Lookup property in base classes of non-introspected
+  types (Olivier Crête) (:bzbug:`684058`)
+
+3.4.1.1 - 2012-10-17
+--------------------
+
+* Bump g-i dependency to >= 1.34.1.1 (Paolo Borelli)
+* Fix leaked vfunc return values (Simon Feltman) (:bzbug:`686140`)
+* Install egg-info files in the right dir  Kalev Lember) (:bzbug:`686315`)
+
+3.4.1 - 2012-10-15
+------------------
+
+* Skip Regress tests with --disable-cairo (Martin Pitt) (:bzbug:`685094`)
+* Fix leak with python callables as closure argument. (Simon Feltman) (:bzbug:`685598`)
+* Gio overrides: Handle setting GSettings enum keys (Martin Pitt) (:bzbug:`685947`)
+* Fix unsigned values in GArray/GList/GSList/GHash (Martin Pitt) (:bzbug:`685860`)
+* _pygi_marshal_from_py_uint64(): Use correct data type in py2.7 check (Alban Browaeys) (:bzbug:`685000`)
+* Install an .egg-info file (Johan Dahlin) (:bzbug:`680138`)
+* PyGProps_getattro(): Fix GObjectClass leak (Johan Dahlin) (:bzbug:`685218`)
+* pygobject.c: Don't leak GObjectClass reference (Olivier Crête) (:bzbug:`684062`)
+* Fix memory leak in _pygi_argument_to_array() (Alban Browaeys) (:bzbug:`685082`)
+* Fix error messages for out of range numbers (Martin Pitt) (:bzbug:`684314`)
+* Kill dbus-daemon after running tests (Martin Pitt) (:bzbug:`685009`)
+* GVariant overrides: Support empty tuple arrays (Martin Pitt) (:bzbug:`684928`)
+* tests: Fix wrong return type in test_int64_callback() (Martin Pitt) (:bzbug:`684700`)
+* Fix GValue marshalling of long and unsigned long (Giovanni Campagna) (:bzbug:`684331`)
+* Clean up deprecation message for assigning gpointers to objects. (Simon Feltman) (:bzbug:`683599`)
+* pygi-property: Lookup property in base classes of non-introspected types (Olivier Crête) (:bzbug:`684058`)
+
+3.4.0 - 2012-09-24
+------------------
+
+* Bump g-i dependency to 1.33.14 (Martin Pitt)
+
+3.3.92 - 2012-09-17
+-------------------
+
+* [API add] Add ObjectInfo.get_abstract method (Simon Feltman) (:bzbug:`675581`)
+* Add deprecation warning when setting gpointers to anything other than
+  int. (Simon Feltman) (:bzbug:`683599`)
+* argument: Fix 64bit integer convertion from GValue (Nicolas Dufresne)
+  (:bzbug:`683596`)
+* Improve setting pointer fields/arguments to NULL using None
+  (Simon Feltman) (:bzbug:`683150`)
+* Bump g-i dependency to 1.33.10 (Martin Pitt)
+* Fix -uninstalled.pc.in file (Thibault Saunier) (:bzbug:`683379`)
+* Various test suite additions and improvements (Martin Pitt)
+
+3.3.91 - 2012-09-03
+-------------------
+
+* Fix exception test case for Python 2 (Martin Pitt)
+* Bump g-i dependency to >= 1.3.9 (Martin Pitt)
+* Show proper exception when trying to allocate a disguised struct
+  (Martin Pitt) (:bzbug:`639972`)
+* Support marshalling GParamSpec signal arguments (Mark Nauwelaerts)
+  (:bzbug:`683099`)
+* Add test for a signal that returns a GParamSpec (Martin Pitt)
+  (:bzbug:`683265`)
+* [API add] Add Signal class for adding and connecting custom signals.
+  (Simon Feltman) (:bzbug:`434924`)
+* Fix pygtkcompat's Gtk.TreeView.insert_column_with_attributes()
+  (Martin Pitt)
+* Add override for Gtk.TreeView.insert_column_with_attributes()
+  (Marta Maria Casetti) (:bzbug:`679415`)
+* .gitignore: Add missing built files (Martin Pitt)
+* Ship tests/gi in tarball (Martin Pitt)
+* Split test_overrides.py (Martin Pitt) (:bzbug:`683188`)
+* _pygi_argument_to_object(): Clean up array unmarshalling (Martin Pitt)
+* Fix memory leak in _pygi_argument_to_object() (Alban Browaeys)
+  (:bzbug:`682979`)
+* Fix setting pointer fields/arguments to NULL using None.
+  (Simon Feltman) (:bzbug:`683150`)
+* Fix for python 2.6, officially drop support for < 2.6 (Martin Pitt)
+  (:bzbug:`682422`)
+* Allow overrides in other directories than gi itself
+  (Thibault Saunier) (:bzbug:`680913`)
+* Clean up sys.path handling in tests (Simon Feltman) (:bzbug:`680913`)
+* Fix dynamic creation of enum and flag gi types for Python 3.3
+  (Simon Feltman) (:bzbug:`682323`)
+* [API add] Override g_menu_item_set_attribute (Paolo Borelli) (:bzbug:`682436`)
+
+3.3.90 - 2012-08-20
+-------------------
+
+* Implement marshalling for GParamSpec (Mathieu Duponchelle) (:bzbug:`681565`)
+* Fix erronous import statements for Python 3.3 (Simon Feltman)
+  (:bzbug:`682051`)
+* Do not fail tests if pyflakes or pep8 are not installed (Martin Pitt)
+* Fix PEP-8 whitespace checking and issues in the code (Martin Pitt)
+* Fix unmarshalling of gssize (David Malcolm) (:bzbug:`680693`)
+* Fix various endianess errors (David Malcolm) (:bzbug:`680692`)
+* Gtk overrides: Add TreeModelSort.__init__(self, model)
+  (Simon Feltman) (:bzbug:`681477`)
+* Convert Gtk.CellRendererState in the pygi-convert script
+  (Manuel Quiñones) (:bzbug:`681596`)
+
+3.3.5 - 2012-08-06
+------------------
+
+* Fix list marshalling on big-endian machines (Martin Pitt)
+  (:bzbug:`680693`)
+* Beautify class/interface type mismatch error messages (Martin Pitt)
+* Skip instead of fail tests which need Pango, Atk, Gdk, Gtk (Martin Pitt)
+* [API add] pygtkcompat: Add more pixbuf creation functions (Simon Feltman)
+  (:bzbug:`680814`)
+* Fix error messages on interface/class type mismatches (Martin Pitt)
+* Fix crash when returning (False, None) from Gtk.TreeModel.do_get_iter() (Simon Feltman)
+  (:bzbug:`680812`)
+* Add test case for Gtk.TextIter.forward_search() (Martin Pitt)
+  (:bzbug:`679415`)
+* pygi-info.c: Robustify pointer arithmetic (Martin Pitt)
+* Add set_attributes() override to Gtk.TreeViewColumn (Manuel Quiñones)
+* Gtk overrides: Add TreePath.__getitem__() (Simon Feltman)
+  (:bzbug:`680353`)
+* Fix property type mapping from int to TYPE_INT for python3. (Simon Feltman)
+  (:bzbug:`679939`)
+* Convert Gtk.DestDefaults constants in pygi-convert.sh script (Manuel Quiñones)
+  (:bzbug:`680259`)
+* Convert all Gdk.WindowState constants in pygi-convert.sh (Manuel Quiñones)
+  (:bzbug:`680257`)
+* [API add] Add API for checking pygobject's version (Joe R. Nassimian)
+  (:bzbug:`680176`)
+* pygi-convert.sh: Add some missing Gdk.CursorTypes (Manuel Quiñones)
+  (:bzbug:`680050`)
+* pygi-convert.sh: convert rsvg.Handle(data=...) (Manuel Kaufmann)
+  (:bzbug:`680092`)
+
+3.3.4 - 2012-07-16
+------------------
+
+* pygi-convert.sh: Drop bogus filter_new() conversion (Martin Pitt)
+  (:bzbug:`679999`)
+* Fix help() for GI modules (Martin Pitt) (:bzbug:`679804`)
+* Skip gi.CallbackInfo objects from a module's dir() (Martin Pitt)
+  (:bzbug:`679804`)
+* Fix __path__ module attribute (Martin Pitt)
+* pygi-convert.sh: Fix some child â†’ getChild() false positives
+  (Joe R. Nassimian) (:bzbug:`680004`)
+* Fix array handling for interfaces, properties, and signals
+  (Mikkel Kamstrup Erlandsen) (:bzbug:`667244`)
+* Add conversion of the Gdk.PropMode constants to pygi-convert.sh
+  script (Manuel Quiñones) (:bzbug:`679775`)
+* Add the same rules for pack_start to convert pack_end (Manuel
+  Quiñones) (:bzbug:`679760`)
+* Add error-checking for the case where _arg_cache_new() fails
+  (Dave Malcolm) (:bzbug:`678914`)
+* Add conversion of the Gdk.NotifyType constants to pygi-convert.sh
+  script (Manuel Quiñones) (:bzbug:`679754`)
+* Fix PyObject_Repr and PyObject_Str reference leaks (Simon Feltman)
+  (:bzbug:`675857`)
+* [API add] Gtk overrides: Add TreePath.__len__() (Martin Pitt)
+  (:bzbug:`679199`)
+* GLib.Variant: Fix repr(), add proper str() (Martin Pitt) (:bzbug:`679336`)
+* m4/python.m4: Update Python version list (Martin Pitt)
+* Remove "label" property from Gtk.MenuItem if it is not set
+  (Micah Carrick) (:bzbug:`670575`)
+
+3.3.3.1 - 2012-06-25
+--------------------
+
+* Do not escape enum and flag names that are Python keywords (Martin Pitt)
+
+3.3.3 - 2012-06-25
+------------------
+
+* Remove obsolete release-tag make target (Martin Pitt)
+* Do not do any python calls when GObjects are destroyed after the
+  python interpreter has been finalized (Simon Schampijer) (:bzbug:`678046`)
+* Do not change constructor-only "type" Window property (Martin Pitt)
+  (:bzbug:`678510`)
+* Escape identifiers which are Python keywords (Martin Pitt) (:bzbug:`676746`)
+* Fix code for PEP-8 violations detected by the latest pep8 checker.
+  (Martin Pitt)
+* Fix crash in GLib.find_program_in_path() (Martin Pitt) (:bzbug:`678119`)
+* Revert "Do not bind gobject_get_data() and gobject_set_data()" (Martin Pitt)
+  (:bzbug:`641944`)
+* GVariant: Raise proper TypeError on invalid tuple input (David Keijser)
+  (:bzbug:`678317`)
+
+3.3.2 - 2012-06-05
+------------------
+
+* foreign: Register cairo.Path and cairo.FontOptions foreign structs
+  (Bastian Winkler) (:bzbug:`677388`)
+* Check types in GBoxed assignments (Marien Zwart) (:bzbug:`676603`)
+* [API add] Gtk overrides: Add TreeModelRow.get_previous()
+  (Bastian Winkler) (:bzbug:`677389`)
+* [API add] Add missing GObject.TYPE_VARIANT (Bastian Winkler) (:bzbug:`677387`)
+* Fix boxed type equality (Jasper St. Pierre) (:bzbug:`677249`)
+* Fix TestProperties.testBoxed test (Jose Rostagno) (:bzbug:`676644`)
+* Fix handling of by-reference structs as out parameters
+  (Carlos Garnacho) (:bzbug:`653151`)
+* tests: Add more vfunc checks for GIMarshallingTestsObject
+  (Martin Pitt)
+* Test caller-allocated GValue out parameter (Martin Pitt) (:bzbug:`653151`)
+* GObject.bind_property: Support transform functions (Bastian Winkler)
+  (:bzbug:`676169`)
+* Fix lookup of vfuncs in parent classes (Carlos Garnacho) (:bzbug:`672864`)
+* tests/test_properties.py: Fix whitespace (Martin Pitt)
+* gi: Support zero-terminated arrays with length arguments
+  (Jasper St. Pierre) (:bzbug:`677124`)
+* [API add] Add GObject.bind_property method (Simon Feltman) (:bzbug:`675582`)
+* pygtkcompat: Correctly set flags (Jose Rostagno) (:bzbug:`675911`)
+* Gtk overrides: Implement __delitem__ on TreeModel (Jose Rostagno)
+  (:bzbug:`675892`)
+* Gdk Color override should support red/green/blue_float properties
+  (Simon Feltman) (:bzbug:`675579`)
+* Support marshalling of GVariants for closures (Martin Pitt) (:bzbug:`656554`)
+* _pygi_argument_from_object(): Check for compatible data type
+  (Martin Pitt)
+* pygtkcompat: Fix color conversion (Martin Pitt)
+* test_gi: Check setting properties in constructor (Martin Pitt)
+* Support getting and setting GStrv properties (Martin Pitt)
+* Support defining GStrv properties from Python (Martin Pitt)
+* Add GObject.TYPE_STRV constant (Martin Pitt)
+* Unref GVariants when destroying the wrapper (Martin Pitt) (:bzbug:`675472`)
+* Fix TestArrayGVariant test cases (Martin Pitt)
+* pygtkcompat: Add gdk.pixbuf_get_formats compat code (Jose Rostagno)
+  (:bzbug:`675489`)
+* pygtkcompat: Add some more compat functions (Jose Rostagno) (:bzbug:`675489`)
+* Fix tests for Python 3 (Martin Pitt)
+* Fix building with --disable-cairo (Martin Pitt)
+* tests: Fix deprecated assertions (Martin Pitt)
+* Run tests with ``MALLOC_PERTURB_`` (Martin Pitt)
+
+3.2.2 - 2012-05-14
+------------------
+
+* pygtkcompat: Correctly set flags (Jose Rostagno) (:bzbug:`675911`)
+* Gtk overrides: Implement __delitem__ on TreeModel (Jose Rostagno)
+  (:bzbug:`675892`)
+
+3.2.1 - 2012-05-10
+------------------
+
+* Reindent files in tests to use 4-space indentation (Sebastian Pölsterl
+* Add missing override for TreeModel.iter_previous() (Martin Pitt)
+* GSettings: allow extra keyword arguments (Giovanni Campagna)
+* pygtkcompat: Correct Userlist module use (Jose Rostagno)
+* test_gdbus: Call GetConnectionUnixProcessID() with correct signature (Martin Pitt)
+* GTK overrides: Add missing keyword arguments (Martin Pitt)
+* pygi-convert.py: Drop obsolete drag method conversions (Martin Pitt)
+* Fix len_arg_index for array arguments (Bastian Winkler)
+* Add missing GObject.TYPE_GTYPE (Martin Pitt)
+* Fix "distcheck" and tests with out-of-tree builds (Martin Pitt)
+* Add GtkComboBoxEntry compatibility (Paolo Borelli)
+
+3.3.1 - 2012-04-30
+------------------
+
+* GSettings: allow extra keyword arguments (Giovanni Campagna)
+  (:bzbug:`675105`)
+* pygtkcompat: Correct Userlist module use (Jose Rostagno) (:bzbug:`675084`)
+* Add release-news make rule (Martin Pitt)
+* Add "make check.nemiver" target (Martin Pitt)
+* Test flags and enums in GHash values (Martin Pitt) (:bzbug:`637466`)
+* tests: Activate test_hash_in and apply workaround (Martin Pitt)
+  (:bzbug:`666636`)
+* Add special case for Gdk.Atom array entries from Python (Martin Pitt)
+  (:bzbug:`661709`)
+* test_gdbus: Call GetConnectionUnixProcessID() with correct signature
+  (Martin Pitt) (:bzbug:`667954`)
+* Add test case for Gtk.ListStore custom sort (Martin Pitt) (:bzbug:`674475`)
+* GTK overrides: Add missing keyword arguments (Martin Pitt) (:bzbug:`660018`)
+* [API change] Add missing override for TreeModel.iter_previous()
+  (Martin Pitt) (:bzbug:`660018`)
+* pygi-convert.py: Drop obsolete drag method conversions (Martin Pitt)
+  (:bzbug:`652860`)
+* tests: Replace deprecated assertEquals() with assertEqual()
+  (Martin Pitt)
+* Plug tiny leak in constant_info_get_value (Paolo Borelli) (:bzbug:`642754`)
+* Fix len_arg_index for array arguments (Bastian Winkler) (:bzbug:`674271`)
+* Support defining GType properties from Python (Martin Pitt) (:bzbug:`674351`)
+* Handle GType properties correctly (Bastian Winkler) (:bzbug:`674351`)
+* Add missing GObject.TYPE_GTYPE (Martin Pitt)
+* Fix test_mainloop.py for Python 3 (Martin Pitt)
+* Make callback exception propagation test stricter (Martin Pitt)
+  (:bzbug:`616279`)
+* [API add] Add context management to freeze_notify() and
+  handler_block(). (Simon Feltman) (:bzbug:`672324`)
+* Add support for GFlags properties (Martin Pitt) (:bzbug:`620943`)
+* [API add] Wrap GLib.Source.is_destroyed() method (Martin Pitt)
+  (:bzbug:`524719`)
+* Fix error message when trying to override a non-GI class
+  (Martin Pitt) (:bzbug:`646667`)
+* Fix segfault when accessing __grefcount__ before creating the GObject
+  (Steve Frécinaux) (:bzbug:`640434`)
+* [API change] Do not bind gobject_get_data() and gobject_set_data()
+  (Steve Frécinaux) (:bzbug:`641944`)
+* Add test case for multiple GLib.MainLoop instances (Martin Pitt)
+  (:bzbug:`663068`)
+* Add a ccallback type which is used to invoke callbacks passed to a
+  vfunc (John (J5) Palmieri) (:bzbug:`644926`)
+* Regression test: marshalling GValues in GHashTable (Alberto Mardegan)
+  (:bzbug:`668903`)
+* Update .gitignore (Martin Pitt)
+* Fix "distcheck" and tests with out-of-tree builds (Martin Pitt)
+* Add a pep8 check to the makefile (Johan Dahlin) (:bzbug:`672627`)
+* PEP8 whitespace fixes (Johan Dahlin) (:bzbug:`672627`)
+* PEP8: Remove trailing ; (Johan Dahlin) (:bzbug:`672627`)
+* tests: Replace deprecated Python API (Martin Pitt)
+* Fail tests if they use or encounter deprecations (Martin Pitt)
+* Do not run tests in two phases any more (Martin Pitt)
+* test_overrides: Find local gsettings schema with current glib
+  (Martin Pitt)
+* Add GtkComboBoxEntry compatibility (Paolo Borelli) (:bzbug:`672589`)
+* Correct review comments from Martin (Johan Dahlin) (:bzbug:`672578`)
+* Correct pyflakes warnings/errors (Johan Dahlin) (:bzbug:`672578`)
+* Make tests fail on CRITICAL logs, too, and apply to all tests
+  (Martin Pitt)
+* Support marshalling GI_TYPE_TAG_INTERFACE (Alberto Mardegan)
+  (:bzbug:`668903`)
+* Fix warnings on None values in added tree/list store rows
+  (Martin Pitt) (:bzbug:`672463`)
+* pygtkcompat test: Properly clean up PixbufLoader (Martin Pitt)
+
+3.2.0 - 2012-03-26
+------------------
+
+* No changes since 3.1.93 except version number.
+
+3.1.93 - 2012-03-22
+-------------------
+
+* Fix warnings on None values in added tree/list store rows.
+  (:bzbug:`672463`, Martin Pitt)
+* Support marshalling GI_TYPE_TAG_INTERFACE (:bzbug:`668903`, Alberto Mardegan)
+* test_overrides: Find local gsettings schema with current glib
+  (Martin Pitt)
+* pygtkcompat test: Properly clean up PixbufLoader (Martin Pitt)
+
+3.1.92 - 2012-03-19
+-------------------
+
+* Correct Gtk.TreePath.__iter__ to work with Python 3 (Johan Dahlin)
+* Fix test_everything.TestSignals.test_object_param_signal test case
+  (Martin Pitt)
+* Add a PyGTK compatibility layer (Johan Dahlin)
+* pygtkcompat: Remove first argument for get_origin() (Johan Dahlin)
+* Fix pygtkcompat.py to work with Python 3 (Martin Pitt)
+* GtkViewport: Add a default values for the adjustment constructor
+  parameters (Johan Dahlin)
+* GtkIconSet: Add a default value for the pixbuf constructor parameter
+  (Johan Dahlin)
+* PangoLayout: Add a default value for set_markup() (Johan Dahlin)
+* Gtk[HV]Scrollbar: Add a default value for the adjustment constructor
+  parameter (Johan Dahlin)
+* GtkToolButton: Add a default value for the stock_id constructor
+  parameter (Johan Dahlin)
+* GtkIconView: Add a default value for the model constructor parameter
+  (Johan Dahlin)
+* Add a default value for column in Gtk.TreeView.get_cell_area()
+  (Johan Dahlin)
+* Atomic inserts in Gtk.{List,Tree}Store overrides (Martin Pitt)
+* Fix Gtk.Button constructor to accept use_stock parameter
+  (Martin Pitt)
+* Correct bad rebase, remove duplicate Window (Johan Dahlin)
+* Add bw-compatible arguments to Gtk.Adjustment (Johan Dahlin)
+* GtkTreePath: make it iterable (Johan Dahlin)
+* Add a default argument to TreeModelFilter.set_visible_func()
+  (Johan Dahlin)
+* Add a default argument to Gtk.TreeView.set_cursor (Johan Dahlin)
+* Add a default argument to Pango.Context.get_metrics() (Johan Dahlin)
+* Fix double-freeing GValues in arrays (Martin Pitt)
+* Renamed "property" class to "Property" (Simon Feltman)
+* Fix Python to C marshalling of GValue arrays (Martin Pitt)
+* Correct the Gtk.Window hierarchy (Johan Dahlin)
+* Renamed getter/setter instance attributes to fget/fset respectively.
+  (Simon Feltman)
+* Add Gtk.Arrow/Gtk.Window constructor override (Johan Dahlin)
+* Fix marshalling to/from Python to work on big endian machines.
+  (Michel Dänzer)
+* Use gi_cclosure_marshal_generic instead of duplicating it.
+  (Michel Dänzer)
+* Override Gtk.TreeView.get_visible_range to fix return (René Stadler)
+* Plug memory leak in _is_union_member (Paolo Borelli)
+* tests: Split TestInterfaces into separate tests (Sebastian Pölsterl)
+* README: Update current maintainers (Martin Pitt)
+
+3.1.1 - 2012-02-20
+------------------
+
+* Don't use C99 style (Sebastian Pölsterl)
+* Add test for GPtrArray with transfer full (Martin Pitt)
+* Drop obsolete g_thread_init() (Martin Pitt)
+* Fix deprecated g_source_get_current_time() (Martin Pitt)
+* Fix deprecated g_value_[gs]et_char() (Martin Pitt)
+* Make pygiconvert.sh correctly convert gtk.gdk.x11_* (Simon Schampijer)
+* Raise required glib version to 2.31 because of g_value_(get|set)_schar (Sebastian Pölsterl)
+* Fix cset_first typo (Dieter Verfaillie)
+* pygi-convert: Handle Clutter and Cogl (Bastian Winkler)
+* Provide access to gpointer struct values (Cédric Krier)
+* Add some GType tests (Paolo Borelli)
+* Split GStrv and array variant tests in their own classes (Paolo Borelli)
+* Add unit test for builder's connect_after (Paolo Borelli)
+* fix GtkBuilder signal connection 'after' logic (Ryan Lortie)
+* test(1) uses '=' to test if strings are identical (Patrick Welche)
+* pygspawn: improve error checking (Ryan Lortie)
+
+3.0.4 - 2012-02-09
+------------------
+
+* Revert "Convert all strings to utf-8 encoding when retrieving from TreeModel" (Martin Pitt)
+* Fixed bug where GObject.property did not respect minimum and maximum values (Sebastian Pölsterl)
+* Remove mention of removed option --enable-docs (Tomeu Vizoso)
+
+3.1.0 - 2012-02-06
+------------------
+
+* Updated DOAP file to only include people currently actively working on the project (Sebastian Pölsterl)
+* Revert "Convert all strings to utf-8 encoding when retrieving from TreeModel" (Sebastian Pölsterl)
+* tests: Fixed issues with python3 (Sebastian Pölsterl)
+* Properly distinguish between different integer types for properties (Sebastian Pölsterl)
+* Distinguish between GArray and GPtrArray when cleaning up (Sebastian Pölsterl)
+* Add null_gerror_callback unit test (Paolo Borelli)
+* pyglib_error_check: Re-add missing NULL check (Martin Pitt)
+* Add tests/runtests-windows.py to source tarball (Michael Culbertson)
+* Don't issue a depreciation warning for GtkDialog's NO_SEPARATOR flag, even when unused (Sebastian Pölsterl)
+* Fix bool() operations on GLib.Variant objects (Nirbheek Chauhan)
+* Fix hash() and __eq__() for GLib.Variant objects (Nirbheek Chauhan)
+* Fix method names of callback tests (Martin Pitt)
+* Cairo: add missing braces around array-of-struct definition (Will Thompson)
+* g_instance_init: cast to PyGObject * as needed (Will Thompson)
+* Fix a few set-but-not-used warnings. (Will Thompson)
+* pygmainloop: allow for extra arguments in 'quit' method (Stefano Facchini)
+* Fix bytearray test compatibility with python3 (Alexandre Rostovtsev)
+* Respect transfer-type when demarshalling GErrors (Alberto Mardegan)
+* Support GHashTable and GError as callback/closure arguments (Alberto Mardegan)
+* Don't leak when marshalling GErrors to C (Will Thompson)
+* Support functions which return GError (Will Thompson)
+* Fix indentation of _pygi_argument_to_object() (Alberto Mardegan)
+* Avoid C99 syntax. (Paolo Borelli)
+* Connect to first action of a radio group. (Paolo Borelli)
+* Use g_slist_free_full in pygi-closure. (Paolo Borelli)
+* Avoid O(n^2) behavior when marshalling lists (Paolo Borelli)
+* Handle NULL as a valid case of a char** array (Paolo Borelli)
+* Branching, bump version to 3.1.0 (Tomeu Vizoso)
+* Add notes about branching to HACKING (Tomeu Vizoso)
+* Fixed bug where GObject.property did not respect minimum and maximum values (Sebastian Pölsterl)
+* Remove mention of removed option --enable-docs (Tomeu Vizoso)
+* Fix sebp's name in NEWS (Tomeu Vizoso)
+
+3.0.3 - 2011-12-12
+------------------
+
+* Convert all modifier constants to Gdk.ModifierType (Manuel Quiñones)
+* Convert all strings to utf-8 encoding when retrieving from TreeModel (Sebastian Pölsterl)
+* add test for bytearray variants (John (J5) Palmieri)
+* handle NULL arrays correctly for each array type (John (J5) Palmieri)
+* Revert "Revert "Fix array termination and size calculation"" (John (J5) Palmieri)
+* pygmainloop: avoid lockups if multiple glib.MainLoop exist (Owen W. Taylor)
+* Properly chain up to the class that implements a given vfunc. (Tomeu Vizoso)
+* Revert "Fix array termination and size calculation" (Tomeu Vizoso)
+* Fix array termination and size calculation (Holger Berndt)
+* pygi-convert: fix for Pango.Alignment (Daniel Drake)
+* pygi-convert: fix for Gtk.Orientation (Daniel Drake)
+* Add tests for calling closures (Martin Pitt)
+* fix marshaling of arrays of GVariants (Mikkel Kamstrup Erlandsen)
+
+3.0.2 - 2011-10-21
+------------------
+
+* Add tests for boxed properties. (Ignacio Casal Quinteiro)
+* Allow GBoxed types as property (Timo Vanwynsberghe)
+* when converting an object with transfer none, make sure the wrapper owns a ref (John (J5) Palmieri)
+* unit test for checking ref count of object param in signals (John (J5) Palmieri)
+* Gdk overrides: Unbreak for Gdk-2.0 (Martin Pitt)
+* Do union member checks for unions that are parameters (John (J5) Palmieri)
+
+3.0.1 - 2011-09-30
+------------------
+
+* when checking instances union members are same type as parent
+* add a floating flag to pygobjects
+* Revert "Fix refcount bug by not creating python wrapper during gobject init stage"
+
+3.0.0 - 2011-09-19
+------------------
+
+* up version required of gobject-introspection to 1.29.0 (John (J5) Palmieri)
+* fix most warnings (John (J5) Palmieri)
+
+2.90.4 - 2011-09-15 (3.0 pre-release)
+-------------------------------------
+
+* do not pass in len(str) to the length argument of gtk_test_buffer_insert* apis (John (J5) Palmieri)
+* Switch tarball compression format to tar.xz only. (Dieter Verfaillie)
+* Remove pygtk_version attribute from internal gi._gobject module. (Dieter Verfaillie)
+* remove overridesdir from the .pc file and add it to the gi module (John (J5) Palmieri)
+* fix tests to correctly construct a dummy Gtk.TargetEntry (John (J5) Palmieri)
+* we now assume that C arrays of structs are flat so memcpy them when marshalling (John (J5) Palmieri)
+* only update the arg counts once if child arg comes before parent arg (John (J5) Palmieri)
+* Fix refcount bug by not creating python wrapper during gobject init stage (John (J5) Palmieri)
+* don't destroy just created wrapper when object is created via g_object_new (John (J5) Palmieri)
+* Remove deprecated API from pygobject.h (Steve Frécinaux)
+* Convert gtk.TRUE/FALSE to Python True/False. (Marcin Owsiany)
+* Drop legacy __gobject_init__ method of GObject.Object. (Steve Frécinaux)
+* AM_CHECK_PYTHON_LIBS does not work for lib64 (Dieter Verfaillie)
+* Remove common_ldflags from Makefile.am as it is no longer used. (Dieter Verfaillie)
+* check if object is actually a PyGFlag before trying to access g_type (John (J5) Palmieri)
+* fix regression - add instance type checks since Py3 no longer does this for us (John (J5) Palmieri)
+* refactor in/out marshalling to be to_py/from_py (John (J5) Palmieri)
+* Examples: fix cairo-demo.py imports (Dieter Verfaillie)
+* Fix paths and add missing overridesdir variable used in uninstalled pkgconfig file (Dieter Verfaillie)
+* Remove no longer used variables from pkgconfig files (Dieter Verfaillie)
+* docs/Makefile.am and m4/python.m4: Python3 portability fixes (Dieter Verfaillie)
+* Refactor and clean Makefile.am files (Dieter Verfaillie)
+* Remove all PLATFORM_VERSION = 2.0 traces (Dieter Verfaillie)
+* Remove gi/tests/ directory as all the tests now live in tests/ (Dieter Verfaillie)
+* autogen.sh: Use autoreconf instead of a custom script and honor ACLOCAL_FLAGS (Dieter Verfaillie)
+* use improved python.m4 macros to search for Python headers and libs (Dieter Verfaillie)
+* Make maintiner mode enabled by default (Javier Jardón)
+* Disable documentation for now since they are completely wrong for GI. (Dieter Verfaillie)
+* Fix documentation installation directory (Dieter Verfaillie)
+* Remove distutils based build system. (Dieter Verfaillie)
+* [gtk-demo] Fix syntax highlighter encoding issue (Dieter Verfaillie)
+* overrides: add constants for atoms (Ignacio Casal Quinteiro)
+* Drop pygobject_construct() from public API. (Steve Frécinaux)
+
+2.90.3 - 2011-08-31(3.0 pre-release)
+------------------------------------
+
+* support skip annotation for return values (John (J5) Palmieri)
+* Test GPtrArray regression (Xavier Claessens)
+* Drop support for old constructor style. (Steve Frécinaux)
+* Drop support for sink functions. (Steve Frécinaux)
+* Reinstate copying of in-line structs in arrays (Mike Gorse)
+* fix inline struct array handling (John (J5) Palmieri)
+* fix on demos (Dieter Verfaillie)
+* Added support for __setitem__ to TreeModel and support for slices to TreeModelRow (Sebastian Pölsterl)
+* Convert ACCEL_* constants into Gtk.AccelFlags. (Olav Vitters)
+* Convert TREE_VIEW_DROP_* constants into Gtk.TreeViewDropPosition (Olav Vitters)
+
+2.90.2 - 2011-08-18 (3.0 pre-release)
+-------------------------------------
+
+* remove tests that were removed from gi (John (J5) Palmieri)
+* don't calculate item_size using is_pointer (John (J5) Palmieri)
+* Updated signal example to use GObject introspection (Timo Vanwynsberghe)
+* Updated properties example to use GObject introspection (Timo Vanwynsberghe)
+* Add override for GLib.Variant.split_signature() (Martin Pitt)
+* [pygi-convert.sh] Handle the import of pygtk and require Gtk 3.0 (Timo Vanwynsberghe)
+* Install pygobject.h again. (Ignacio Casal Quinteiro)
+* update the doap file (John (J5) Palmieri)
+
+2.90.1 - 2011-08-14 (3.0 pre-release)
+-------------------------------------
+
+* pass exta keywords to the Box constructor (John (J5) Palmieri)
+* add (Tree|List)Store set method override (John (J5) Palmieri)
+* add test for object arrays (John (J5) Palmieri)
+* only support C pointer arrays for structs and objects (John (J5) Palmieri)
+* revert Gtk.Window override because it causes issues with subclasses (John (J5) Palmieri)
+* take GIL in _pygi_invoke_closure_free (bug :bzbug:`647016`) (Jonathan Matthew)
+* Add a default parameter to GtkTreeModel.filter_new (Johan Dahlin)
+* Add vbox/action_area properties (Johan Dahlin)
+* Add a couple of constructors (Johan Dahlin)
+* Do not always pass in user_data to callbacks. (Johan Dahlin)
+* Add a default detail value for Widget.render_icon (Johan Dahlin)
+* Add an override for Gdk.color_parse() (Johan Dahlin)
+* Support function calling with keyword arguments in invoke. (Laszlo Pandy)
+* remove references to deprecated GI_INFO_TYPE_ERROR_DOMAIN (John (J5) Palmieri)
+* Fix gobject vs. gi.repository warning (Martin Pitt)
+* make GObject and GLib able to take overrides (John (J5) Palmieri)
+* avoid dependency issue by importing the internal gobject (John (J5) Palmieri)
+* fix tests to use the new GLib module (John (J5) Palmieri)
+* add DynamicGLibModule which works like DynamicGObjectModule (John (J5) Palmieri)
+* refactor, add objects and types to the correct internal module (John (J5) Palmieri)
+* rename the pyglib shared library so we don't load the old one (John (J5) Palmieri)
+* refactor tests to only use PyGObject 3 syntax (John (J5) Palmieri)
+* refactor the internal _glib module to import correct modules (John (J5) Palmieri)
+* refactor to use the new internal _glib and _gobject modules (John (J5) Palmieri)
+* refactor gi module to import and use internal _gobject module (John (J5) Palmieri)
+* move the static bits internal to gi and refactor build files (John (J5) Palmieri)
+* remove pygtk.py (John (J5) Palmieri)
+* introspection is no longer optional (John (J5) Palmieri)
+* up platform version to 3.0 (John (J5) Palmieri)
+* [gi] Handle GVariants from callback return values (Martin Pitt)
+* Handle GVariants for callback arguments (Martin Pitt)
+* [gi] Fix crash: check return value of _invoke_state_init_from_callable_cache() before continuing. (Laszlo Pandy)
+* [gi] Pass gtype as first parameter to vfuncs (instead of using kwargs). (Laszlo Pandy)
+* remove codegen (John (J5) Palmieri)
+* remove some left over ifdefs to complete merge of the invoke-rewrite branch (John (J5) Palmieri)
+* rename pygi-invoke-ng to pygi-invoke (John (J5) Palmieri)
+* make invoke-ng the only invoker (John (J5) Palmieri)
+* Merge branch 'master' into invoke-rewrite (John (J5) Palmieri)
+* Merge branch 'master' into invoke-rewrite (John (J5) Palmieri)
+* split the marshalling routines into two source files (John (J5) Palmieri)
+* Ship tests/te_ST@nouppera in release tarballs for tests to succeed (Martin Pitt)
+* [invoke] break out caller_allocates allocating into its own function (John (J5) Palmieri)
+* [invoke] missed a bit when removing constructor_class usage (John (J5) Palmieri)
+* [invoke] don't hold on to the constructor class, just add a TODO (John (J5) Palmieri)
+* [gi] Port test_properties from static gio to GI Gio (Martin Pitt)
+* [python3] Fix maketrans import (Martin Pitt)
+* [caching] remove all inline compiler flags (John (J5) Palmieri)
+* [caching] refactor function names to be less confusing (John (J5) Palmieri)
+* [overrides] deprecate the use of type keyword MessageDialog constructor (John (J5) Palmieri)
+* gdbus tests: Fix hang if test case fails (Martin Pitt)
+* use an enum instead of booleans to denote function type (John (J5) Palmieri)
+* rename aux arguments to child arguments to make their purpose clearer (John (J5) Palmieri)
+* Fixed the cairo example (Timo Vanwynsberghe)
+* Add override binding for Gtk.ListStore.prepend(). (Adam Dingle)
+* Fix crash in Gtk.TextIter overrides (Martin Pitt)
+* use gssize instead of int for arg indexes (John (J5) Palmieri)
+* [cache] remove refrence to default value as it is not implemented yet (John (J5) Palmieri)
+* Handle arguments that are flags correctly (Sebastian Pölsterl)
+* correctly initialize the _gi_cairo_functions array to be zero filled (John (J5) Palmieri)
+* correctly initialize the _gi_cairo_functions array to be zero filled (John (J5) Palmieri)
+* pass in the address of the gerror, not the gerror itself (John (J5) Palmieri)
+* [gi] handle marshalling gerrors arguments for signals (John (J5) Palmieri)
+* [gi-invoke-ng] fix NULL check to check before we access the cache struct (John (J5) Palmieri)
+* [gi-tests] add test for PyGObject->PyObject TreeModel storage (John (J5) Palmieri)
+* [gtk-overrides] special case TreeModel columns of PYGOBJECT types (John (J5) Palmieri)
+* [gi-invoke-ng] copy structs when transfer is full for array (John (J5) Palmieri)
+* [gtk-override] print warning if user imports Gtk 2.0 (John (J5) Palmieri)
+* [gtk-overrides] allow the message_type keyword to be used for MessageDialogs (John (J5) Palmieri)
+* Add support for enums in gobject.property (Johan Dahlin)
+* Add support for enums in gobject.property (Johan Dahlin)
+* [gi-invoke-ng] use g_slice for allocating GValues that are caller allocated (John (J5) Palmieri)
+* [gi-invoke-ng] Convert Overflow errors to ValueErrors when marshalling integers (John (J5) Palmieri)
+* [gi-invoke-ng] only cache caller allocates for interfaces as some API are broken (John (J5) Palmieri)
+* [gi-invoke-ng] handle in pointer array marshalling (John (J5) Palmieri)
+* Adding GPtrArray tests (Alex Eftimie)
+* [gi-invoke-ng] fix array element offset calculations (John (J5) Palmieri)
+* [gi] don't clean up arguments that weren't yet processed during in arg failure (John (J5) Palmieri)
+* [gi-overrides] use new instead of init when constructing a GLib.VariantBuilder (John (J5) Palmieri)
+* [gi-invoke-ng] actual code to import overrides (John (J5) Palmieri)
+* [gi-invoke-ng] import pytypes so we get overrides (John (J5) Palmieri)
+* [gi-invoke-ng] handle gvariants now that they are not foreign (John (J5) Palmieri)
+* [gi-invoke-ng] do not try to clean up NULL arguments (John (J5) Palmieri)
+* Merge branch 'master' into invoke-rewrite (John (J5) Palmieri)
+* Merge branch 'master' into invoke-rewrite (John (J5) Palmieri)
+* closure: avoid double free crash (Ignacio Casal Quinteiro)
+* Added __eq__ method for Gdk.Color and Gdk.RGBA (Jason Siefken)
+* closure: Check the out arg is not null. Fixes bug :bzbug:`651812` (Ignacio Casal Quinteiro)
+* Use constants instead of literals (Tomeu Vizoso)
+* GVariant has now a GType, take that into account (Tomeu Vizoso)
+* GVariantType is a boxed struct (Tomeu Vizoso)
+* Use _gi.Struct to wrap fundamentals (Tomeu Vizoso)
+* Merge gi/HACKING into /HACKING (Tomeu Vizoso)
+* Fix GC-related crash during PyGObject deallocation (Daniel Drake)
+* [gi-invoke-ng] enable invoke-ng by default (John (J5) Palmieri)
+* [gi-invoke-ng] add code to clean up when input values fail to marshal (John (J5) Palmieri)
+* [gi-invoke-ng] add hash cleanup routines (John (J5) Palmieri)
+* [gi-invoke-ng] handle arrays with transfers of GI_TRANSFER_CONTAINER (John (J5) Palmieri)
+* [gi-invoke-ng] add list cleanup routines (John (J5) Palmieri)
+* indentation fix (John (J5) Palmieri)
+* [gi-invoke-ng] add out array cleanup (John (J5) Palmieri)
+* [gi-invoke-ng] do not allocate null terminator for garray (John (J5) Palmieri)
+* [gi-invoke-ng] add array cleanup for in arrays (John (J5) Palmieri)
+* [gi-invoke-ng] remove remaining bits of the invoke stage state machine (John (J5) Palmieri)
+* [gi-invoke-ng] revamp cleanup framework to be orthogonal to cache setup (John (J5) Palmieri)
+* [gi-invoke-ng] stub out a cleaner way of cleaning up after ourselves (John (J5) Palmieri)
+* Doc Extractor: Correct the logic of the --no-since option. (José Alburquerque)
+* Doc Extractor: Add a --no-since option. (José Alburquerque)
+* [gi-invoke-ng] tweek cleanup routines (John (J5) Palmieri)
+* Fix symbol names to be locale independent (Martin Pitt)
+* [gi] pygi-convert.sh: Convert gtk.gdk.CROSSHAIR (Martin Pitt)
+* [gi-invoke-ng] handle filename cleanup with the utf8 cleanup function (John (J5) Palmieri)
+* [gi-invoke-ng] handle caller allocates cleanup (John (J5) Palmieri)
+* [gi-invoke-ng] refactor the cleanup code and add utf8 cleanup as initial test (John (J5) Palmieri)
+* use PyCapsule when importing pycairo/require pycairo 1.10.0 for python3 builds (John (J5) Palmieri)
+* [python3] fix build. PYcairo_IMPORT doesn't exists anymore (Ignacio Casal Quinteiro)
+* Updated DOAP file (Sebastian Pölsterl)
+* [gi] Don't create variant twice (Sebastian Pölsterl)
+* pygi-convert.sh: Make sure the uppercase GObject module is imported instead of the lowercase (Sebastian Pölsterl)
+* [gi] Removed hack to avoid using GLib.Variant.new_variant. (Sebastian Pölsterl)
+* [gi] Added additional test case for GVariant handling (Sebastian Pölsterl)
+* [gi] Added support for GVariant arguments (Sebastian Pölsterl)
+* fix static ABI for setting string gvalues from python objects (John (J5) Palmieri)
+* dsextras.py: ensure eol characters are preserved when writing template files (so \n does not become \r\n) (Dieter Verfaillie)
+* dsextras.py: remove \r as wel as \n character (Dieter Verfaillie)
+* use PyCapsule when importing pycairo/require pycairo 1.10.0 for python3 builds (John (J5) Palmieri)
+* [python3] fix build. PYcairo_IMPORT doesn't exists anymore (Ignacio Casal Quinteiro)
+* Updated DOAP file (Sebastian Pölsterl)
+* [gi] Don't create variant twice (Sebastian Pölsterl)
+* pygi-convert.sh: Make sure the uppercase GObject module is imported instead of the lowercase (Sebastian Pölsterl)
+* [gi] Removed hack to avoid using GLib.Variant.new_variant. (Sebastian Pölsterl)
+* [gi] Added additional test case for GVariant handling (Sebastian Pölsterl)
+* [gi-invoke-ng] fix prototype (John (J5) Palmieri)
+* [gi-invoke-ng] create new framework for cleaning up args (John (J5) Palmieri)
+* [gi] Added support for GVariant arguments (Sebastian Pölsterl)
+* [gi-invoke-ng] fix marshal header that is no longer part of pygi-arguments.h (John (J5) Palmieri)
+* [gi-invoke-ng] code style space fixes (John (J5) Palmieri)
+* [gi-invoke-ng] don't decref value taken from a dict as it is borrowed (John (J5) Palmieri)
+* [gi-invoke-ng] return None when appropriate so we don't crash (John (J5) Palmieri)
+* [gi-invoke-ng] fix aux value caching (John (J5) Palmieri)
+* [gi-invoke-ng] backport handling flags with no gtype (John (J5) Palmieri)
+* [gi-invoke-ng] backport raw gvalue handling (John (J5) Palmieri)
+* [gi-invoke-ng] marshal instances seperately since they differ slightly from other args (John (J5) Palmieri)
+* [gi-invoke-ng] refactor FunctionCache to be more generic CallableCache (John (J5) Palmieri)
+* [gi-invoke-rewrite] backport glib error handling (John (J5) Palmieri)
+* [gi-invoke-ng] backport closure passing from invoke (John (J5) Palmieri)
+* [gi-invoke-ng] handle vfuncs and fix cosntrutors (John (J5) Palmieri)
+* [gi-invoke-ng] handle foreign types correctly (John (J5) Palmieri)
+* [gi] remove the class parameter from the argument list of constructors (John (J5) Palmieri)
+* fix static ABI for setting string gvalues from python objects (John (J5) Palmieri)
+* dsextras.py: ensure eol characters are preserved when writing template files (so \n does not become \r\n) (Dieter Verfaillie)
+* dsextras.py: remove \r as wel as \n character (Dieter Verfaillie)
+* [gi] make new invoke-ng codepath compile correctly (John (J5) Palmieri)
+* [gi] conditionalize invoke code paths (John (J5) Palmieri)
+* [gi] revert back to the type.py from master (John (J5) Palmieri)
+* [gi] revert pygi-argument.h and move the invoke-ng code to pygi-marshal.h (John (J5) Palmieri)
+* Merge branch 'master' into invoke-rewrite (John (J5) Palmieri)
+* [gi] foreign types now take interface infos instead of type infos (John (J5) Palmieri)
+* Fix GSchema tests for separate build tree (Martin Pitt)
+* [gi] start of merge from master (John (J5) Palmieri)
+* [gi] marshal raw closures (John (J5) Palmieri)
+* pygi-convert.sh add GObject.xxx and webkit (John Stowers)
+* pygi-convert.sh remove gobject tests, GObject works now (John Stowers)
+* [gi-demos] add pickers demo (John (J5) Palmieri)
+* [gi-demos] add menu demo (John (J5) Palmieri)
+* [gi-overrides] fix exception block so it works in Python 2.5 (John (J5) Palmieri)
+* Revert "Deduce PYTHON_LIBS in addition to PYTHON_INCLUDES" (Martin Pitt)
+* setup.py: fix user_access_control option (Dieter Verfaillie)
+* [gi] Respect the MessageType for Gtk.MessageDialog (Martin Pitt)
+* [gi] Do not require signature for D-BUS methods without arguments (Martin Pitt)
+* [gi-overrides] TreeViewColumn.set_cell_data_func func_data can be None (John Stowers)
+* [gi-demos] dont try and run demos that represent directories (John Stowers)
+* [gi-demos] some python 3 compat fixes (John (J5) Palmieri)
+* [gi-demos] add liststore demo (John (J5) Palmieri)
+* [gi-demos] catch the correct error class (John (J5) Palmieri)
+* Do not leak python references when using the gobject.property() helper. (Steve Frécinaux)
+* handle uchar as bytes, not strings in python 3 (John (J5) Palmieri)
+* [gi-overrides] handle unichar gvalues when setting treemodels (John (J5) Palmieri)
+* [gi-overrides] special case python 2 keywords that crept in (John (J5) Palmieri)
+* check for the py3 _thread module in configure.ac if thread is not found (John (J5) Palmieri)
+* [gi-demos] add iconview demo (John (J5) Palmieri)
+* [gi] wrap the keyword argument in a dict so we don't break Python 2.5 (John (J5) Palmieri)
+* [gi-demos] add the combobox with string ids section to the demos (John (J5) Palmieri)
+* [gi-overrides] add an override for Gdk.RGBA (John (J5) Palmieri)
+* [gi-demos] fix up search-entry to reflect annotations fixed in Gtk+ master (John (J5) Palmieri)
+* [gi-demos] add search entry demo (John (J5) Palmieri)
+* [gi] wrap map in a list for Python 3 compat (John (J5) Palmieri)
+* [gi-demos] fix up the validation combobox (John (J5) Palmieri)
+* add overridesdir variable in the .pc file for 3rd party overrides (John (J5) Palmieri)
+* setup.py: Set bdist_wininst user-access-control property (Dieter Verfaillie)
+* Fix uninitialized variable in gi.require_version() (Martin Pitt)
+* Run tests with LC_MESSAGES="C" (Martin Pitt)
+* [gi-overrides] override Gtk.stock_lookup to not return success (John (J5) Palmieri)
+
+2.28.6 - 2011-06-11
+-------------------
+
+* closure: avoid double free crash (Ignacio Casal Quinteiro)
+* [gi] backport of "GVariant has a GType" fe386a (John (J5) Palmieri)
+* [gi] fixes to backport commit 6b5a65 - in older glib GVariants are still structs (John (J5) Palmieri)
+* GVariantType is a boxed struct (Tomeu Vizoso)
+* Use _gi.Struct to wrap fundamentals (Tomeu Vizoso)
+* Added __eq__ method for Gdk.Color and Gdk.RGBA (Jason Siefken)
+* Remove useless import (Ignacio Casal Quinteiro)
+* Revert "[gi] Removed hack to avoid using GLib.Variant.new_variant." (Ignacio Casal Quinteiro)
+* closure: Check the out arg is not null. Fixes bug :bzbug:`651812` (Ignacio Casal Quinteiro)
+* Fix GC-related crash during PyGObject deallocation (Daniel Drake)
+* Fix symbol names to be locale independent (Martin Pitt)
+* Updated DOAP file (Sebastian Pölsterl)
+
+2.28.4 - 2011-04-18
+-------------------
+
+* Version bump to 2.24.4 (Sebastian Pölsterl)
+* [gi] Don't create variant twice (Sebastian Pölsterl)
+* pygi-convert.sh: Make sure the uppercase GObject module is imported instead of the lowercase (Sebastian Pölsterl)
+* [gi] Removed hack to avoid using GLib.Variant.new_variant. (Sebastian Pölsterl)
+* [gi] Added additional test case for GVariant handling (Sebastian Pölsterl)
+* [gi] Added support for GVariant arguments (Sebastian Pölsterl)
+* Fix ABI break in old static bindings. (Steve Frécinaux)
+* fetch size from an enum type (Mike Gorse)
+* dsextras.py: ensure eol characters are preserved when writing template files (so \n does not become \r\n) (Dieter Verfaillie)
+
+2.28.3 - 2011-03-23
+-------------------
+
+* fix a typo when converting objects to strings gvalues (John (J5) Palmieri)
+
+2.28.2 - 2011-03-22
+-------------------
+
+* fix static ABI for setting string gvalues from python objects (John (J5) Palmieri)
+* Fix GSchema tests for separate build tree (Martin Pitt)
+* GIO tests: Fix remaining test case for separate build tree (Martin Pit
+* GIO tests: Fix for separate build tree (Martin Pitt)
+
+2.28.1 - 2011-03-21
+-------------------
+
+* pygi-convert.sh remove gobject tests, GObject works now (John Stowers)
+* pygi-convert.sh add GObject.xxx and webkit (John Stowers)
+* [gi] marshal raw closures (John (J5) Palmieri)
+* Revert "Deduce PYTHON_LIBS in addition to PYTHON_INCLUDES" (Martin Pitt)
+* setup.py: fix user_access_control option (Dieter Verfaillie)
+* [gi-overrides] fix marshalling pygobjects in treemodels (John (J5) Palmieri)
+* [gi] Respect the MessageType for Gtk.MessageDialog (Martin Pitt)
+* [gi] Do not require signature for D-BUS methods without arguments (Martin Pitt)
+* [gi-demos] add pickers demo (John (J5) Palmieri)
+* [gi-demos] add menu demo (John (J5) Palmieri)
+* [gi-overrides] TreeViewColumn.set_cell_data_func func_data can be None
+* [gi-demos] dont try and run demos that represent directories (John Stowers)
+* [gi-overrides] fix exception block so it works in Python 2.5 (John (J5) Palmieri)
+
+2.28.0 - 2011-03-08
+-------------------
+
+* [gi-demos] some python 3 compat fixes (John (J5) Palmieri)
+* [gi-demos] catch the correct error class (John (J5) Palmieri)
+* Try not to sink objects returned by C functions. (Steve Frécinaux)
+* Do not leak python references when using the gobject.property() helper. (Steve Frécinaux)
+* [gi] fix try except blocks so they work in Python 2.5 (John (J5) Palmieri)
+* handle uchar as bytes, not strings in python 3 (John (J5) Palmieri)
+* [gi-overrides] handle unichar gvalues when setting treemodels (John (J5) Palmieri)
+* [gi-overrides] special case python 2 keywords that crept in (John (J5) Palmieri)
+* check for the py3 _thread module in configure.ac if thread is not found (John (J5) Palmieri)
+* [gi-demos] add iconview demo (John (J5) Palmieri)
+* [gi] wrap the keyword argument in a dict so we don't break Python 2.5 (John (J5) Palmieri)
+* [gi-demos] add the combobox with string ids section to the demos (John (J5) Palmieri)
+* [gi-overrides] add an override for Gdk.RGBA (John (J5) Palmieri)
+* [gi-demos] fix up search-entry to reflect annotations fixed in Gtk+ master (John (J5) Palmieri)
+* [gi-demos] add search entry demo (John (J5) Palmieri)
+* [gi] wrap map in a list for Python 3 compat (John (J5) Palmieri)
+* [gi-demos] fix up the validation combobox (John (J5) Palmieri)
+* add overridesdir variable in the .pc file for 3rd party overrides (John (J5) Palmieri)
+* [gi] remove unref for closures since they are floating objects that get sunk (John (J5) Palmieri)
+* setup.py: Set bdist_wininst user-access-control property (Dieter Verfaillie)
+* Fix uninitialized variable in gi.require_version() (Martin Pitt)
+* Run tests with LC_MESSAGES="C" (Martin Pitt)
+* [gi-overrides] override Gtk.stock_lookup to not return success (John (J5) Palmieri)
+
+2.27.91 - 2011-02-28 (2.28 pre-release)
+---------------------------------------
+
+* [gi-tests] use Gdk.test_simulate_button instead of emitting event ourselves (John (J5) Palmieri)
+* [gi-tests] tests for EventButton override. (Laszlo Pandy)
+* Skip interfaces when checking for conflicts in the MRO (Tomeu Vizoso)
+* [gi-overrides] Add event methods to all event union members (John (J5) Palmieri)
+* [gi] check to see if object is a member of a union when validating paramaters (John (J5) Palmieri)
+* [gi] Remove DyanmicModule.load() to _load() to prevent overriding GI attrs. (Laszlo Pandy)
+* Test case with John's fix for crash with C arrays and a GError is set. (Laszlo Pandy)
+* [gi-overrides] fix setting rows in treeview to accept None as a value (John (J5) Palmieri)
+* [gi] Add value_name for enum and flags from introspection "c:identifier" (if attr is available). (Laszlo Pandy)
+* Don't force loading of DynamicModule until set in sys.modules (Laszlo Pandy)
+* Fix flags with multiple names for the same value. (Laszlo Pandy)
+* [gi-demos] add liststore demo (John (J5) Palmieri)
+* [gi-demos] run through the demos and remove the FIXMEs that have been fixed (John (J5) Palmieri)
+* Load typelibs at import time, add gi.require_version() (Tomeu Vizoso)
+* use GValue support to marshal GtkTreeModel values correctly (John (J5) Palmieri)
+* [gi] pass raw GValues instead of trying to marshal them (John (J5) Palmieri)
+* [gi-demos] add icon view edit and drag-and-drop demo (John (J5) Palmieri)
+* [gi] Register GType for non-GType enums and flags at runtime. (Laszlo Pandy)
+* [gi-demos] add info bars demo (John (J5) Palmieri)
+* tests/runtests.py: Add missing "import sys" (Martin Pitt)
+* [gi] Add Pythonic gdbus method invocation (Martin Pitt)
+* Skip GError out parameters in Python closure. (Laszlo Pandy)
+* [gi-demos] added rotate text demo (John (J5) Palmieri)
+* [gi-demos] add images demo (John (J5) Palmieri)
+* [gi-demos] add pixbuf demo (John (J5) Palmieri)
+* [gi-demos] remove fixmes from print demo, fixed in pango (John (J5) Palmieri)
+* [gi-demos] add printing demo (John (J5) Palmieri)
+* [gi-overrides] add cursor overrides (John (J5) Palmieri)
+* [gi-demos] add the links demo (John (J5) Palmieri)
+* [gi-demos] add expander demo (John (J5) Palmieri)
+* [gi-overrides] use pop instead of del and add extra tests for Gtk.Table kwargs (John (J5) Palmieri)
+* [tests] Separate processes for GI and static binding tests. (Laszlo Pandy)
+* [GI] Remove implicit loading of gi module preserve the code path for static bindings. (Laszlo Pandy)
+* [gi-demos] add dialogs demo (John (J5) Palmieri)
+* [gi-overrides] fix typo in GtkTable constructor (John (J5) Palmieri)
+* [gi-demos] keep popup menu from destroying itself by holding a ref in app class (John (J5) Palmieri)
+* [gi-overrides] add a Gtk.Menu override for the popup method (John (J5) Palmieri)
+* [gi-demos] fix the about dialog in appwindow demo (John (J5) Palmieri)
+* [gi-demos] fix clipboard demo so DnD works (John (J5) Palmieri)
+* [gi-demos] fix clipboard demo to reflect new API (John (J5) Palmieri)
+* [gi-demo] Fix color dialog demo to run with new draw, style and color apis (John (J5) Palmieri)
+* [gi-demos] fix most of the combobox app (John (J5) Palmieri)
+* Use PyGI type conversion (to fix foreign types) for signal callbacks. (Laszlo Pandy)
+* [gi-demos] fix drawingarea app to use the new draw api (John (J5) Palmieri)
+* [gi-overrides] for Gtk 3 alias Gdk.Rectangle to cairo.RectangleInt (John (J5) Palmieri)
+* [gi-overrides] let user set the proper property names in Gtk.Table (John (J5) Palmieri)
+* [gi-demos] get appwindow demo working again (John (J5) Palmieri)
+* [gi-demos] fixed use of tree_iter_get (John (J5) Palmieri)
+
+2.27.90 - 2011-02-11 (2.28 pre-release)
+---------------------------------------
+
+* fix build to correctly use python-config (John (J5) Palmieri)
+* Run gio tests separately when enabled (Martin Pitt)
+* Revert "Remove gio static bindings" (Martin Pitt)
+* Decrease the refcount for GInitiallyUnowned constructors. (Steve Frécinaux)
+* Ensure the sink functions are only ran once. (Steve Frécinaux)
+* Revert "Fix wrong refcount when calling introspected widget constructors" (Steve Frécinaux)
+* Revert "Fix reference leaks for GInitiallyUnowned objects" (Steve Frécinaux)
+* Run test suite under dbus-launch (Martin Pitt)
+* Fix test_gdbus.py to be Python3 friendly (Martin Pitt)
+* [gi] Provide comfortable GSettings API (Martin Pitt)
+* Fix vfunc search bug when using GInterfaces and a do_* method. (Laszlo Pandy)
+* [GI] Add tests for Gtk.Widget.drag_* methods. (Laszlo Pandy)
+* [python 3] use the right syntaxis to raise exceptions (Ignacio Casal Quinteiro)
+* [gi] return PYGLIB_MODULE_ERROR_RETURN on error and use pygobject_init (Ignacio Casal Quinteiro)
+* [gi] return PYGLIB_MODULE_ERROR_RETURN on error (Ignacio Casal Quinteiro)
+* Fix wrong refcount when calling introspected widget constructors (Steve Frécinaux)
+* Gdk.Window: Map the standard constructor to the *new* constructor (Simon Schampijer)
+* Ship tests/org.gnome.test.gschema.xml in dist tarballs (Martin Pitt)
+* [gi] Add GSettings tests (Martin Pitt)
+* [gi] Provide GtkTextBuffer.insert_with_tags_by_name() (Martin Pitt)
+* [gi] Support tag names in GtkTextBuffer.insert_with_tags() (Martin Pitt)
+* Add MAINTAINERCLEANFILES (Ignacio Casal Quinteiro)
+* Remove .gitignore files and use git.mk (Ignacio Casal Quinteiro)
+* pygi-convert.sh: Convert Pango.TabAlign.* (Martin Pitt)
+* pygi-convert.sh: Drop window -> get_window() conversion (Martin Pitt)
+* pygi-convert.sh: Don't convert self.window assignments (Martin Pitt)
+* Fix leaked python reference in python-defined subclasses (Steve Frécinaux)
+* Add some tests for the number of python refs held at creation time (Steve Frécinaux)
+* Factor out parameter marshalling from construction functions. (Steve Frécinaux)
+* [gi] in python 3 an array of uint8 can be bytes but not string (John (J5) Palmieri)
+* [gi] fix Gio.FileEnumerator to reflect the Python 3 iter protocol (John (J5) Palmieri)
+* [gi] python 3 fixes (John (J5) Palmieri)
+* [gi] fix try/except blocks using depricated raise format (John (J5) Palmieri)
+* [gi] Add docstring to GLib.Variant constructor (Martin Pitt)
+* [gi] update gdbus test cases for previous GVariant change (Martin Pitt)
+* [gi] Accept only a single object in GLib.Variant constructor (Martin Pitt)
+* Speed up _setup_native_vfuncs() (Laszlo Pandy)
+* Speed up class creation: rewrite _setup_vfuncs() to be much more efficient. (Laszlo Pandy)
+* pygi-convert.sh: Convert gtk.UI_MANAGER_* (Sebastian Pölsterl)
+* pygi-convert.sh: Convert gdk.GRAB_* (Sebastian Pölsterl)
+* [gi] set the gtype GValue correctly (Ignacio Casal Quinteiro)
+* [gi] use the right argument type for callback (Ignacio Casal Quinteiro)
+* [gi] Add test cases for GDBus client operations (Martin Pitt)
+* [gi] Add Variant construction/unpack support for boxed Variants (Martin Pitt)
+* Merge branch 'windows-setup-fixes' (Dieter Verfaillie)
+* pygi-convert.sh: GdkPixbuf methods (Thomas Hindoe Paaboel Andersen)
+* pygi-convert.sh: Gdk.COLORSPACE_RGB (Thomas Hindoe Paaboel Andersen)
+* [gi] Support nested objects and empty sequences in GLib.Variant building (Martin Pitt)
+* Uncomment test_gi.TestInterfaceClash (Tomeu Vizoso)
+* Fix reference leaks for GInitiallyUnowned objects (Steve Frécinaux)
+* Add tests for refcount of a GObject owned by a library (Steve Frécinaux)
+* Add a test to check for regular object reference count (Steve Frécinaux)
+* [gi] Update TreeView.enable_model_drag_{source,dest} to current GTK (Martin Pitt)
+* Fix a typo in a private symbol name. (Steve Frécinaux)
+* pygi-convert.sh: Convert glib.source_remove() (Martin Pitt)
+* Fix typo in previous commit to actually convert glib.GError (Martin Pitt)
+* pygi-convert.sh: Move some glib bits which are better handled by gobject (Martin Pitt)
+* Modify override for Gtk.Adjustment to allow position or keyword arguments in __init__(). (Laszlo Pandy)
+* [gi] Fix small typo in previous commit (Martin Pitt)
+* [gi] Add pythonic iterator and indexing for string GVariants (Martin Pitt)
+* Construct structs using default API constructor (Tomeu Vizoso)
+* pygi-convert.sh: Migrate Gdk.Cursor constructor, and some cursor names (Martin Pitt)
+* pygi-convert.sh: Handle .window attributes (Martin Pitt)
+* Also deal with foreign boxed structs (Tomeu Vizoso)
+* [gi] Convert GErrors to GObject.GError exceptions, and throw them upon returning from calling the C function. (Laszlo Pandy)
+* pygi-convert.sh: Don't convert glib -> GLib for now (Martin Pitt)
+* Link libregress.so to GIO_LIBS again (Tomeu Vizoso)
+* Fix attributes 2BUTTON_PRESS and 3BUTTON_PRESS of Gdk.EventType. (Laszlo Pandy)
+* [gi] Fixed typo in exception (Sebastian Pölsterl)
+* [gi] Enable handling of Gdk.EventType.2BUTTON_PRESS and 3BUTTON_PRESS (Sebastian Pölsterl)
+* Revert "Fix Pango FontDescription override" (Martin Pitt)
+* Python iterator interface support for GFileEnumerator. (Tony Young)
+* Remove gio static bindings (Tomeu Vizoso)
+* [gi] set length when marshalling guint8 erases (Ignacio Casal Quinteiro)
+* Convert Gdk.Pixbuf to GdkPixbuf.Pixbuf (Sebastian Pölsterl)
+* Disable calls to PyGILState_* when threads are disabled (Arnaud Charlet)
+* pygi-convert.sh: Do not comment out set_cell_data_func() calls; these should be ported properly (Martin Pitt)
+* pygi-convert.sh: Fix match for adding missing imports (Martin Pitt)
+* pygi-convert.sh: Fix Gtk.Label handling to be idempotent (Martin Pitt)
+* Remove trailing whitespace from gi/overrides/Gtk.py (Laszlo Pandy)
+* Fix Pango FontDescription override (Martin Pitt)
+* tests: Respect existing $GI_TYPELIB_PATH (Martin Pitt)
+* Merge branch 'value' (Sebastian Pölsterl)
+* GTK overrides: Do type conversion to column types of ListStore and TreeStore in set_value (Sebastian Pölsterl)
+* Always register a new GType when a GObject class is subclassed (Steve Frécinaux)
+* Raise required versions of GLib and GObject-Introspection (Simon van der Linden)
+* pygi-convert.sh: Handle keysyms (Martin Pitt)
+* GLib overrides: Add test case for array variant building (Martin Pitt)
+* Remove cairo.RectangleInt from the foreign module (Tomeu Vizoso)
+* Dont try to guess the transfer if its a boxed (Tomeu Vizoso)
+* The tags can be Empty not None. (Ignacio Casal Quinteiro)
+* Add Pythonic iterators and indexing to GVariant (Martin Pitt)
+* Add GLib.Variant.unpack() (Martin Pitt)
+* Add override for gtk_text_buffer_insert_with_tags (Ignacio Casal Quinteiro)
+* Deduce PYTHON_LIBS in addition to PYTHON_INCLUDES (Simon van der Linden)
+* Kill JD_CHECK_PYTHON_HEADERS (Simon van der Linden)
+* Revert "Override Gtk.Box.pack_start and pack_end to set default values to be compliant with pygtk" (Sebastian Pölsterl)
+* Revert "Override Gtk.CellLayout.pack_start and pack_end to add default values to be compliant with pygtk" (Sebastian Pölsterl)
+* Revert "Override Gtk.TreeViewColumn.pack_start, pack_end and set_cell_data_func to add default values to be compliant with pygtk" (Sebastian Pölsterl)
+* pygi-convert.sh: Handle gtk.combo_box_new_text() (Martin Pitt)
+* Override TreeSortable.set_sort_func and set_default_sort_func to add default values to be pygtk compliant (Sebastian Pölsterl)
+* Override Gtk.TreeViewColumn.pack_start, pack_end and set_cell_data_func to add default values to be compliant with pygtk (Sebastian Pölsterl)
+* Override Gtk.CellLayout.pack_start and pack_end to add default values to be compliant with pygtk (Sebastian Pölsterl)
+* Override Gtk.Paned pack1 and pack2 to add default values to be compliant with pygtk (Sebastian Pölsterl)
+* Override Gtk.Box.pack_start and pack_end to set default values to be compliant with pygtk (Sebastian Pölsterl)
+* Handle GObject subclasses in the property helper. (Steve Frécinaux)
+* Fix handling of unicode for GtkTreeModels (Martin Pitt)
+* In IntrospectionModule and DynamicModule classes, make all instance attributes start with an underscore. (Laszlo Pandy)
+* Amend previous enum wrapping commit to remove redundant setting of __info__ attribute. (Laszlo Pandy)
+* pygi-convert.sh: Handle GdkPixbuf.InterpType (Martin Pitt)
+* Fix wrapping of enums: Create new Python type for each non-gtype enum. (Laszlo Pandy)
+* Use g_vfunc_info_invoke for chaining up in vfuncs (Tomeu Vizoso)
+* Move pyglib_{main_context, option_context, option_group}_new into _PyGLib_API (Simon van der Linden)
+* pygi-convert.sh: Handle Gdk.DragAction (Martin Pitt)
+* pygi-convert.sh: Generalize Gtk.Settings migration (Martin Pitt)
+* pygi-convert.sh: Don't change the name of "glib" submodules (Martin Pitt)
+* Plug another memory leak (Paolo Borelli)
+* Plug a small memory leak. (Paolo Borelli)
+* Override Table.attach() to behave like pygtk (Paolo Borelli)
+* pygi-convert.sh: Convert Pango.WrapMode (Martin Pitt)
+* pygi-convert.sh: Don't change the name of "gtk" submodules (Martin Pitt)
+* Fix the __dir__() methods on DynamicModule and IntrospectionModule (Laszlo Pandy)
+* pygi-convert.sh: handle ReliefStyle (Paolo Borelli)
+* setup.py: fix the provides keyword argument (Dieter Verfaillie)
+* setup.py: use the same spaces-less format for all setup() parameters (Dieter Verfaillie)
+* Add a __repr__() method to DynamicModule. (Laszlo Pandy)
+* Go back to using getattr() in DynamicModule.__getattr__ (Tomeu Vizoso)
+* Change __dir__() to report all the attributes that __getattr__ supports (Laszlo Pandy)
+* Bump the minimum gio dependency (Emilio Pozuelo Monfort)
+* Add test for incorrect attributes in Gdk.Event (Tomeu Vizoso)
+* Don't call getattr again in gi.overrides.Gdk.Event.__getattr__ (Simon van der Linden)
+* Release allocated array of arguments when handling closures (Mike Gorse)
+* Release GIValueInfo when checking an enum argument (Mike Gorse)
+* Respect different type lengths when assigning out-argument pointers. (Eitan Isaacson)
+* Fix stupid name clash (Tomeu Vizoso)
+* Add /usr/share to XDG_DATA_DIRS when running the tests (Tomeu Vizoso)
+* Comment out tests that require SRV lookups (Tomeu Vizoso)
+* Use suppresion file when running valgrind (Tomeu Vizoso)
+* Fix warnings. (Ignacio Casal Quinteiro)
+* Allow comparing Gtk.TreePath to None (Jesse van den Kieboom)
+* handle unicode objects in properties (John (J5) Palmieri)
+* dsextras.py: check if gcc is there when platform is win32 and compiler is mingw32 (Dieter Verfaillie)
+* dsextras.py: be consistent in how distutils imports are done (Dieter Verfaillie)
+* dsextras.py: add have_gcc() function (Dieter Verfaillie)
+* dsextras.py: use distutils.spawn.find_executable for have_pkgconfig() (Dieter Verfaillie)
+* setup.py: fix another case of use True/False instead of 1/0 (Dieter Verfaillie)
+* pygi-convert.sh: improve GtkSourceView conversion (Paolo Borelli)
+* pygi-convert.sh: Gtk.DialogFlags conversion (Paolo Borelli)
+*       Doc Extractor: Print the gtk-doc blocks sorted by function name. (José Alburquerque)
+* pygi-convert.sh: add more Gtk conversions and sort (Paolo Borelli)
+* pygi-convert.sh: convert Atk (Paolo Borelli)
+* pygi-convert.sh: convert a few more Gio types (Paolo Borelli)
+* pygi-convert.sh: more GLib conversion (Paolo Borelli)
+* pygi-convert.sh: remove two cases handled by overrides (Paolo Borelli)
+* Override Gtk.ScrolledWindow constructor (Paolo Borelli)
+* pygi-convert.sh: Fix 'find' syntax (Paolo Borelli)
+* pygi-convert.sh: start handling Gio and GLib (Paolo Borelli)
+* pygi-convert.sh: convert Gdk.ScrollDirection. (Paolo Borelli)
+* Override Pango.Layout constructor. (Paolo Borelli)
+* Remove Pango.FontDescription() conversion. (Paolo Borelli)
+* Override GtkAction and GtkRadioAction constructors. (Paolo Borelli)
+* Override Adjustment constructor to behave like pygtk (Dmitrijs Ledkovs)
+* add secondary_text apis to MessageDialog (John (J5) Palmieri)
+* [gi] get rid of some debug prints and fix error messages (John (J5) Palmieri)
+* Fix demo for override changes. (Paolo Borelli)
+* Override Pango.FontDescription. (Paolo Borelli)
+* Stop checking that all vfuncs are implemented (Tomeu Vizoso)
+* Fix usage of TreeIter api that is now an override. (Paolo Borelli)
+* Fix Gtk.Label(label="Foo") (Paolo Borelli)
+* Fix typo when raising an exception (Paolo Borelli)
+* pygi-convert.sh: Added more conversions (Sebastian Pölsterl)
+* Override LinkButton constructor to make 'uri' mandatory (Paolo Borelli)
+* Container should be iterable. (Dmitry Morozov)
+* No need to import Gdk (Paolo Borelli)
+* Remove semicolumns (Paolo Borelli)
+* [gi] make sure Gtk.Button override passes all keywords to parent constructor (John (J5) Palmieri)
+* Fix cut&paste error in the Label override (Paolo Borelli)
+* pygi-convert.sh: handle TextWindowType (Paolo Borelli)
+* Override Label constructor to behave like pygtk (Paolo Borelli)
+* Override GtkTable constructor to behave like pygtk (Paolo Borelli)
+* pygi-convert.sh: convert MovementStep (Paolo Borelli)
+* Update Gdk overrides to work with latest Gtk+ 3 (Paolo Borelli)
+* Gtk: add an override for Gtk.main_quit (Johan Dahlin)
+* [gi] handle subtypes when inserting into tree models (John (J5) Palmieri)
+* Override TreeSelection.select_path and TreeView.scroll_to_cell (Paolo Borelli)
+* Override TreePath.__new__ (Paolo Borelli)
+* Override Container to behave like a sequence (Paolo Borelli)
+* refactor Jonathan Matthew recurse vfunc patch so it applys and clean up a bit (John (J5) Palmieri)
+* Recurse up through base classes when setting up vfuncs (Jonathan Matthew)
+* add a profiling torture test for when we fix up invoke (John (J5) Palmieri)
+* moved dynamic and base modules outside of gtk-2.0 directory (John (J5) Palmieri)
+* add test for inout argument count (John (J5) Palmieri)
+* [gi] add check for UNICHAR (John (J5) Palmieri)
+* Support gunichar (Paolo Borelli)
+* pygi-convert.sh: gtk.accel_map -> Gtk.AccelMap._ (Paolo Borelli)
+* pygi-convert.sh: handle "from gtk import gdk" (Paolo Borelli)
+* pygi-convert.sh: add some Pango special cases (Paolo Borelli)
+* Override TextIter (begins|ends|toggles)_tag() (Paolo Borelli)
+* Override TextBuffer.set_text() to make length optional (Paolo Borelli)
+* Override TextBuffer.create_mark() (Paolo Borelli)
+* Fix TextBuffer.get_selection_bounds() override (Paolo Borelli)
+* [gi] fix ActionGroup constructor to allow other keyword properties to be set (John (J5) Palmieri)
+* [gi] require the name parameter when creatin a Gtk.ActionGroup (John (J5) Palmieri)
+* Override UIManager.insert_action_group (Paolo Borelli)
+* Override TreeModel.get() to return a tuple (Paolo Borelli)
+* Make TreeSelection.get_selected_rows compatible with PyGtk (Paolo Borelli)
+* [gi] switch to using sequences/tuples when marshalling cairo_rectangle_int_t (John (J5) Palmieri)
+* [gi] overrides for treeview Drag and Drop (John (J5) Palmieri)
+* [gi] when encountering guint8 arrays treat them as byte arrays (John (J5) Palmieri)
+* pygi-convert.sh: Add pynotify -> Notify (Martin Pitt)
+* pygi-convert.sh: Remove sugar specifics, and allow command line file list (Martin Pitt)
+* pygi-convert.sh: Cover Message and Buttons types (Martin Pitt)
+* [gi] fix actiongroup test since actions are hashed (John (J5) Palmieri)
+* [gi] when converting to UTF-8 accept Python Unicode objects as input (Python 2) (John (J5) Palmieri)
+* Correct a bug in the freeing of memory in pygi-invoke.c. (Damien Caliste)
+* update news for release (John (J5) Palmieri)
+* Implement richcompare for GIBaseInfo (Jonathan Matthew)
+* [gi] add the rectangle_int_t forign cairo type (John (J5) Palmieri)
+* add a foreign type for cairo_rectangle_int_t and allow it to be caller-allocated (John (J5) Palmieri)
+* [gi] add overrides to Gtk.Editable (John (J5) Palmieri)
+* [gi] handle virtual invokers (John (J5) Palmieri)
+* add overrides for the insert* apis of list_store and tree_store (John (J5) Palmieri)
+* fix dialogs overrides which were relying on broken inheritance behavior (John (J5) Palmieri)
+* Add a overrides registry so we can refrence overrides inside the module (John (J5) Palmieri)
+* Merge remote branch 'dieterv/setup-fixes-for-merge' (John Stowers)
+* setup.py: ease maintenance burden for tests installation (Dieter Verfaillie)
+* fix inheritence issues in overrides (John (J5) Palmieri)
+* tests: add runtests-windows.py script (Dieter Verfaillie)
+* pygobject_postinstall.py: remove pygobject-2.0.pc treatment from postinstall as pkg-config on windows figures out the correct prefix at runtime (Dieter Verfaillie)
+* pygobject_postinstall.py: remove shortcut creation (Dieter Verfaillie)
+* setup.py: formatting cleanup, makes things readable (Dieter Verfaillie)
+* setup.py: build and install tests (Dieter Verfaillie)
+* setup.py: install documentation when available on build system (Dieter Verfaillie)
+* setup.py: install pygobject-codegen script (Dieter Verfaillie)
+* setup.py: install fixxref.py script (Dieter Verfaillie)
+* setup.py: rearrange constants (Dieter Verfaillie)
+* setup.py: check python version and pkgconig availability before anything else (Dieter Verfaillie)
+* setup.py: simplify sys.platform != 'win32' detection and error reporting (Dieter Verfaillie)
+* setup.py: rearrange imports (Dieter Verfaillie)
+* README.win32: update build instructions (Dieter Verfaillie)
+* dsextras.py: formatting cleanup, makes things readable (Dieter Verfaillie)
+* dsextras.py: add ggc4 to MSVC compatible struct packing comment (Dieter Verfaillie)
+* dsextras.py: use the ``pkgc_`` functions instead of repeating pgk-config incantations all over the place (Dieter Verfaillie)
+* dsextras.py: add pkgc_get_version and pkgc_get_defs_dir functions (Dieter Verfaillie)
+* dsextras.py: PEP8: Comparisons to singletons like None should always be done with 'is' or 'is not', never the equality operators. (Dieter Verfaillie)
+* dsextras.py: use True/False instead of 1/0 (Dieter Verfaillie)
+* dsextras.py: rearrange imports (Dieter Verfaillie)
+* Add distutils generated build/dist directories and eclipse configuration files to .gitignore (Dieter Verfaillie)
+* [gi] add tests for calling dir on a dynamic module (John (J5) Palmieri)
+* [gi] dir() now works for modules (Deepankar Sharma)
+* Don't check the inner type when comparing gpointers (Simón Pena)
+* Release GIL when calling into C functions (John (J5) Palmieri)
+* _gi.Repository : Implement missing info bindings. (José Aliste)
+* include Python.h so that PY_VERSION_HEX gets defined (John (J5) Palmieri)
+* [gi] make overrides work for python 3.x protocols and alias for python 2.x (John (J5) Palmieri)
+* Override Gtk.Widget.translate_coordinates to not return success value (Sebastian Pölsterl)
+* Override Gtk.TreeViewColumn.cell_get_position to not return success value (Sebastian Pölsterl)
+* Override get_path_at_pos and get_dest_row_at_pos of Gtk.TreeView to not return success value (Sebastian Pölsterl)
+* Override Gtk.TreeSortable.get_sort_column_id to not return success value (Sebastian Pölsterl)
+* Override forward_search and backward_search of Gtk.TextIter to not return success value (Sebastian Pölsterl)
+* Override Gtk.TextBuffer.get_selection_bounds to not return success value (Sebastian Pölsterl)
+* Override Gtk.RecentInfo.get_application_info to not return success value (Sebastian Pölsterl)
+* Override Gtk.IMContext.get_surrounding to not return success value (Sebastian Pölsterl)
+* Override get_item_at_pos, get_visible_range, get_dest_item_at_pos of Gtk.IconView to not return success value (Sebastian Pölsterl)
+* Override Gtk.Container.get_focus_chain to not return success value (Sebastian Pölsterl)
+* Override Gtk.ComboBox.get_active_iter to not return success value (Sebastian Pölsterl)
+* [gi] make parameter check less strict when dealing with GValue params (John (J5) Palmieri)
+* Shortcut removal is not needed on post-uninstall (John Stowers)
+* Disable shortcut creation in windows installer (John Stowers)
+* overrides for all subclasses of dialog (John (J5) Palmieri)
+* Make TreeModel behave like in GTK-2.x (Sebastian Pölsterl)
+* Correctly build GIO on windows (John Stowers)
+* Require Python >= 2.6.0 for Windows build (John Stowers)
+* Fix depreciation warning in dsextras.py (John Stowers)
+* Fix build on windows (John Stowers)
+* Support for GCC4 in Windows distutils build - bug 626548 (Michael Culbertson)
+* Remove obsolete comments in dsextras.py (John Stowers)
+* Broken dsextras.py pkg-config check error message (John Stowers)
+* add compat functions for the deprecated PyCObject api (John (J5) Palmieri)
+* Add __path__ attributes. (Damien Caliste)
+* Override Gtk.TreeSelection.get_selected to not return success value. (Sebastian Pölsterl)
+* Make row optional in Gtk.TreeStore/ListStore.append override (Vincent Untz)
+* Revert "add compat functions for the deprecated PyCObject api" (John (J5) Palmieri)
+* return NULL instead of -1 which fixes crash when introspection is turned off (John (J5) Palmieri)
+* add compat functions for the deprecated PyCObject api (John (J5) Palmieri)
+* fix commit 7fe83108 which didn't use the compat functions for string handling (John (J5) Palmieri)
+* Python 3 fixes for dsextras and the python.m4 distribution files (John (J5) Palmieri)
+
+2.27.0 - 2010-11-10
+-------------------
+
+* Implement richcompare for GIBaseInfo (Jonathan Matthew)
+* [gi] add the rectangle_int_t forign cairo type (John (J5) Palmieri)
+* add a foreign type for cairo_rectangle_int_t and allow it to be caller-allocated (John (J5) Palmieri)
+* [gi] add overrides to Gtk.Editable (John (J5) Palmieri)
+* [gi] handle virtual invokers (John (J5) Palmieri)
+* add overrides for the insert* apis of list_store and tree_store (John (J5) Palmieri)
+* fix dialogs overrides which were relying on broken inheritance behavior (John (J5) Palmieri)
+* Add a overrides registry so we can refrence overrides inside the module (John (J5) Palmieri)
+* Merge remote branch 'dieterv/setup-fixes-for-merge' (John Stowers)
+* setup.py: ease maintenance burden for tests installation (Dieter Verfaillie)
+* fix inheritence issues in overrides (John (J5) Palmieri)
+* tests: add runtests-windows.py script (Dieter Verfaillie)
+* pygobject_postinstall.py: remove pygobject-2.0.pc treatment from postinstall as pkg-config on windows figures out the correct prefix at runtime (Dieter Verfaillie)
+* pygobject_postinstall.py: remove shortcut creation (Dieter Verfaillie)
+* setup.py: formatting cleanup, makes things readable (Dieter Verfaillie)
+* setup.py: build and install tests (Dieter Verfaillie)
+* setup.py: install documentation when available on build system (Dieter Verfaillie)
+* setup.py: install pygobject-codegen script (Dieter Verfaillie)
+* setup.py: install fixxref.py script (Dieter Verfaillie)
+* setup.py: rearrange constants (Dieter Verfaillie)
+* setup.py: check python version and pkgconig availability before anything else (Dieter Verfaillie)
+* setup.py: simplify sys.platform != 'win32' detection and error reporting (Dieter Verfaillie)
+* setup.py: rearrange imports (Dieter Verfaillie)
+* README.win32: update build instructions (Dieter Verfaillie)
+* dsextras.py: formatting cleanup, makes things readable (Dieter Verfaillie)
+* dsextras.py: add ggc4 to MSVC compatible struct packing comment (Dieter Verfaillie)
+* dsextras.py: use the ``pkgc_`` functions instead of repeating pgk-config incantations all over the place (Dieter Verfaillie)
+* dsextras.py: add pkgc_get_version and pkgc_get_defs_dir functions (Dieter Verfaillie)
+* dsextras.py: PEP8: Comparisons to singletons like None should always be done with 'is' or 'is not', never the equality operators. (Dieter Verfaillie)
+* dsextras.py: use True/False instead of 1/0 (Dieter Verfaillie)
+* dsextras.py: rearrange imports (Dieter Verfaillie)
+* Add distutils generated build/dist directories and eclipse configuration files to .gitignore (Dieter Verfaillie)
+* [gi] add tests for calling dir on a dynamic module (John (J5) Palmieri)
+* [gi] dir() now works for modules (Deepankar Sharma)
+* Don't check the inner type when comparing gpointers (Simón Pena)
+* Release GIL when calling into C functions (John (J5) Palmieri)
+* _gi.Repository : Implement missing info bindings. (José Aliste)
+* include Python.h so that PY_VERSION_HEX gets defined (John (J5) Palmieri)
+* [gi] make overrides work for python 3.x protocols and alias for python 2.x (John (J5) Palmieri)
+* Override Gtk.Widget.translate_coordinates to not return success value (Sebastian Pölsterl)
+* Override Gtk.TreeViewColumn.cell_get_position to not return success value (Sebastian Pölsterl)
+* Override get_path_at_pos and get_dest_row_at_pos of Gtk.TreeView to not return success value (Sebastian Pölsterl)
+* Override Gtk.TreeSortable.get_sort_column_id to not return success value (Sebastian Pölsterl)
+* Override forward_search and backward_search of Gtk.TextIter to not return success value (Sebastian Pölsterl)
+* Override Gtk.TextBuffer.get_selection_bounds to not return success value (Sebastian Pölsterl)
+* Override Gtk.RecentInfo.get_application_info to not return success value (Sebastian Pölsterl)
+* Override Gtk.IMContext.get_surrounding to not return success value (Sebastian Pölsterl)
+* Override get_item_at_pos, get_visible_range, get_dest_item_at_pos of Gtk.IconView to not return success value (Sebastian Pölsterl)
+* Override Gtk.Container.get_focus_chain to not return success value (Sebastian Pölsterl)
+* Override Gtk.ComboBox.get_active_iter to not return success value (Sebastian Pölsterl)
+* [gi] make parameter check less strict when dealing with GValue params (John (J5) Palmieri)
+* Shortcut removal is not needed on post-uninstall (John Stowers)
+* Disable shortcut creation in windows installer (John Stowers)
+* overrides for all subclasses of dialog (John (J5) Palmieri)
+* Make TreeModel behave like in GTK-2.x (Sebastian Pölsterl)
+* Correctly build GIO on windows (John Stowers)
+* Require Python >= 2.6.0 for Windows build (John Stowers)
+* Fix depreciation warning in dsextras.py (John Stowers)
+* Fix build on windows (John Stowers)
+* Support for GCC4 in Windows distutils build - bug 626548 (Michael Culbertson)
+* Remove obsolete comments in dsextras.py (John Stowers)
+* Broken dsextras.py pkg-config check error message (John Stowers)
+* add compat functions for the deprecated PyCObject api (John (J5) Palmieri)
+* Add __path__ attributes. (Damien Caliste)
+* Override Gtk.TreeSelection.get_selected to not return success value. (Sebastian Pölsterl)
+* Make row optional in Gtk.TreeStore/ListStore.append override (Vincent Untz)
+* Revert "add compat functions for the deprecated PyCObject api" (John (J5) Palmieri)
+* return NULL instead of -1 which fixes crash when introspection is turned off (John (J5) Palmieri)
+* add compat functions for the deprecated PyCObject api (John (J5) Palmieri)
+* fix commit 7fe83108 which didn't use the compat functions for string handling (John (J5) Palmieri)
+* Python 3 fixes for dsextras and the python.m4 distribution files (John (J5) Palmieri)
+
+2.26.0 - 2010-09-24
+-------------------
+
+* Wrap g_get_system_{config,data}_dirs () (John Strowers)
+* fixed make check and make dist (John (J5) Palmieri)
+* Disable GI tests when introspection disabled (John Stowers)
+* Wrap g_uri_list_extract_uris. Fixes bug :bzbug:`584431` (Tomeu Vizoso)
+* Fix a few uses of TRUE and FALSE in the docs (Paul Bolle)
+* pygi: always free the invocation_state struct (Damien Caliste)
+* Start implementing something equivalent to g_variant_new (Tomeu Vizoso)
+* fixed typo - missing comma in glib.option module (John (J5) Palmieri)
+* add checks so we can compile under python 3 by setting PYTHON=python3 (John (J5) Palmieri)
+* Rename static methods as functions (Tomeu Vizoso)
+* fix a couple of compiler warnings (John (J5) Palmieri)
+* remove unused code (John (J5) Palmieri)
+* Check the type of the instance object (John (J5) Palmieri)
+* include the correct pycairo version (John (J5) Palmieri)
+* Use PyMapping_Keys to determine if an object is a dict (py3k fix) (John (J5) Palmieri)
+* fix handling of UINT64 and INT64 arguments in py3k (John (J5) Palmieri)
+* properly handle ulongs properties in py3k (John (J5) Palmieri)
+* Specify encoding of tests/test_gi.py (Tomeu Vizoso)
+* use actual unicode in the tests on py3k, not the byte representation (John (J5) Palmieri)
+* s/METH_KEYWORDS/METH_VARARGS|METH_KEYWORDS/ when defining object methods (John (J5) Palmieri)
+* fix subclassing PyLong by calling __new__ correctly (John (J5) Palmieri)
+* minor py3k fixups for python modules (John (J5) Palmieri)
+* minor fixes in tests for py3k compat (John (J5) Palmieri)
+* compilation: Fix syntax error (Colin Walters)
+* Add missing file (Tomeu Vizoso)
+* Add override for GLib.Variant.new_tuple (Tomeu Vizoso)
+* fix for changes in the gi test libraries (John (J5) Palmieri)
+* Gtk.DialogFlags.NO_SEPARATOR has been removed in Gtk 3.0 (John (J5) Palmieri)
+* no need to offset arg positions when is_method is true (John (J5) Palmieri)
+* gi: Add support for more property types (Tomeu Vizoso)
+* use PyObject_SetAttrString, not PyDict_SetItemString when setting __gtype__ (John (J5) Palmieri)
+* Rename GArgument to GIArgument (Tomeu Vizoso)
+* fix up tests so they run in py3k (John (J5) Palmieri)
+* tests: Port to new introspection tests (Colin Walters)
+* we need to specify tp_hash since we overide tp_richcompare (John (J5) Palmieri)
+* working enum/flags/pid subclasses of long (John Ehresman)
+* make vfuncs work in py3k (John (J5) Palmieri)
+* make cairo module compile in py3k (John (J5) Palmieri)
+* fix exceptions so they work in python 3.x (John (J5) Palmieri)
+* make the gi module compile under 3.x (John (J5) Palmieri)
+* fix up testshelper module so it compiles in python 3.x (John (J5) Palmieri)
+* convert to using PYGLIB_DEFINE_TYPE for module objects (John (J5) Palmieri)
+* some more p3k PyString and PyInt eradication in GI (John (J5) Palmieri)
+* pyglib: Fix typo (Leo Singer) (Tomeu Vizoso)
+* Add defines for size_t and ssize_t conversion functions (Gustavo Noronha Silva)
+* pyglib: Fix a compiler warning (Colin Walters)
+* Don't force gtk 2.0 (Tomeu Vizoso)
+* Fix some ref leaks in hook_up_vfunc_implementation() (Steve Frécinaux)
+* handle strings correctly in gio (John (J5) Palmieri)
+* make giomodule compile under py3k (John (J5) Palmieri)
+* for py3k we need to do some more processing to get bytes from a unicode string (John (J5) Palmieri)
+* use Bytes instead of Unicode when reading io (John (J5) Palmieri)
+* prefix compat macros with PYGLIB (John (J5) Palmieri)
+* Gtk.Button unit tests (John (J5) Palmieri)
+* [Gtk] Add overrides for Button (Johan Dahlin)
+* Make Cairo an optional dependency (Simon van der Linden)
+* Don't import again PyGObject (John Ralls) (Tomeu Vizoso)
+* move to using richcompare slot instead of compare (John (J5) Palmieri)
+* Replace autogen.sh by a newer version (Simon van der Linden)
+* Fix some warnings (Simon van der Linden)
+* Fix caller-allocates emergency free. (Simon van der Linden)
+* Remove useless checks. (Simon van der Linden)
+* Call valgrind with G_SLICE=always-malloc G_DEBUG=gc-friendly (Tomeu Vizoso)
+* Fix some warnings. (Ignacio Casal Quinteiro)
+* Add myself as a maintainer (Simon van der Linden)
+* Properly allocate boxed structs that are (caller-allocates) (Tomeu Vizoso)
+* override gdk.Event to return attribute from the proper event object (Toms Baugis)
+* check if z# needs an int or Py_ssize_t (John (J5) Palmieri)
+* make sure we parse parameters to python object vars not glib vars (John (J5) Palmieri)
+* Make an example and a demo work out of the box (Paul Bolle)
+* make sure caller allocated structs are freed when they go out of scope (John (J5) Palmieri)
+* Revert "override gdk.Event to return attribute from the proper event object." (Tomeu Vizoso)
+* PyGI: properly quit cairo-demo (Paul Bolle)
+* override gdk.Event to return attribute from the proper event object. (Toms Baugis)
+* Clean and improve the test infrastructure (Simon van der Linden)
+* Add some more transformations to pygi-convert.sh (Tomeu Vizoso)
+* Adapt to API changes: g_irepository_enumerate_versions (Tomeu Vizoso)
+* Add GValue<->GArgument marshalling for some more types (Tomeu Vizoso)
+* Chain up with the non-introspection implementation for properties if needed (Tomeu Vizoso)
+* Improve error reporting for missing attributes in introspection modules (Tomeu Vizoso)
+* Implement getting and setting properties using introspection information. (Tomeu Vizoso)
+* Readd Gdk.Rectangle override for Gtk-2.0 (Tomeu Vizoso)
+* Allow specifying a version when loading a typelib (Tomeu Vizoso)
+* treat GFreeFunc as equivalent to GDestroyNotify when scanning callbacks (Jonathan Matthew)
+* Don't use == to compare doubles, use <= and =>. (Simon van der Linden)
+* Allow passing ints as enum args (Tomeu Vizoso)
+* Make error message less ambiguous (Tomeu Vizoso)
+* fix passing in type names as a GType and add gtype unit tests (John (J5) Palmieri)
+* Increase a bit verbosity of tests so people know which test failed (Tomeu Vizoso)
+* Actually add the files for GVariant foreign structs (Tomeu Vizoso)
+* Add foreign struct support for GVariant (Tomeu Vizoso)
+
+2.21.5 - 2010-07-12
+-------------------
+
+* Shut up some compiler warnings (Florian Müllner)
+* Adjust to API break in GObject-Introspection (Florian Müllner)
+* pass in the demo app so demos can use utility methods like requesting file paths (John (J5) Palmieri)
+* demo fixes to keep up with Gtk+ (John (J5) Palmieri)
+* override test fixes for new GTK+ annotations (John (J5) Palmieri)
+* Fix warning. (Ignacio Casal Quinteiro)
+* fix up treeiter usage due to caller-allocates annotations in gtk+ (John (J5) Palmieri)
+* add entry completion demo (John (J5) Palmieri)
+* string changes (John (J5) Palmieri)
+* add the Entry demo directory and the entry_buffer demo (John (J5) Palmieri)
+* fix loading of demo modules to support sub modules (John (J5) Palmieri)
+* add the ability to have demos in sub catagories (John (J5) Palmieri)
+* Add  __name__ to DynamicModule class. (Jose Aliste)
+* Do not override GdkRectangle. (Ignacio Casal Quinteiro)
+* Add override for TreeModel implementing __len__() (Philip Withnall)
+
+2.21.4 - 2010-06-29
+-------------------
+
+* Build the cairo shim as a python module so the _gi module stops linking to it (Tomeu Vizoso)
+* add drawing area demo (John (J5) Palmieri)
+* sort the demo list (John (J5) Palmieri)
+* rename iter to treeiter so we aren't using a python reserved word (John (J5) Palmieri)
+* Fixup for change in buffer API (John (J5) Palmieri)
+* add ListStore, TreeStore and TreeViewColumn APIs (John (J5) Palmieri)
+* Add unit test for add_actions user data. (Ignacio Casal Quinteiro)
+* Pass user_data param when adding actions (Paolo Borelli)
+* add an exception type to the try/except block (John (J5) Palmieri)
+* return PyList instead of PyTuple for array, return empty list for NULL arrays (John (J5) Palmieri)
+* Fix 'make distcheck' (Tomeu Vizoso)
+* Allow building pygobject without introspection support by providing --disable-introspection to configure. (Tomeu Vizoso)
+* Make sure that sys.argv is a list and not a sequence. (Tomeu Vizoso)
+* Force loading the GObject typelib so we have available the wrappers for base classes such as GInitiallyUnowned. (Tomeu Vizoso)
+* we shouldn't g_array_free NULL pointers (John (J5) Palmieri)
+* remove unneeded TextIter creation in the tests (John (J5) Palmieri)
+* add override for TextBuffer (John (J5) Palmieri)
+* fix up some build issues (John (J5) Palmieri)
+* make the overrides file git friendly by appending to __all__ after each override (John (J5) Palmieri)
+* Override Dialog constructor and add_buttons method (Paolo Borelli)
+* Merge PyGI (Johan Dahlin)
+
+2.21.3 - 2010-06-21
+-------------------
+
+* Proper handling of null-ok in virtual methods (Ludovic L'Hours)
+* Fall back to use the floating references API in glib if there isn't a sinkfunc defined. (Tomeu Vizoso)
+* Revert "Drop sinkfuncs." (Tomeu Vizoso)
+* [giounix] Make it possible to compile on glib 2.20 (Johan Dahlin)
+* Release the lock when potentially invoking Python code. (Sjoerd Simons)
+
+2.21.2 - 2010-06-10
+-------------------
+
+* Drop sinkfuncs. (Tomeu Vizoso)
+* Clear error if we failed the import (Colin Walters)
+* Added missing , to keyword list of gio.GFile.set_attribute (John Ehresman)
+* Fix arg conversion in gio.GFile.set_attribute (John Ehresman)
+* Set constants under python 2.5 or before (John Ehresman)
+* Doc Extractor: Use replacements that make sense for &...; expressions. (José Alburquerque)
+* Add build docs for windows (John Stowers)
+* Setup.py cosmetic tidy (John Stowers)
+* Fix crash when importing gio (John Stowers)
+* Bug 589671 - Dont use generate-constants (John Stowers)
+* Bug 589671 - Fix setup.py for windows build (John Stowers)
+* Include pygsource.h (John Stowers)
+* codegen/docextract_to_xml.py: One more &...; replacement (&nbsp;). (José Alburquerque)
+* codegen/docextract_to_xml.py: Replace some &..; that cause errors. (José Alburquerque)
+* codegen/docextract_to_xml.py: Handle C++ multi-line comments. (José Alburquerque)
+* codegen/docextract.py: Stop final section processing on first match. (José Alburquerque)
+* Update doc extraction tool to handle GObjectIntrospection annotations. (José Alburquerque)
+* Docs: replace gio.IO_ERROR_* with gio.ERROR_* (Paul Bolle)
+* Bug 613341 - pygobject tests seem to require pygtk causing a circular (Gian Mario)
+* Don't raise an error in _pygi_import if pygi support is disabled (Simon van der Linden)
+* Initialize PyGPollFD_Type.fd_obj to NULL (Tomeu Vizoso)
+* Bug 605937 - pygobject: Makefile.am sets $TMPDIR, disrupting distcc (Gian Mario)
+* Wrap gio.Cancellable.make_pollfd() and add a test (Gian Mario)
+* Make cancellable an optional parameter in many methods (Gian Mario)
+
+2.21.1 - 2010-01-02
+-------------------
+
+* Wrap gio.Volume.eject_with_operation (Gian Mario)
+* Wrap gio.Mount.eject_with_operation (Gian Mario)
+* Wrap gio.Mount.unmount_mountable_with_operation (Gian Mario)
+* Wrap File.unmount_mountable_with_operation (Gian Mario)
+* Wrap gio.File.stop_mountable (Gian Mario)
+* Wrap gio.File.start_mountable (Gian Mario)
+* Wrap gio.File.replace_readwrite_async (Gian Mario)
+* Wrap gio.File.poll_mountable (Gian Mario)
+* Wrap gio.File.open_readwrite_async (Gian Mario)
+* Wrap gio.File.eject_mountable_with_operation (Gian Mario)
+* Wrap gio.File.create_readwrite_async (Gian Mario)
+* Wrap gio.Drive.stop (Gian Mario)
+* Wrap gio.Drive.start (Gian Mario)
+* Wrap gio.SocketListener.accept_socket_async|finish (Gian Mario)
+* Wrap gio.SocketListener.accept_finish (Gian Mario)
+* Wrap gio.SocketListener.accept_async (Gian Mario)
+* Wrap gio.SocketListener.accept_socket (Gian Mario)
+* Wrap gio.SocketListener.accept (Gian Mario)
+* Make cancellable optional in gio.SocketClient.connect_to_host
+  (Gian Mario)
+* Wrap gio.SocketListener.add_address (Gian Mario)
+* Wrap gio.SocketClient.connect_to_service_async (Gian Mario)
+* Wrap gio.SocketClient.connect_to_host_async (Gian Mario)
+* Wrap gio.SocketClient.connect_async (Gian Mario)
+* Wrap gio.SocketAddressEnumerator.next_async (Gian Mario)
+* Add a missing object gio.InetSocketAddress new in GIO 2.22
+  (Gian Mario)
+* Make cancellable optional for gio.SocketAddressEnumerator.next
+  (Gian Mario)
+* Wrap gio.Socket.condition_wait (Gian Mario)
+* Wrap gio.Socket.condition_check (Gian Mario)
+* Wrap gio.Resolver.lookup_service_finish (Gian Mario)
+* Wrap gio.Resolver.lookup_service_async (Gian Mario)
+* Wrap gio.Resolver.lookup_service (Gian Mario)
+* Wrap gio.Resolver.lookup_by_address_async (Gian Mario)
+* Wrap gio.Resolver.lookup_by_name_finish (Gian Mario)
+* Wrap gio.Drive.eject_with_data (Gian Mario)
+* Deprecate old gio.Drive methods (Gian Mario)
+* Wrap gio.Resolver.lookup_by_name (Gian Mario)
+* Make cancellable optional in gio.Resolver.lookup_by_address
+  (Gian Mario)
+* Strip ``g_`` prefix for many other functions (Gian Mario)
+* Strip ``g_`` prefix from InetAddress functions (Gian Mario)
+* Fix function name gio.resolver_get_default (Gian Mario)
+* Wrap gio.FileIOStream.query_info_async (Gian Mario)
+* Register enums and flags in PyGI if needed (Tomeu Vizoso, :bzbug:`603534`)
+* Wrap gio.IOStream.close_async (Gian Mario)
+* Make cancellable optional in GFile.create_readwrite (Gian Mario)
+* Remove a duplicate entry in gio.defs (Gian Mario)
+* Wrap gio.FileInfo.set_modification_time (Gian Mario)
+* Wrap gio.EmblemedIcon.get_emblems (Gian Mario)
+* Update Enums and Flags with new API (Gian Mario)
+* Fix handling of uchar in pyg_value_from_pyobject (Bastian Winkler)
+
+2.21.0 - 2009-12-18
+-------------------
+
+* pygmainloop: fix use of PySignal_WakeUpFD API for nested loops
+  (Philippe Normad, :bzbug:`481569`)
+* Add capabilities to import wrappers from pygi (Simon van der Linden)
+* Move threads_init() function from 'gobject' to 'glib' (Paul)
+* Fix wrong minimum checking in float properties (Paul, :bzbug:`587637`)
+* Wrap new API added in GIO 2.22 (Gian Mario)
+* Fix bad name when rebuilding the unix source module (Gian Mario)
+* Add the missing limit constants from glibconfig.h
+  (Tomeu Vizoso, :bzbug:`603244`)
+* Suppress warnings about format conversion
+  (Simon van der Linden, :bzbug:`603355`)
+* Properly define Connectable as interface type and not object type
+  (Gian Mario)
+* Wrap new API added in GIO-UNIX 2.22 (Gian Mario)
+* Wrap g_find_program_in_path (Gian Mario, :bzbug:`598435`)
+* Add pygi-external.h into Makefile SOURCES (Gian Mario)
+
+2.20.0 - 2009-09-23
+-------------------
+
+* Allow to use automake 1.11 (Paolo Borelli)
+* Specify programming language in .devhelp file (Frédéric Péters)
+* Plug reference leak of GSource in pyg_main_loop_init (Paul)
+* Updated uninstalled.pc file (Brian Cameron)
+
+2.19.0 - 2009-08-10
+-------------------
+
+* Add macros to help with Python list to/from GList/GSList conversions.
+  (John Finlay)
+* GIO docs practically completed (Gian)
+* GFileInfo.list_attributes should accept None/NULL (Gian)
+* Strip out Windows DLL API macros (John Finlay)
+* Document that many functions got moved gobject -> glib (Paul)
+* Allow h2def.py to work when there are tabs or multiple spaces after
+  the struct keyword. (Murray Cumming)
+* Fix build when builddir is not the same as srcdir
+  (Theppitak Karoonboonyanan)
+* Make gio.Emblem constructor new-style (Paul)
+* Cleanup GIO overrides to use Python function/method names (Paul)
+* Make codegen report errors using Python function/method names (Paul)
+* Fix object type in gio.BufferedInputStream_fill_async (Gian)
+* Wrap gio.BufferedInputStream.fill_async (Gian)
+* Add gio.BufferedOutputStream which was forgotten in the types (Gian)
+* Split overrides for gio.MemoryOutputStream (Gian)
+* Wrap gio.memory_input_stream_new_from_data (Gian)
+* Introduces the girepository module from the former PyBank
+  (Simon van der Linden)
+* Add API appeared in 2.20 but not marked as such in gio docs (Gian)
+* Wrap gio.FileOutputStream.query_info_async (Gian)
+* Wrap gio.FileInputStream.query_async (Gian)
+* Install executable codegen parts with executing permissions (Paul)
+* Wrap gio.DataInputStream.read_line_async and read_until_async (Paul)
+* Fix gio.OutputStream.splice_async (Paul)
+* Add GIO 2.20 API and update docs (Gian)
+
+2.18.0 - 2009-05-24
+-------------------
+
+* Improve gio docs with some more classes (Gian)
+* Wrap gio.OutputStream.splice_async() (Gian)
+* Add Python ver into installed libpyglib name (Emilio Pozuelo Monfort)
+* Wrap gio.OutputStream.flush_async() (Gian)
+* Use 'Requires.private' for libffi in '.pc' files (Josselin Mouette)
+* Add wrapper for gio.FileAttributeMatcher (Gian)
+* Mark relevant glib.IOChannel methods as METH_NOARGS (Paul)
+* Retire hand-written ChangeLog; autocreate from Git history (Paul)
+* Wrap gio.InputStream.skip_async() (Gian)
+* Add in codegen -n --namespace option and the code to remove dll
+  API in headers, added documentation (Siavash Safi)
+* Properly mark glib.get_user_special_dir() as a keywords method (Paul)
+
+2.17.0 - 2009-04-30
+-------------------
+
+* Write a good part of the docs for gio (Gian)
+* Wrap g_mount_guess_content_type g_mount_guess_content_type_finish
+  g_mount_guess_content_type_sync (Gian, :bzbug:`580802`)
+* Swap first two arguments of gio.File.query_info_async (Paul, :bzbug:`580490`)
+* Fix a crash in pyg_type_add_interfaces (Paul, :bzbug:`566571`)
+* Remove an empty structure, use sizeof(PyObject)
+  instead (Paul, :bzbug:`560591`)
+* Wrap four g_get_user_*_dir() functions (Paul, :bzbug:`575999`)
+* Remove 'ltihooks.py' as using deprecated Python module (Paul)
+* Code maintenance: add .gitignore files (Paul)
+* CellRendererPixbuf stock-size property has wrong type (Paul, :bzbug:`568499`)
+* Add a doap file after git migration (Johan Dahlin)
+* missing dep on libffi in pygobject-2.0.pc (Götz Waschk, :bzbug:`550231`)
+* g_volume_monitor_tp_new new function, return the singleton object.
+  (Paul, :bzbug:`555613`)
+* Remove a DeprecationWarning under python 2.6 (James Westby, :bzbug:`573753`)
+* several scripts from codegen directory are not distributed
+  (Krzesimir Nowak)
+* g_file_copy_async change argument order to keep it consistent with the
+  other methods (Gian)
+* memory leak in gio.File.copy_async (Paul Pogonyshev, :bzbug:`578870`)
+* g_file_monitor should accept None for cancellable and set the default
+  flag to G_FILE_MONITOR_NONE (Gian)
+* pyg_notify_free needs to ensure it has GIL before calling Py_XDECREF
+  (Jonathan Matthew)
+* Wrap g_file_set_display_name_async (Gian)
+* Add a semi-private method to return the option context C object from
+  an option context wrapper (Tristan Hill)
+* Converting a negative long Python value to a GUINT64 GValue doesn't
+  error out as it should (Gustavo J. A. M. Carneiro, :bzbug:`577999`)
+* Wrap g_file_set_attributes_async and
+  g_file_set_attributes_finish (Gian)
+* g_file_query_filesystem_info_async fix a typo (Gian)
+* Wrap g_file_query_filesystem_info_async (Gian)
+* Add missing g_file_query_filesystem_info_async and
+  g_file_query_filesystem_info_finish (Gian)
+* Wrap g_file_eject_mountable (Gian)
+* g_file_copy callback cannot be optional (Gian)
+* Swap various kwargs names to reflect the code (Gian)
+* Update the address of the FSF (Tobias Mueller, :bzbug:`577134`)
+* Add g_volume_should_automount (Gian)
+* Wrap g_drive_enumerate_identifiers and g_volume_enumerate_identifiers
+  (Gian)
+* Add a couple of convinence functions to convert from/to a python list
+  and an array of strings (Gian)
+* Allow setting pytype wrapper class (Mark Lee, John Ehresman, :bzbug:`559001`)
+* Wrap g_file_enumerator_close_async (Gian Mario Tagliaretti)
+
+2.16.1 - 2009-02-22
+-------------------
+
+* Apply the patch provided by Cygwin Ports maintainer
+  (Paul Pogonyshev, :bzbug:`564018`)
+* Bad -I ordering can break build, patch from [dmacks netspace org]
+  (Gian Mario Tagliaretti, :bzbug:`566737`)
+* Fix keyword list to be in sync with positional arguments
+  (Paul, :bzbug:`566744`)
+* Add a comment explaining why the two for loops for registering
+  interfaces (Gustavo Carneiro)
+* Huge cleanup of GIO overrides (Paul, :bzbug:`566706`)
+* gtk.Buildable interface method override is not recognized
+  (Paul, :bzbug:`566571`)
+* Do not escape the ampersand "&" in entity references. Replace some
+  unusual entity references in the output with their literal values.
+  (Daniel Elstner, :bzbug:`568485`)
+* gio.InputStream.read_async can cause memory corruption.
+  (Paul, :bzbug:`567792`)
+* Inconsistent use of tabs and spaces in pygtk.py (Paul, :bzbug:`569350`)
+* Huge fix of memory leaks in GIO (Paul, Paolo Borelli, Gian, :bzbug:`568427`)
+* non-async functions don't release python locks before calling
+  blocking C functions (Gian, Gustavo, :bzbug:`556250`)
+* Change comment to avoid false positives when grep'ing for deprecated
+  gtk functions (Andre Klapper)
+* ltihooks.py updating license header from GPL to LGPL
+  (James Henstridge)
+
+2.16.0 - 2009-01-04
+-------------------
+
+* gobject.timeout_add_seconds() not found in docs
+  (Paul Pogonyshev, :bzbug:`547119`)
+* _wrap_g_output_stream_write_async not adding a reference to the
+  buffer passed (Paul, :bzbug:`564102`)
+* gio.VolumeMonitor segfaults (Gian Mario Tagliaretti, :bzbug:`555613`)
+* Test if `domain` is not-null before using it to avoids segfaults
+  (Paul, :bzbug:`561826`)
+* g_output_stream_write_all use gsize instead of gssize (Gian)
+* add __repr__ to gio.Drive, gio.Mount and gio.Volume
+  (Paul, :bzbug:`530935`)
+* Missing AC_CONFIG_MACRO_DIR([m4]) (Loïc Minier, :bzbug:`551227`)
+* Make codegen not import when corresponding argument types are not
+  registered (Paul, :bzbug:`551056`)
+* Fix typos breaking compilation (Frederic Peters :bzbug:`551212`)
+* GFile load_contents methods chop data at first \0
+  (Jonathan Matthew, :bzbug:`551059`) 
+
+2.15.4 - 2008-09-03
+-------------------
+
+* Fix typo in GPointer type registration (Loïc Minier,:bzbug:`550463`)
+* support G_TYPE_CLOSURE in codegen (Gian)
+
+2.15.3 - 2008-08-31
+-------------------
+
+* Beginning of porting to 3.0. glib & gobject module ported.
+* Wrap g_app_info_* functions (Gian)
+* Wrap gio.FileAttributeInfo (Gian)
+* Wrap g_vfs_get_supported_uri_schemes (Johan, :bzbug:`545846`)
+* Wrap g_file_info_get_modification_time (Johan, :bzbug:`545861`)
+* Wrap gio.Volume.mount/eject (Johan)
+* Wrap gio.File.move (Johan)
+* Wrap gio.query_writable_namespaces (Gian, :bzbug:`545920`)
+* Separate glib & gobject documentation
+* Wrap GFile.append_to_async (Gian, :bzbug:`545959`)
+* Wrap GFile.create_async (Gian, :bzbug:`546020`)
+* Change return value from 'gboolean' to 'int' and changed semantics
+  to Pythonic (Paul, :bzbug:`544946`)
+* Wrap GFile.replace_async and query_info_async (Gian, :bzbug:`546046`)
+* GIcon and implementations improvements (Paul, :bzbug:`546135`)
+* Improve __repr__ and richcompare for gio classes (Paul)
+* Missing Py_INCREFs for some file async methods (Jonathan Matthew, :bzbug:`546734`)
+* File.copy progress_callback does not work (Paul, :bzbug:`546591`)
+* add File.replace_contents, replace_contents_async, replace_contents_finish.
+  (Jonathan Matthew, :bzbug:`547067`)
+* Add GFile.query_default_handler (Gian)
+* fix docstring line length (Jonathan Matthew, :bzbug:`547134`)
+* improve runtime type wrapper creation (Paul, :bzbug:`547104`)
+* make gio.File more Pythonic (Paul, :bzbug:`546120`)
+* No TypeError raised when type is None (Paul, :bzbug:`540376`)
+* wrap a few memory stream methods (Paul, :bzbug:`547354`)
+* wrap gio.DataInputStream.read_line and ...read_until (Paul, :bzbug:`547484`)
+* wrap four important asynchronous methods in gio.Drive and gio.Mount
+  (Paul, :bzbug:`547495`)
+* gio.InputStream.read() looks broken (Paul, :bzbug:`547494`)
+* wrap g_content_types_get_registered() (Paul, :bzbug:`547088`)
+* cannot create new threads when pygtk is used (Paul, :bzbug:`547633`)
+* an unitialized variable in PyGLib (Paul, :bzbug:`549351`)
+* Constructor of gtk.TreeView raises TypeError when model is None
+  (Paul, :bzbug:`549191`)
+* Fix memory problems reported by valgrind due to invalid tp_basicsize in
+  PyGPropsDescr_Type. (Gustavo, :bzbug:`549945`)
+
+2.15.2 - 2008-07-26
+-------------------
+
+* New module: glib, which contains the parts of the old
+  gobject bindings which are in the glib library.
+  MainLoop/MainContext/Sources/GOption and a few others has now moved.
+* Add a new installed library libpyglib-2.0, which contains the extension
+  API for third-part modules instead of relying on macros which accesses
+  struct fields.
+* Add bindings for gio.File.enumerate_children_async,
+  gio.FileEnumerator.next_files_async, gio.Mount.mount,
+  gio.File.mount_mountable, gio.File.mount_enclosing_volume,
+  gio.File.unmount_mountable, gio.File.copy.
+* Add a new api for mapping a GError domain to an exception and register
+  an exception for GIOError.
+* Remove leading IO_* prefix for the gio flags and register a quark
+  for the domain.
+* Use GSlice in the glib module and bump required version to 2.14.
+
+2.15.1 - 2008-07-15
+-------------------
+
+* Rename pygtk-codegen-2.0 to pygobject-codegen-2.0 to avoid
+  conflicting with PyGTK (Paul Pogonyshev)
+
+2.15.0 - 2008-07-15
+-------------------
+
+* Add GIO bindings (Johan, Mario Tagliaretti, Thomas Leonard)
+* Move codegen from PyGTK (Johan, Paul Pogonyshev, :bzbug:`542821`)
+* Add more variables to the .pc files (Damien Carbery, Paul, 
+  Dan Winship, :bzbug:`486876`)
+* Add pyg_option_group_new to the public API (Johan)
+* Add g_get_application_anme and g_get_progname (Sebastian Rittau)
+* Avoid making wakeups when using Python 2.6 (Johan, Gustavo,
+  Adam Olsen, Josselin Mouette, Philippe Normand, Guido Van Rossum)
+* Only link against libffi when found (Ed Catmur, :bzbug:`496006`)
+* Improve gobject.property (Tomeu Vizoso, :bzbug:`523352`)
+* Improve enum comparision and warnings (Paul, Phil Dumont, :bzbug:`428732`)
+* Many gobject.Source improvements (Bryan Silverthorn)
+* Apply some fixes to make pylint happier (Johan, Simon Schampijer,
+  :bzbug:`523821`)
+* Fix error message in pyg_io_add_watch (Juha Sahkangas)
+* Improve h2def.py (Oliver Crete, Murray Cumming, Lauro Moura)
+
+2.14.2 - 2008-05-23
+-------------------
+
+* Allow gobject.property work with subclasses. (:bzbug:`523352`, Tomeu Vizoso)
+* Unbreak Source.prepare (:bzbug:`523075`, Bryan Silverthorn)
+* Never override customly set 'tp_new' and 'tp_alloc' (Paul Pogonyshev)
+* Don't link against libffi if we cannot find libffi
+  on the system. (:bzbug:`496006`, Ed Catmur)
+* Dist .m4 files. (:bzbug:`496011`, Ed Catmur)
+* Don't return NULL after warning of enum comparsion
+  (:bzbug:`519631`, Paul Pogonyshev)
+
+2.14.1 - 2008-01-03
+-------------------
+
+* Avoid wakeups when using Python trunk (Johan Dahlin, :bzbug:`481569`)
+* Add an uninstalled.pc (Damien Carbery, :bzbug:`486876`)
+
+2.14.0 - 2007-09-16
+-------------------
+
+* Fix a Python 2.6 deprecation warning (Johannes Hölzl, :bzbug:`342948`)
+* Wrap g_timeout_add_seconds, when compiling with glib 2.14 (Gustavo)
+* Always fully initialize the PyGObject (Ed Catmur, :bzbug:`466082`)
+* Fix compilation in Solaris, again (:bzbug:`339924`, Gustavo)
+* Fix check for default value in boolean type (Marco Giusti, :bzbug:`470230`)
+* Fix new style properties with subclasses (Johan Dahlin, :bzbug:`470718`)
+* Docs generation fixes (John Finlay)
+
+2.13.2 - 2007-07-07
+-------------------
+
+* Fix build on opensolaris (Damien Carbery, :bzbug:`339924`)
+* Proxy GOption exceptions from Python to C (Johannes Hölzl, :bzbug:`342948`)
+* Support G_TYPE_VALUE boxed args/signals
+  (Ed Catmur, Carlos Martin, :bzbug:`351072`)
+* pyg_error_exception_check bug fix (Sebastian Granjoux, :bzbug:`449879`)
+* Toggle references bug fix (:bzbug:`447271`, Gustavo Carneiro)
+* use python-config to get python includes (:bzbug:`448173`, Sebastien Bacher)
+* Support GObject properties in new properties API (Gustavo)
+* generate-constants fixes (Muntyan)
+* Allow running autogen.sh from outside $srcdir (Muntyan)
+
+2.13.1 - 2007-05-02
+-------------------
+
+* Generic CClosure marshaller using libffi (Johan, :bzbug:`353816`)
+* Uninstalled .pc file (Damien Carbery, :bzbug:`385129`)
+* Fix leak in GFlags handling (Daniel Berrange, :bzbug:`428726`)
+* Use dirname in autogen (Loïc Minier, :bzbug:`409234`)
+* Treat None in a GValueArray as pointer/NULL (Ed Catmur, :bzbug:`352209`)
+* Toggle reference bug fix in tp_setattro (Gustavo, :bzbug:`434659`)
+* Add a simplified helper for creating properties (Johan, Gustavo, :bzbug:`338089`)
+* Avoid throwing an exception in GValue converter (James Livingstone,
+  Ed Catmur, :bzbug:`374653`)
+* Build fix in .pc file (Luca Ferretti, :bzbug:`435132`)
+
+2.13.0 - 2007-04-23
+-------------------
+
+* Release the GIL in g_object_set_property (Edward Hervey, :bzbug:`395048`)
+* Break PyGObject<->GObject reference cycle (Gustavo Carneiro, :bzbug:`320428`)
+* use static inline functions for init_pygobject (Gustavo, :bzbug:`419379`)
+* Wrap g_set_application_name, g_set_prgname
+  (Havoc Pennington, :bzbug:`415853`)
+* New pyg_gerror_exception_check API (Gustavo, :bzbug:`425242`)
+* New API to get/set multiple properties
+  (Gian Mario Tagliaretti, :bzbug:`403212`)
+* Misc. bug fixes.
+
+2.12.3 - 2006-11-18
+-------------------
+
+* distutils build fixes (Cedric)
+* documentation updates (John)
+* gobject.handler_block_by_func and friends now accept methods 
+  (Johan, Dima, :bzbug:`375589`)
+* avoid truncating of gparamspec (Yevgen Muntyan, :bzbug:`353943`)
+* set __module__ on gobject derived types (Johan, 
+  Osmo Salomaa, :bzbug:`376099`)
+* Ensure exceptions are raised on errors in gobject.OptionGroup
+  (Johan, Laszlo Pandy, :bzbug:`364576`
+
+2.12.2 - 2006-10-03
+-------------------
+
+* Make PyGObject 64-bit safe for Python 2.5 (Gustavo)
+* All headers are now LGPL and not GPL (Johan)
+* Remove a couple of GCC warnings (Gustavo)
+* Revive distutils support (Cedric Gustin)
+* Emission hook reference count bugfix (Gustavo)
+* MSVC/ANSI C compilation fix (John Ehresman)
+* Bump Ctrl-C timeout handler from 100ms to 1000 (Johan)
+
+2.12.1 - 2006-09-04
+-------------------
+
+* Corrected version check (Sebastian Dröge, :bzbug:`354364`)
+
+2.12.0 - 2006-09-04
+-------------------
+
+* Install the html files even when using --disable-docs (:bzbug:`353159`, Johan,
+  Matthias Clasen)
+
+2.11.4 - 2006-08-27
+-------------------
+
+* Include pre-generated html docs in the tarball  (Johan)
+* Fix bug in do_set_property called from constructor (Gustavo, :bzbug:`353039`)
+* Fix type registration involving interfaces with signals and/or
+  properties (Gustavo)
+
+2.11.3 - 2006-08-21
+-------------------
+
+* Documentation updates (John)
+* Documentation build fixes (Johan, John, Gian Mario Tagliaretti)
+* PyGObject can now be compiled using a C++ compiler (Murray Cumming)
+* Type registration bug fix (Gustavo)
+
+2.11.2 - 2006-08-08
+-------------------
+
+* Add fixxref.py from PyGTK (Johan)
+* Fix parallel build (:bzbug:`350225`, Ed Catmur)
+
+2.11.1 - 2006-08-04
+-------------------
+
+* Add John Finlay's reference manual (Johan, John)
+* Fix GOption mem leak (Gustavo)
+* Infrastructure for lazy type registration (Johan)
+* Enum/Flags fixes (Gustavo, John)
+* Eliminate some GCC warnings (Johan)
+
+2.11.0 - 2006-07-12
+-------------------
+
+* Add GOption support (:bzbug:`163645`, Johannes Hölzl)
+* GObject metaclass converted to Python code (Gustavo)
+* Register GType constants from Python-land (Johan)
+* Distutils updates (John Ehresman, Cedric Gustin)
+* Add support for signal emission hooks (:bzbug:`154845`, Johan)
+* g_spawn_close_pid support (Gustavo)
+* Add new APIs do add or disable log redirections (Muntyan, :bzbug:`323786`)
+* "sub-sub-type" bug fixed (Gustavo)
+* Coverity report code fixes (Johan)
+* Support retrieving signal and property info from interfaces (Finlay)
+* Support parameters of type G_TYPE_GSTRING in signals (Gustavo)
+* Wrap a few g_filename_* APIs (Gustavo)
+
+2.10.1 - 2006-04-11
+-------------------
+
+* uint64 property bug fix (Andy Wingo)
+* Hard code path to 2.0 (Gustavo)
+* Allow only tuples and lists in strv to value (Gustavo)
+* Include dsextras.py in the dist (Johan)
+
+2.10.0 - 2006-03-13
+-------------------
+
+* enum/leak fix (Michael Smith)
+
+2.9.1 - 2006-01-16
+------------------
+
+2.9.0 - 2006-01-16
+------------------
+
+* Signal accumulator support (Gustavo)
+* GObject doc string generation improvements (Gustavo)
+* Discover GInterfaces in runtime (Gustavo)
+* Warn if return value in iowatch callback is not bool (Gustavo)
+* Convert string arrays properly (Christopher Aillon)
+
+2.8.0 - 2006-01-09
+------------------
+
+* Initial release, split of from PyGTK.
+* Updates for Python 2.5's richcompare (Manish Yosh)
+* PyFlags bug fixes (Gustavo)
+* Fix leak in pygobject_new_with_interfaces (Johan)
+* Undeprecate gobject.type_register (Johan)
index 89b65b4..d97e6c5 100644 (file)
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.0
 Name: PyGObject
-Version: 3.27.1
+Version: 3.27.2
 Summary: Python bindings for GObject Introspection
 Home-page: https://pygobject.readthedocs.io
 Author: James Henstridge
index 2e9ad7f..31e01ef 100755 (executable)
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright 1992-2016 Free Software Foundation, Inc.
+#   Copyright 1992-2017 Free Software Foundation, Inc.
 
-timestamp='2016-10-02'
+timestamp='2017-11-07'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -15,7 +15,7 @@ timestamp='2016-10-02'
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, see <https://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -27,7 +27,7 @@ timestamp='2016-10-02'
 # Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
 #
 # You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 #
 # Please send patches to <config-patches@gnu.org>.
 
@@ -39,7 +39,7 @@ Usage: $0 [OPTION]
 
 Output the configuration name of the system \`$me' is run on.
 
-Operation modes:
+Options:
   -h, --help         print this help, then exit
   -t, --time-stamp   print date of last modification, then exit
   -v, --version      print version number, then exit
@@ -50,7 +50,7 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright 1992-2016 Free Software Foundation, Inc.
+Copyright 1992-2017 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -244,6 +244,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
        echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE}
        exit ;;
+    *:MidnightBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-midnightbsd${UNAME_RELEASE}
+       exit ;;
     *:ekkoBSD:*:*)
        echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
        exit ;;
@@ -259,6 +262,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     *:Sortix:*:*)
        echo ${UNAME_MACHINE}-unknown-sortix
        exit ;;
+    *:Redox:*:*)
+       echo ${UNAME_MACHINE}-unknown-redox
+       exit ;;
     alpha:OSF1:*:*)
        case $UNAME_RELEASE in
        *4.0)
@@ -315,15 +321,6 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        exitcode=$?
        trap '' 0
        exit $exitcode ;;
-    Alpha\ *:Windows_NT*:*)
-       # How do we know it's Interix rather than the generic POSIX subsystem?
-       # Should we change UNAME_MACHINE based on the output of uname instead
-       # of the specific Alpha model?
-       echo alpha-pc-interix
-       exit ;;
-    21064:Windows_NT:50:3)
-       echo alpha-dec-winnt3.5
-       exit ;;
     Amiga*:UNIX_System_V:4.0:*)
        echo m68k-unknown-sysv4
        exit ;;
@@ -485,13 +482,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 #endif
        #if defined (host_mips) && defined (MIPSEB)
        #if defined (SYSTYPE_SYSV)
-         printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+         printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0);
        #endif
        #if defined (SYSTYPE_SVR4)
-         printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+         printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0);
        #endif
        #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
-         printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+         printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0);
        #endif
        #endif
          exit (-1);
@@ -614,7 +611,7 @@ EOF
     *:AIX:*:*)
        echo rs6000-ibm-aix
        exit ;;
-    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+    ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*)
        echo romp-ibm-bsd4.4
        exit ;;
     ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
@@ -635,8 +632,8 @@ EOF
     9000/[34678]??:HP-UX:*:*)
        HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
        case "${UNAME_MACHINE}" in
-           9000/31? )            HP_ARCH=m68000 ;;
-           9000/[34]?? )         HP_ARCH=m68k ;;
+           9000/31?)            HP_ARCH=m68000 ;;
+           9000/[34]??)         HP_ARCH=m68k ;;
            9000/[678][0-9][0-9])
                if [ -x /usr/bin/getconf ]; then
                    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
@@ -749,7 +746,7 @@ EOF
                { echo "$SYSTEM_NAME"; exit; }
        echo unknown-hitachi-hiuxwe2
        exit ;;
-    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*)
        echo hppa1.1-hp-bsd
        exit ;;
     9000/8??:4.3bsd:*:*)
@@ -758,7 +755,7 @@ EOF
     *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
        echo hppa1.0-hp-mpeix
        exit ;;
-    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*)
        echo hppa1.1-hp-osf
        exit ;;
     hp8??:OSF1:*:*)
@@ -837,10 +834,11 @@ EOF
        UNAME_PROCESSOR=`/usr/bin/uname -p`
        case ${UNAME_PROCESSOR} in
            amd64)
-               echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-           *)
-               echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+               UNAME_PROCESSOR=x86_64 ;;
+           i386)
+               UNAME_PROCESSOR=i586 ;;
        esac
+       echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
        exit ;;
     i*:CYGWIN*:*)
        echo ${UNAME_MACHINE}-pc-cygwin
@@ -854,10 +852,6 @@ EOF
     *:MSYS*:*)
        echo ${UNAME_MACHINE}-pc-msys
        exit ;;
-    i*:windows32*:*)
-       # uname -m includes "-pc" on this system.
-       echo ${UNAME_MACHINE}-mingw32
-       exit ;;
     i*:PW*:*)
        echo ${UNAME_MACHINE}-pc-pw32
        exit ;;
@@ -873,27 +867,12 @@ EOF
                echo ia64-unknown-interix${UNAME_RELEASE}
                exit ;;
        esac ;;
-    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
-       echo i${UNAME_MACHINE}-pc-mks
-       exit ;;
-    8664:Windows_NT:*)
-       echo x86_64-pc-mks
-       exit ;;
-    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
-       # How do we know it's Interix rather than the generic POSIX subsystem?
-       # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
-       # UNAME_MACHINE based on the output of uname instead of i386?
-       echo i586-pc-interix
-       exit ;;
     i*:UWIN*:*)
        echo ${UNAME_MACHINE}-pc-uwin
        exit ;;
     amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
        echo x86_64-unknown-cygwin
        exit ;;
-    p*:CYGWIN*:*)
-       echo powerpcle-unknown-cygwin
-       exit ;;
     prep*:SunOS:5.*:*)
        echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
        exit ;;
@@ -1096,7 +1075,7 @@ EOF
     i*86:*DOS:*:*)
        echo ${UNAME_MACHINE}-pc-msdosdjgpp
        exit ;;
-    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+    i*86:*:4.*:*)
        UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
        if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
                echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
@@ -1303,14 +1282,21 @@ EOF
        if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
            if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
                if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-                   (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
-                   grep IS_64BIT_ARCH >/dev/null
+                      (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+                      grep IS_64BIT_ARCH >/dev/null
                then
                    case $UNAME_PROCESSOR in
                        i386) UNAME_PROCESSOR=x86_64 ;;
                        powerpc) UNAME_PROCESSOR=powerpc64 ;;
                    esac
                fi
+               # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
+               if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
+                      (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+                      grep IS_PPC >/dev/null
+               then
+                   UNAME_PROCESSOR=powerpc
+               fi
            fi
        elif test "$UNAME_PROCESSOR" = i386 ; then
            # Avoid executing cc on OS X 10.9, as it ships with a stub
@@ -1334,15 +1320,18 @@ EOF
     *:QNX:*:4*)
        echo i386-pc-qnx
        exit ;;
-    NEO-?:NONSTOP_KERNEL:*:*)
+    NEO-*:NONSTOP_KERNEL:*:*)
        echo neo-tandem-nsk${UNAME_RELEASE}
        exit ;;
     NSE-*:NONSTOP_KERNEL:*:*)
        echo nse-tandem-nsk${UNAME_RELEASE}
        exit ;;
-    NSR-?:NONSTOP_KERNEL:*:*)
+    NSR-*:NONSTOP_KERNEL:*:*)
        echo nsr-tandem-nsk${UNAME_RELEASE}
        exit ;;
+    NSX-*:NONSTOP_KERNEL:*:*)
+       echo nsx-tandem-nsk${UNAME_RELEASE}
+       exit ;;
     *:NonStop-UX:*:*)
        echo mips-compaq-nonstopux
        exit ;;
@@ -1414,16 +1403,28 @@ EOF
        exit ;;
 esac
 
+echo "$0: unable to guess system type" >&2
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}" in
+    mips:Linux | mips64:Linux)
+       # If we got here on MIPS GNU/Linux, output extra information.
+       cat >&2 <<EOF
+
+NOTE: MIPS GNU/Linux systems require a C compiler to fully recognize
+the system type. Please install a C compiler and try again.
+EOF
+       ;;
+esac
+
 cat >&2 <<EOF
-$0: unable to guess system type
 
 This script (version $timestamp), has failed to recognize the
-operating system you are using. If your script is old, overwrite
-config.guess and config.sub with the latest versions from:
+operating system you are using. If your script is old, overwrite *all*
+copies of config.guess and config.sub with the latest versions from:
 
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 and
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
 If $0 has already been updated, send the following data and any
 information you think might be pertinent to config-patches@gnu.org to
@@ -1455,7 +1456,7 @@ EOF
 exit 1
 
 # Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'write-file-functions 'time-stamp)
 # time-stamp-start: "timestamp='"
 # time-stamp-format: "%:y-%02m-%02d"
 # time-stamp-end: "'"
index dd2ca93..00f68b8 100755 (executable)
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright 1992-2016 Free Software Foundation, Inc.
+#   Copyright 1992-2017 Free Software Foundation, Inc.
 
-timestamp='2016-11-04'
+timestamp='2017-11-23'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -15,7 +15,7 @@ timestamp='2016-11-04'
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, see <https://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -33,7 +33,7 @@ timestamp='2016-11-04'
 # Otherwise, we print the canonical config type on stdout and succeed.
 
 # You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
@@ -57,7 +57,7 @@ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
 
 Canonicalize a configuration name.
 
-Operation modes:
+Options:
   -h, --help         print this help, then exit
   -t, --time-stamp   print date of last modification, then exit
   -v, --version      print version number, then exit
@@ -67,7 +67,7 @@ Report bugs and patches to <config-patches@gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright 1992-2016 Free Software Foundation, Inc.
+Copyright 1992-2017 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -229,9 +229,6 @@ case $os in
        -ptx*)
                basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
                ;;
-       -windowsnt*)
-               os=`echo $os | sed -e 's/windowsnt/winnt/'`
-               ;;
        -psos*)
                os=-psos
                ;;
@@ -263,7 +260,7 @@ case $basic_machine in
        | fido | fr30 | frv | ft32 \
        | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
        | hexagon \
-       | i370 | i860 | i960 | ia64 \
+       | i370 | i860 | i960 | ia16 | ia64 \
        | ip2k | iq2000 \
        | k1om \
        | le32 | le64 \
@@ -315,7 +312,7 @@ case $basic_machine in
        | ubicom32 \
        | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
        | visium \
-       | we32k \
+       | wasm32 \
        | x86 | xc16x | xstormy16 | xtensa \
        | z8k | z80)
                basic_machine=$basic_machine-unknown
@@ -388,7 +385,7 @@ case $basic_machine in
        | h8300-* | h8500-* \
        | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
        | hexagon-* \
-       | i*86-* | i860-* | i960-* | ia64-* \
+       | i*86-* | i860-* | i960-* | ia16-* | ia64-* \
        | ip2k-* | iq2000-* \
        | k1om-* \
        | le32-* | le64-* \
@@ -446,6 +443,7 @@ case $basic_machine in
        | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
        | vax-* \
        | visium-* \
+       | wasm32-* \
        | we32k-* \
        | x86-* | x86_64-* | xc16x-* | xps100-* \
        | xstormy16-* | xtensa*-* \
@@ -641,7 +639,7 @@ case $basic_machine in
                basic_machine=rs6000-bull
                os=-bosx
                ;;
-       dpx2* | dpx2*-bull)
+       dpx2*)
                basic_machine=m68k-bull
                os=-sysv3
                ;;
@@ -903,7 +901,7 @@ case $basic_machine in
                basic_machine=v70-nec
                os=-sysv
                ;;
-       next | m*-next )
+       next | m*-next)
                basic_machine=m68k-next
                case $os in
                    -nextstep* )
@@ -948,6 +946,9 @@ case $basic_machine in
        nsr-tandem)
                basic_machine=nsr-tandem
                ;;
+       nsx-tandem)
+               basic_machine=nsx-tandem
+               ;;
        op50n-* | op60c-*)
                basic_machine=hppa1.1-oki
                os=-proelf
@@ -1243,6 +1244,9 @@ case $basic_machine in
                basic_machine=a29k-wrs
                os=-vxworks
                ;;
+       wasm32)
+               basic_machine=wasm32-unknown
+               ;;
        w65*)
                basic_machine=w65-wdc
                os=-none
@@ -1251,6 +1255,9 @@ case $basic_machine in
                basic_machine=hppa1.1-winbond
                os=-proelf
                ;;
+       x64)
+               basic_machine=x86_64-pc
+               ;;
        xbox)
                basic_machine=i686-pc
                os=-mingw32
@@ -1358,8 +1365,8 @@ esac
 if [ x"$os" != x"" ]
 then
 case $os in
-       # First match some system type aliases
-       # that might get confused with valid system types.
+       # First match some system type aliases that might get confused
+       # with valid system types.
        # -solaris* is a basic system type, with this one exception.
        -auroraux)
                os=-auroraux
@@ -1379,9 +1386,9 @@ case $os in
        -gnu/linux*)
                os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
                ;;
-       # First accept the basic system types.
+       # Now accept the basic system types.
        # The portable systems comes first.
-       # Each alternative MUST END IN A *, to match a version number.
+       # Each alternative MUST end in a * to match a version number.
        # -sysv* is not here because it comes later, after sysvr4.
        -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
              | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
@@ -1397,7 +1404,7 @@ case $os in
              | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
              | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
              | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-             | -chorusos* | -chorusrdb* | -cegcc* \
+             | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \
              | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
              | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
              | -linux-newlib* | -linux-musl* | -linux-uclibc* \
@@ -1409,7 +1416,7 @@ case $os in
              | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
              | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
              | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
-             | -onefs* | -tirtos* | -phoenix* | -fuchsia*)
+             | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox*)
        # Remember, each alternative MUST END IN *, to match a version number.
                ;;
        -qnx*)
@@ -1484,7 +1491,7 @@ case $os in
        -nova*)
                os=-rtmk-nova
                ;;
-       -ns2 )
+       -ns2)
                os=-nextstep2
                ;;
        -nsk*)
@@ -1539,6 +1546,19 @@ case $os in
        -dicos*)
                os=-dicos
                ;;
+       -pikeos*)
+               # Until real need of OS specific support for
+               # particular features comes up, bare metal
+               # configurations are quite functional.
+               case $basic_machine in
+                   arm*)
+                       os=-eabi
+                       ;;
+                   *)
+                       os=-elf
+                       ;;
+               esac
+               ;;
        -nacl*)
                ;;
        -ios)
@@ -1638,6 +1658,9 @@ case $basic_machine in
        sparc-* | *-sun)
                os=-sunos4.1.1
                ;;
+       pru-*)
+               os=-elf
+               ;;
        *-be)
                os=-beos
                ;;
@@ -1683,7 +1706,7 @@ case $basic_machine in
        m88k-omron*)
                os=-luna
                ;;
-       *-next )
+       *-next)
                os=-nextstep
                ;;
        *-sequent)
@@ -1818,7 +1841,7 @@ echo $basic_machine$os
 exit
 
 # Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'write-file-functions 'time-stamp)
 # time-stamp-start: "timestamp='"
 # time-stamp-format: "%:y-%02m-%02d"
 # time-stamp-end: "'"
index 43a70a0..3b074f3 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for pygobject 3.27.1.
+# Generated by GNU Autoconf 2.69 for pygobject 3.27.2.
 #
 # Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=pygobject>.
 #
@@ -591,8 +591,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='pygobject'
 PACKAGE_TARNAME='pygobject'
-PACKAGE_VERSION='3.27.1'
-PACKAGE_STRING='pygobject 3.27.1'
+PACKAGE_VERSION='3.27.2'
+PACKAGE_STRING='pygobject 3.27.2'
 PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=pygobject'
 PACKAGE_URL='https://wiki.gnome.org/Projects/PyGObject/'
 
@@ -675,7 +675,6 @@ GI_LIBS
 GI_CFLAGS
 GIO_LIBS
 GIO_CFLAGS
-LIBFFI_PC
 FFI_LIBS
 FFI_CFLAGS
 PYTHON_VALGRIND_SUPP
@@ -1419,7 +1418,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures pygobject 3.27.1 to adapt to many kinds of systems.
+\`configure' configures pygobject 3.27.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1490,7 +1489,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of pygobject 3.27.1:";;
+     short | recursive ) echo "Configuration of pygobject 3.27.2:";;
    esac
   cat <<\_ACEOF
 
@@ -1635,7 +1634,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-pygobject configure 3.27.1
+pygobject configure 3.27.2
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1913,7 +1912,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by pygobject $as_me 3.27.1, which was
+It was created by pygobject $as_me 3.27.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2291,9 +2290,9 @@ $as_echo "#define PYGOBJECT_MINOR_VERSION 27" >>confdefs.h
 PYGOBJECT_MINOR_VERSION=27
 
 
-$as_echo "#define PYGOBJECT_MICRO_VERSION 1" >>confdefs.h
+$as_echo "#define PYGOBJECT_MICRO_VERSION 2" >>confdefs.h
 
-PYGOBJECT_MICRO_VERSION=1
+PYGOBJECT_MICRO_VERSION=2
 
 
 ac_config_headers="$ac_config_headers config.h"
@@ -2813,7 +2812,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='pygobject'
- VERSION='3.27.1'
+ VERSION='3.27.2'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -14139,8 +14138,6 @@ else
 $as_echo "yes" >&6; }
 
 fi
-LIBFFI_PC=libffi
-
 
 
 
@@ -16934,7 +16931,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by pygobject $as_me 3.27.1, which was
+This file was extended by pygobject $as_me 3.27.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -17001,7 +16998,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-pygobject config.status 3.27.1
+pygobject config.status 3.27.2
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
index f55a54a..37eb0c8 100644 (file)
@@ -18,7 +18,7 @@ m4_define(python3_min_ver, 3.4)
 dnl the pygobject version number
 m4_define(pygobject_major_version, 3)
 m4_define(pygobject_minor_version, 27)
-m4_define(pygobject_micro_version, 1)
+m4_define(pygobject_micro_version, 2)
 m4_define(pygobject_version, pygobject_major_version.pygobject_minor_version.pygobject_micro_version)
 
 dnl versions of packages we require ...
@@ -136,11 +136,9 @@ AC_SUBST([PYTHON_VALGRIND_SUPP])
 
 dnl libffi
 PKG_CHECK_MODULES(FFI, libffi >= libffi_required_version)
-LIBFFI_PC=libffi
 
 AC_SUBST(FFI_CFLAGS)
 AC_SUBST(FFI_LIBS)
-AC_SUBST(LIBFFI_PC)
 
 dnl gio
 PKG_CHECK_MODULES(GIO, gio-2.0 >= gio_required_version)
index 7b13225..91dc99c 100644 (file)
@@ -6,7 +6,7 @@ all: _build
 images/%.svg: images/%.dia
        dia $< --export=$@ --filter=dia-svg
 
-_build: Makefile *.rst devguide/*.rst guide/*.rst conf.py images/*.png $(DIA_SVGS) ../README.rst
+_build: Makefile *.rst devguide/*.rst guide/*.rst conf.py images/*.png $(DIA_SVGS) ../README.rst ../NEWS
        sphinx-build -b html . _build
 
 linkcheck:
diff --git a/docs/bugs_repo.rst b/docs/bugs_repo.rst
new file mode 100644 (file)
index 0000000..d18b8f0
--- /dev/null
@@ -0,0 +1,31 @@
+==========================
+Bug Tracker / Git / Source
+==========================
+
+.. include:: icons.rst
+
+|bug-logo| Bug Tracker
+----------------------
+
+We use the GNOME GitLab issue tracker:
+
+* List of existing issues: https://gitlab.gnome.org/GNOME/pygobject/issues
+* Create a new issue: https://gitlab.gnome.org/GNOME/pygobject/issues/new
+
+
+|github-logo| Git Repo
+----------------------
+
+PyGObject uses `Git <https://git-scm.com/>`_ for source control and the git
+repo is hosted on the `GNOME Gitlab instance <https://gitlab.gnome.org/>`__:
+
+* https://gitlab.gnome.org/GNOME/pygobject
+* ``git clone https://gitlab.gnome.org/GNOME/pygobject.git``
+
+
+|source-logo| Source Tarballs
+-----------------------------
+
+Release tarballs of all releases can be found on the GNOME server:
+
+https://ftp.gnome.org/pub/GNOME/sources/pygobject
index 2c4f6b1..0e78f5e 100644 (file)
@@ -2,9 +2,10 @@ Changelog
 =========
 
 Versions with an odd minor version are unstable releases (e.g. 3.27.x) while
-versions with even minor version are stable releases (e.g. 3.28.x)
+versions with even minor version are stable releases (e.g. 3.28.x). This list
+is sorted by release date.
 
-For more details see the GIT log: https://git.gnome.org//browse/pygobject/log
+For more details see the GIT log:
+https://gitlab.gnome.org/GNOME/pygobject/commits/master
 
 .. include:: ../NEWS
-    :code:
index aff0fff..f0e90d9 100644 (file)
@@ -32,6 +32,12 @@ html_context = {
         'https://quodlibet.github.io/fonts/font-mfizz.css',
         '_static/extra.css',
     ],
+    "display_gitlab": True,
+    "gitlab_user": "GNOME",
+    "gitlab_repo": "pygobject",
+    "gitlab_version": "master",
+    "conf_py_path": "/docs/",
+    "gitlab_host": "gitlab.gnome.org",
 }
 
 html_static_path = [
@@ -44,7 +50,11 @@ html_theme_options = {
 }
 
 extlinks = {
-    'gnomebug': ('https://bugzilla.gnome.org/show_bug.cgi?id=%s', '#'),
+    'bzbug': ('https://bugzilla.gnome.org/show_bug.cgi?id=%s', 'bz#'),
+    'issue': ('https://gitlab.gnome.org/GNOME/pygobject/issues/%s', 'issue#'),
+    'mr': (
+        'https://gitlab.gnome.org/GNOME/pygobject/merge_requests/%s', 'mr#'),
+    'user': ('https://gitlab.gnome.org/%s', ''),
 }
 
 suppress_warnings = ["image.nonlocal_uri"]
index 87f8600..f3ac215 100644 (file)
@@ -2,55 +2,58 @@
 Building & Testing
 ==================
 
-Building with Autotools
------------------------
+Using Autotools
+---------------
 
-Building for Python 2:
-
-::
+.. code:: shell
 
+    # Building for Python 2
     ./autogen.sh --with-python=python2
     make
 
-Building for Python 3:
-
-::
-
+    # Building for Python 3
     ./autogen.sh --with-python=python3
     make
 
+    # Executing some code after the build
+    PYTHONPATH=. python3 foo.py
 
-Building with Setuptools
-------------------------
-
-Building in the source directory:
-
-::
-
-    python setup.py buildext --inplace
+    # To run the test suite
+    make check
 
+    # To test only a specific file/class/function::
+    make check TEST_NAMES=test_gi
+    make check TEST_NAMES=test_gi.TestUtf8
+    make check TEST_NAMES=test_gi.TestUtf8.test_utf8_full_return
 
-Testing
--------
+    # To execute all the tests in a gdb session
+    make check.gdb
 
-To run the test suite::
+    # To executes all the tests in valgrind
+    make check.valgrind
 
-    make check
+    # To execute flake8 tests
+    make check.quality
 
-To test only a specific file/class/function::
 
-    make check TEST_NAMES=test_gi
-    make check TEST_NAMES=test_gi.TestUtf8
-    make check TEST_NAMES=test_gi.TestUtf8.test_utf8_full_return
+Using Setuptools
+----------------
 
-To execute all the tests in a gdb session::
+.. code:: shell
 
-    make check.gdb
+    # Build in-tree
+    python3 setup.py build_ext --inplace
 
-To executes all the tests in valgrind::
+    # Executing some code after the build
+    PYTHONPATH=. python3 foo.py
 
-    make check.valgrind
+    # Running tests
+    python3 setup.py test
 
-To execute pyflakes and pep8 tests::
+    # To test only a specific file/class/function::
+    TEST_NAMES=test_gi python3 python3 setup.py test
+    TEST_NAMES=test_gi.TestUtf8 python3 setup.py test
+    TEST_NAMES=test_gi.TestUtf8.test_utf8_full_return python3 setup.py test
 
-    make check.quality
+    # Running flake8 tests
+    python3 setup.py quality
index 4d3985f..9ca37dd 100644 (file)
@@ -15,7 +15,7 @@ on ":ref:`gettingstarted`" first, as they are a pre-requirement.
 
     sudo apt build-dep pygobject
     sudo apt install autoconf-archive
-    git clone https://git.gnome.org/browse/pygobject
+    git clone https://gitlab.gnome.org/GNOME/pygobject.git
     cd pygobject
     ./autogen.sh
     make
@@ -31,7 +31,7 @@ on ":ref:`gettingstarted`" first, as they are a pre-requirement.
         mingw-w64-i686-python3 mingw-w64-i686-python3-cairo \
         mingw-w64-i686-gobject-introspection mingw-w64-i686-gtk3 \
         mingw-w64-i686-libffi autoconf-archive
-    git clone https://git.gnome.org/browse/pygobject
+    git clone https://gitlab.gnome.org/GNOME/pygobject.git
     cd pygobject
     ./autogen.sh
     make
index 9315a69..35f3f4b 100644 (file)
@@ -11,19 +11,19 @@ is also a good idea to study the `Zen of Python by Tim Peters
 In general, overrides should be minimized and preference should always be
 placed on updating the underlying API to be more bindable, adding features to
 GI to support the requirement, or adding mechanical features to PyGObject
-which can apply generically to all overrides (:gnomebug:`721226` and
-:gnomebug:`640812`).
+which can apply generically to all overrides (:bzbug:`721226` and
+:bzbug:`640812`).
 
 If a GI feature or more bindable API for a library is in the works, it is a
 good idea to avoid the temptation to add temporary short term workarounds in
 overrides. The reason is this can creaste unnecessary conflicts when the
-bindable API becomes a reality (:gnomebug:`707280`).
+bindable API becomes a reality (:bzbug:`707280`).
 
 * Minimize class overrides when possible.
 
   *Reason*: Class overrides incur a load time performance penalty because
   they require the classes GType and all of the Python method bindings to be
-  created. See :gnomebug:`705810`
+  created. See :bzbug:`705810`
 
 * Prefer monkey patching methods on repository classes over inheritance.
 
@@ -36,13 +36,13 @@ bindable API becomes a reality (:gnomebug:`707280`).
 
 * Avoid overriding ``__init__``
   *Reason*: Sub-classing the overridden class then becomes challenging and
-  has the potential to cause bugs (see :gnomebug:`711487` and reasoning
+  has the potential to cause bugs (see :bzbug:`711487` and reasoning
   listed in https://wiki.gnome.org/Projects/PyGObject/InitializerDeprecations).
 
 * Unbindable functions which take variadic arguments are generally ok to add
   Python implementations, but keep in mind the prior noted guidelines. A lot
   of times adding bindable versions of the functions to the underlying library
-  which take a list is acceptable. For example: :gnomebug:`706119`. Another
+  which take a list is acceptable. For example: :bzbug:`706119`. Another
   problem here is if an override is added, then later a bindable version of
   the API is added which takes a list, there is a good chance we have to live
   with the override forever which masks a working version implemented by GI.
@@ -58,7 +58,7 @@ bindable API becomes a reality (:gnomebug:`707280`).
 
   *Reason*: This turns into a documentation discrepancy between the libraries
   API and the Python version of the API. Default value work should focus on
-  bug :gnomebug:`558620`, not cherry-picking individual Python functions and
+  bug :bzbug:`558620`, not cherry-picking individual Python functions and
   adding defaults.
 
 * Avoid implicit side effects to the Python standard library (or anywhere).
index 28527b6..a6b4e6d 100644 (file)
@@ -3,24 +3,8 @@ Overview
 ========
 
 
-Bug Tracker
------------
-
-You can search through the GNOME Bugzilla for existing bug reports:
-https://bugzilla.gnome.org/page.cgi?id=browse.html&product=pygobject
-
-You can also file a new bug report:
-https://bugzilla.gnome.org/enter_bug.cgi?product=pygobject
-
-
-Git Repos
----------
-
-PyGObject itself is hosted at https://git.gnome.org/browse/pygobject/
-
-In addition a GitHub organization exists which contains various related
-projects: https://github.com/pygobject
-
+See :doc:`/bugs_repo` for information on where to find the bug tracker and the
+source code.
 
 Continuous Testing
 ------------------
@@ -28,5 +12,5 @@ Continuous Testing
 The test suite gets regularly run on all supported platforms using
 https://github.com/pygobject/pygobject-ci
 
-There is currently no integration with bugzilla/git.gnome.org for this and the
-status has to be checked manually.
+There is currently no integration with the git repo for this and the status
+has to be checked manually.
index c6e95b2..fe2a6a4 100644 (file)
@@ -42,7 +42,7 @@ and their dependencies. Follow the instructions for your platform below.
 4) Execute ``pacman -S mingw-w64-i686-gtk3 mingw-w64-i686-python2-gobject mingw-w64-i686-python3-gobject``
 5) To test that GTK+3 is working you can run ``gtk3-demo``
 6) Copy the ``hello.py`` script you created to ``C:\msys64\home\<username>``
-7) In the mingw32 terminal execute ``python2 hello.py`` - a window should appear.
+7) In the mingw32 terminal execute ``python3 hello.py`` - a window should appear.
 
 .. figure:: images/start_windows.png
     :scale: 60%
@@ -56,7 +56,7 @@ and their dependencies. Follow the instructions for your platform below.
 1) Open a terminal
 2) Execute ``sudo apt install python-gi python-gi-cairo python3-gi python3-gi-cairo gir1.2-gtk-3.0``
 3) Change the directory to where your ``hello.py`` script can be found (e.g. ``cd Desktop``)
-4) Run ``python2 hello.py``
+4) Run ``python3 hello.py``
 
 .. figure:: images/start_linux.png
     :scale: 60%
@@ -70,7 +70,7 @@ and their dependencies. Follow the instructions for your platform below.
 1) Open a terminal
 2) Execute ``sudo dnf install pygobject3 python3-gobject gtk3``
 3) Change the directory to where your ``hello.py`` script can be found (e.g. ``cd Desktop``)
-4) Run ``python2 hello.py``
+4) Run ``python3 hello.py``
 
 
 .. _arch:
@@ -81,7 +81,7 @@ and their dependencies. Follow the instructions for your platform below.
 1) Open a terminal
 2) Execute ``sudo pacman -S python-gobject python2-gobject gtk3``
 3) Change the directory to where your ``hello.py`` script can be found (e.g. ``cd Desktop``)
-4) Run ``python2 hello.py``
+4) Run ``python3 hello.py``
 
 
 .. _opensuse:
@@ -92,7 +92,7 @@ and their dependencies. Follow the instructions for your platform below.
 1) Open a terminal
 2) Execute ``sudo zypper install python-gobject python3-gobject gtk3``
 3) Change the directory to where your ``hello.py`` script can be found (e.g. ``cd Desktop``)
-4) Run ``python2 hello.py``
+4) Run ``python3 hello.py``
 
 
 .. _macosx:
@@ -104,7 +104,7 @@ and their dependencies. Follow the instructions for your platform below.
 2) Open a terminal
 3) Execute ``brew install pygobject3 --with-python3 gtk+3`` to install for both python2 and python3
 4) Change the directory to where your ``hello.py`` script can be found (e.g. ``cd Desktop``)
-5) Run ``python2 hello.py``
+5) Run ``python3 hello.py``
 
 .. figure:: images/start_macos.png
     :scale: 70%
index 8ee1134..462ed85 100644 (file)
@@ -35,7 +35,7 @@ General Porting Tips
 PyGObject contains a shell script which can help you with the many naming
 differences between static and dynamic bindings:
 
-https://git.gnome.org/browse/pygobject/plain/tools/pygi-convert.sh
+https://gitlab.gnome.org/GNOME/pygobject/raw/master/tools/pygi-convert.sh
 
 ::
 
index 82e76a9..81fba33 100644 (file)
@@ -9,6 +9,7 @@
 
     getting_started
     changelog
+    bugs_repo
     guide/index
     devguide/index
     packagingguide
@@ -66,6 +67,7 @@ interface based on that information.
 Who Is Using PyGObject?
 -----------------------
 
+* `Anaconda <https://fedoraproject.org/wiki/Anaconda>`__ - an installation program used by Fedora, RHEL and others
 * `D-Feet <https://wiki.gnome.org/action/show/Apps/DFeet>`__ - an easy to use D-Bus debugger
 * `GNOME Music <https://wiki.gnome.org/Apps/Music>`__ - a music player for GNOME
 * `GNOME Tweak Tool <https://wiki.gnome.org/action/show/Apps/GnomeTweakTool>`__ - a tool to customize advanced GNOME 3 options
index c9cec1b..88f015f 100644 (file)
@@ -12,10 +12,14 @@ Making a Release
 #. Commit NEWS as ``"release 3.X.Y"`` and push
 #. Tag with: ``git tag -s 3.X.Y -m "release 3.X.Y"``
 #. Push tag with: ``git push origin 3.X.Y``
+#. In case of a stable release ``python3 setup.py distcheck`` and
+   ``python3 setup.py sdist register upload``
 #. Commit post-release version bump to configure.ac
 #. Upload tarball: ``scp pygobject-3.X.Y.tar.gz user@master.gnome.org:``
 #. Install tarball:
    ``ssh user@master.gnome.org 'ftpadmin install pygobject-3.X.Y.tar.gz'``
+#. In case the release happens on a stable branch copy the NEWS changes to
+   the master branch
 
 Based on https://wiki.gnome.org/MaintainersCorner/Releasing
 
index 54843be..644636c 100644 (file)
@@ -201,7 +201,6 @@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
 LCOV = @LCOV@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
-LIBFFI_PC = @LIBFFI_PC@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
index 1353573..134eba5 100644 (file)
@@ -362,7 +362,6 @@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
 LCOV = @LCOV@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
-LIBFFI_PC = @LIBFFI_PC@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
index 5f8853c..48ddee2 100644 (file)
@@ -535,11 +535,7 @@ _wrap_pyg_variant_type_from_string (PyObject *self, PyObject *args)
 
     py_type = _pygi_type_import_by_name ("GLib", "VariantType");
 
-    /* Pass the string directly and force a boxed copy. This works because
-     * GVariantType is just a char pointer. */
-    py_variant = _pygi_boxed_new ( (PyTypeObject *) py_type, type_string,
-                                   TRUE, /* copy_boxed */
-                                   0);   /* slice_allocated */
+    py_variant = _pygi_boxed_new ( (PyTypeObject *) py_type, type_string, FALSE, 0);
 
     return py_variant;
 }
index ba1b9fc..b3501ee 100644 (file)
@@ -168,7 +168,12 @@ pyg_object_set_property (GObject *object, guint property_id,
 
     state = PyGILState_Ensure();
 
-    object_wrapper = pygobject_new(object);
+    object_wrapper = g_object_get_qdata(object, pygobject_wrapper_key);
+
+    if (object_wrapper)
+      Py_INCREF (object_wrapper);
+    else
+      object_wrapper = pygobject_new(object);
 
     if (object_wrapper == NULL) {
        PyGILState_Release(state);
@@ -202,7 +207,12 @@ pyg_object_get_property (GObject *object, guint property_id,
 
     state = PyGILState_Ensure();
 
-    object_wrapper = pygobject_new(object);
+    object_wrapper = g_object_get_qdata(object, pygobject_wrapper_key);
+
+    if (object_wrapper)
+      Py_INCREF (object_wrapper);
+    else
+      object_wrapper = pygobject_new(object);
 
     if (object_wrapper == NULL) {
        PyGILState_Release(state);
index 52b6af3..b1ff24f 100644 (file)
@@ -102,127 +102,53 @@ class _VariantCreator(object):
         'v': GLib.Variant.new_variant,
     }
 
-    def _create(self, format, args):
-        """Create a GVariant object from given format and argument list.
+    def _create(self, format, value):
+        """Create a GVariant object from given format and a value that matches
+        the format.
 
         This method recursively calls itself for complex structures (arrays,
         dictionaries, boxed).
 
-        Return a tuple (variant, rest_format, rest_args) with the generated
-        GVariant, the remainder of the format string, and the remainder of the
-        arguments.
+        Returns the generated GVariant.
 
-        If args is None, then this won't actually consume any arguments, and
-        just parse the format string and generate empty GVariant structures.
-        This is required for creating empty dictionaries or arrays.
+        If value is None it will generate an empty GVariant container type.
         """
-        # leaves (simple types)
-        constructor = self._LEAF_CONSTRUCTORS.get(format[0])
-        if constructor:
-            if args is not None:
-                if not args:
-                    raise TypeError('not enough arguments for GVariant format string')
-                v = constructor(args[0])
-                return (v, format[1:], args[1:])
-            else:
-                return (None, format[1:], None)
-
-        if format[0] == '(':
-            return self._create_tuple(format, args)
-
-        if format.startswith('a{'):
-            return self._create_dict(format, args)
-
-        if format[0] == 'a':
-            return self._create_array(format, args)
-
-        raise NotImplementedError('cannot handle GVariant type ' + format)
-
-    def _create_tuple(self, format, args):
-        """Handle the case where the outermost type of format is a tuple."""
-
-        format = format[1:]  # eat the '('
-        if args is None:
-            # empty value: we need to call _create() to parse the subtype
-            rest_format = format
-            while rest_format:
-                if rest_format.startswith(')'):
-                    break
-                rest_format = self._create(rest_format, None)[1]
-            else:
-                raise TypeError('tuple type string not closed with )')
-
-            rest_format = rest_format[1:]  # eat the )
-            return (None, rest_format, None)
+        gvtype = GLib.VariantType(format)
+        if format in self._LEAF_CONSTRUCTORS:
+            return self._LEAF_CONSTRUCTORS[format](value)
+
+        # Since we discarded all leaf types, this must be a container
+        builder = GLib.VariantBuilder.new(gvtype)
+        if value is None:
+            return builder.end()
+
+        if gvtype.is_maybe():
+            builder.add_value(self._create(gvtype.element().dup_string(), value))
+            return builder.end()
+
+        if not isinstance(value, (dict, tuple, list)):
+            raise TypeError("Could not create array, tuple or dictionary entry from non iterable value %s %s" %
+                            (format, value))
+
+        if gvtype.is_tuple() and gvtype.n_items() != len(value):
+            raise TypeError("Tuple mismatches value's number of elements %s %s" % (format, value))
+        if gvtype.is_dict_entry() and len(value) != 2:
+            raise TypeError("Dictionary entries must have two elements %s %s" % (format, value))
+
+        if gvtype.is_array():
+            element_type = gvtype.element().dup_string()
+            if isinstance(value, dict):
+                value = value.items()
+            for i in value:
+                builder.add_value(self._create(element_type, i))
         else:
-            if not args or not isinstance(args[0], tuple):
-                raise TypeError('expected tuple argument')
-
-            builder = GLib.VariantBuilder.new(variant_type_from_string('r'))
-            for i in range(len(args[0])):
-                if format.startswith(')'):
-                    raise TypeError('too many arguments for tuple signature')
-
-                (v, format, _) = self._create(format, args[0][i:])
-                builder.add_value(v)
-            args = args[1:]
-            if not format.startswith(')'):
-                raise TypeError('tuple type string not closed with )')
-
-            rest_format = format[1:]  # eat the )
-            return (builder.end(), rest_format, args)
-
-    def _create_dict(self, format, args):
-        """Handle the case where the outermost type of format is a dict."""
-
-        builder = None
-        if args is None or not args[0]:
-            # empty value: we need to call _create() to parse the subtype,
-            # and specify the element type precisely
-            rest_format = self._create(format[2:], None)[1]
-            rest_format = self._create(rest_format, None)[1]
-            if not rest_format.startswith('}'):
-                raise TypeError('dictionary type string not closed with }')
-            rest_format = rest_format[1:]  # eat the }
-            element_type = format[:len(format) - len(rest_format)]
-            builder = GLib.VariantBuilder.new(variant_type_from_string(element_type))
-        else:
-            builder = GLib.VariantBuilder.new(variant_type_from_string('a{?*}'))
-            for k, v in args[0].items():
-                (key_v, rest_format, _) = self._create(format[2:], [k])
-                (val_v, rest_format, _) = self._create(rest_format, [v])
-
-                if not rest_format.startswith('}'):
-                    raise TypeError('dictionary type string not closed with }')
-                rest_format = rest_format[1:]  # eat the }
-
-                entry = GLib.VariantBuilder.new(variant_type_from_string('{?*}'))
-                entry.add_value(key_v)
-                entry.add_value(val_v)
-                builder.add_value(entry.end())
-
-        if args is not None:
-            args = args[1:]
-        return (builder.end(), rest_format, args)
-
-    def _create_array(self, format, args):
-        """Handle the case where the outermost type of format is an array."""
-
-        builder = None
-        if args is None or not args[0]:
-            # empty value: we need to call _create() to parse the subtype,
-            # and specify the element type precisely
-            rest_format = self._create(format[1:], None)[1]
-            element_type = format[:len(format) - len(rest_format)]
-            builder = GLib.VariantBuilder.new(variant_type_from_string(element_type))
-        else:
-            builder = GLib.VariantBuilder.new(variant_type_from_string('a*'))
-            for i in range(len(args[0])):
-                (v, rest_format, _) = self._create(format[1:], args[0][i:])
-                builder.add_value(v)
-        if args is not None:
-            args = args[1:]
-        return (builder.end(), rest_format, args)
+            remainer_format = format[1:]
+            for i in value:
+                dup = variant_type_from_string(remainer_format).dup_string()
+                builder.add_value(self._create(dup, i))
+                remainer_format = remainer_format[len(dup):]
+
+        return builder.end()
 
 
 class Variant(GLib.Variant):
@@ -238,10 +164,10 @@ class Variant(GLib.Variant):
           GLib.Variant('(asa{sv})', ([], {'foo': GLib.Variant('b', True),
                                           'bar': GLib.Variant('i', 2)}))
         """
+        if not GLib.VariantType.string_is_valid(format_string):
+            raise TypeError("Invalid GVariant format string '%s'", format_string)
         creator = _VariantCreator()
-        (v, rest_format, _) = creator._create(format_string, [value])
-        if rest_format:
-            raise TypeError('invalid remaining format string: "%s"' % rest_format)
+        v = creator._create(format_string, value)
         v.format_string = format_string
         return v
 
@@ -338,8 +264,9 @@ class Variant(GLib.Variant):
 
         # maybe
         if self.get_type_string().startswith('m'):
-            m = self.get_maybe()
-            return m.unpack() if m else None
+            if not self.n_children():
+                return None
+            return self.get_child_value(0).unpack()
 
         raise NotImplementedError('unsupported GVariant type ' + self.get_type_string())
 
@@ -595,6 +522,10 @@ class Source(GLib.Source):
     def __init__(self, *args, **kwargs):
         return super(Source, self).__init__()
 
+    def __del__(self):
+        if hasattr(self, '__pygi_custom_source'):
+            self.unref()
+
     def set_callback(self, fn, user_data=None):
         if hasattr(self, '__pygi_custom_source'):
             # use our custom pyg_source_set_callback() if for a GSource object
index c252bfa..bfcf7cc 100644 (file)
@@ -221,9 +221,6 @@ class Value(GObjectModule.Value):
         if self._free_on_dealloc and self.g_type != TYPE_INVALID:
             self.unset()
 
-        # We must call base class __del__() after unset.
-        super(Value, self).__del__()
-
     def set_boxed(self, boxed):
         # Workaround the introspection marshalers inability to know
         # these methods should be marshaling boxed types. This is because
index c495fd1..3709244 100644 (file)
@@ -1475,6 +1475,8 @@ class Adjustment(Gtk.Adjustment):
         # was set, we set it again here.
         if 'value' in kwargs:
             self.set_value(kwargs['value'])
+        elif len(args) >= 1:
+            self.set_value(args[0])
 
 
 Adjustment = override(Adjustment)
index 8f6028b..8a8e319 100644 (file)
@@ -234,7 +234,6 @@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
 LCOV = @LCOV@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
-LIBFFI_PC = @LIBFFI_PC@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
index e55f9f6..0f6c6d8 100644 (file)
@@ -505,7 +505,8 @@ static PyObject *
 _pygi_marshal_to_py_array (PyGIInvokeState   *state,
                            PyGICallableCache *callable_cache,
                            PyGIArgCache      *arg_cache,
-                           GIArgument        *arg)
+                           GIArgument        *arg,
+                           gpointer          *cleanup_data)
 {
     GArray *array_;
     PyObject *py_obj = NULL;
@@ -575,11 +576,14 @@ _pygi_marshal_to_py_array (PyGIInvokeState   *state,
             gsize item_size;
             PyGIMarshalToPyFunc item_to_py_marshaller;
             PyGIArgCache *item_arg_cache;
+            GPtrArray *item_cleanups;
 
             py_obj = PyList_New (array_->len);
             if (py_obj == NULL)
                 goto err;
 
+            item_cleanups = g_ptr_array_sized_new (array_->len);
+            *cleanup_data = item_cleanups;
 
             item_arg_cache = seq_cache->item_cache;
             item_to_py_marshaller = item_arg_cache->to_py_marshaller;
@@ -589,6 +593,7 @@ _pygi_marshal_to_py_array (PyGIInvokeState   *state,
             for (i = 0; i < array_->len; i++) {
                 GIArgument item_arg = {0};
                 PyObject *py_item;
+                gpointer item_cleanup_data = NULL;
 
                 /* If we are receiving an array of pointers, simply assign the pointer
                  * and move on, letting the per-item marshaler deal with the
@@ -632,7 +637,10 @@ _pygi_marshal_to_py_array (PyGIInvokeState   *state,
                 py_item = item_to_py_marshaller ( state,
                                                 callable_cache,
                                                 item_arg_cache,
-                                                &item_arg);
+                                                &item_arg,
+                                                &item_cleanup_data);
+
+                g_ptr_array_index (item_cleanups, i) = item_cleanup_data;
 
                 if (py_item == NULL) {
                     Py_CLEAR (py_obj);
@@ -640,6 +648,8 @@ _pygi_marshal_to_py_array (PyGIInvokeState   *state,
                     if (array_cache->array_type == GI_ARRAY_TYPE_C)
                         g_array_unref (array_);
 
+                    g_ptr_array_unref (item_cleanups);
+
                     goto err;
                 }
                 PyList_SET_ITEM (py_obj, i, py_item);
@@ -660,7 +670,7 @@ err:
         /* clean up unprocessed items */
         if (seq_cache->item_cache->to_py_cleanup != NULL) {
             guint j;
-            PyGIMarshalCleanupFunc cleanup_func = seq_cache->item_cache->to_py_cleanup;
+            PyGIMarshalToPyCleanupFunc cleanup_func = seq_cache->item_cache->to_py_cleanup;
             for (j = processed_items; j < array_->len; j++) {
                 cleanup_func (state,
                               seq_cache->item_cache,
@@ -711,7 +721,7 @@ _wrap_c_array (PyGIInvokeState   *state,
 static void
 _pygi_marshal_cleanup_to_py_array (PyGIInvokeState *state,
                                    PyGIArgCache    *arg_cache,
-                                   PyObject        *dummy,
+                                   gpointer         cleanup_data,
                                    gpointer         data,
                                    gboolean         was_processed)
 {
@@ -737,17 +747,19 @@ _pygi_marshal_cleanup_to_py_array (PyGIInvokeState *state,
         }
 
         if (sequence_cache->item_cache->to_py_cleanup != NULL) {
+            GPtrArray *item_cleanups = (GPtrArray *) cleanup_data;
             gsize i;
             guint len = (array_ != NULL) ? array_->len : ptr_array_->len;
 
-            PyGIMarshalCleanupFunc cleanup_func = sequence_cache->item_cache->to_py_cleanup;
+            PyGIMarshalToPyCleanupFunc cleanup_func = sequence_cache->item_cache->to_py_cleanup;
             for (i = 0; i < len; i++) {
                 cleanup_func (state,
                               sequence_cache->item_cache,
-                              NULL,
+                              g_ptr_array_index(item_cleanups, i),
                               (array_ != NULL) ? g_array_index (array_, gpointer, i) : g_ptr_array_index (ptr_array_, i),
                               was_processed);
             }
+            g_ptr_array_unref (item_cleanups);
         }
 
         if (array_ != NULL)
index 6d4e64e..ddb02f9 100644 (file)
@@ -684,7 +684,8 @@ static PyObject *
 _pygi_marshal_to_py_void (PyGIInvokeState   *state,
                           PyGICallableCache *callable_cache,
                           PyGIArgCache      *arg_cache,
-                          GIArgument        *arg)
+                          GIArgument        *arg,
+                          gpointer          *cleanup_data)
 {
     if (arg_cache->is_pointer) {
         return PyLong_FromVoidPtr (arg->v_pointer);
@@ -828,7 +829,8 @@ PyObject *
 _pygi_marshal_to_py_basic_type_cache_adapter (PyGIInvokeState   *state,
                                               PyGICallableCache *callable_cache,
                                               PyGIArgCache      *arg_cache,
-                                              GIArgument        *arg)
+                                              GIArgument        *arg,
+                                              gpointer          *cleanup_data)
 {
     return _pygi_marshal_to_py_basic_type (arg,
                                             arg_cache->type_tag,
@@ -838,7 +840,7 @@ _pygi_marshal_to_py_basic_type_cache_adapter (PyGIInvokeState   *state,
 static void
 _pygi_marshal_cleanup_to_py_utf8 (PyGIInvokeState *state,
                                   PyGIArgCache    *arg_cache,
-                                  PyObject        *dummy,
+                                  gpointer         cleanup_data,
                                   gpointer         data,
                                   gboolean         was_processed)
 {
index 466c7d4..62f11c6 100644 (file)
@@ -43,7 +43,8 @@ PyObject *_pygi_marshal_to_py_basic_type               (GIArgument    *arg,
 PyObject *_pygi_marshal_to_py_basic_type_cache_adapter (PyGIInvokeState   *state,
                                                         PyGICallableCache *callable_cache,
                                                         PyGIArgCache      *arg_cache,
-                                                        GIArgument        *arg);
+                                                        GIArgument        *arg,
+                                                        gpointer          *cleanup_data);
 
 PyGIArgCache *pygi_arg_basic_type_new_from_info        (GITypeInfo    *type_info,
                                                         GIArgInfo     *arg_info,   /* may be null */
index e9014f2..599d6d3 100644 (file)
@@ -42,6 +42,8 @@ boxed_del (PyGIBoxed *self)
     if ( ( (PyGBoxed *) self)->free_on_dealloc && boxed != NULL) {
         if (self->slice_allocated) {
             g_slice_free1 (self->size, boxed);
+            self->slice_allocated = FALSE;
+            self->size = 0;
         } else {
             g_type = pyg_type_from_object ( (PyObject *) self);
             g_boxed_free (g_type, boxed);
@@ -113,7 +115,7 @@ _boxed_new (PyTypeObject *type,
         goto out;
     }
 
-    self = (PyGIBoxed *) _pygi_boxed_new (type, boxed, FALSE, size);
+    self = (PyGIBoxed *) _pygi_boxed_new (type, boxed, TRUE, size);
     if (self == NULL) {
         g_slice_free1 (size, boxed);
         goto out;
@@ -149,48 +151,30 @@ _boxed_init (PyObject *self,
 PYGLIB_DEFINE_TYPE("gi.Boxed", PyGIBoxed_Type, PyGIBoxed);
 
 PyObject *
-_pygi_boxed_new (PyTypeObject *pytype,
+_pygi_boxed_new (PyTypeObject *type,
                  gpointer      boxed,
-                 gboolean      copy_boxed,
+                 gboolean      free_on_dealloc,
                  gsize         allocated_slice)
 {
     PyGIBoxed *self;
-    GType gtype;
 
     if (!boxed) {
         Py_RETURN_NONE;
     }
 
-    if (!PyType_IsSubtype (pytype, &PyGIBoxed_Type)) {
+    if (!PyType_IsSubtype (type, &PyGIBoxed_Type)) {
         PyErr_SetString (PyExc_TypeError, "must be a subtype of gi.Boxed");
         return NULL;
     }
 
-    gtype = pyg_type_from_object ((PyObject *)pytype);
-
-    /* Boxed objects with slice allocation means they come from caller allocated
-     * out arguments. In this case copy_boxed does not make sense because we
-     * already own the slice allocated memory and we should be receiving full
-     * ownership transfer. */
-    if (copy_boxed) {
-        g_assert (allocated_slice == 0);
-        boxed = g_boxed_copy (gtype, boxed);
-    }
-
-    self = (PyGIBoxed *) pytype->tp_alloc (pytype, 0);
+    self = (PyGIBoxed *) type->tp_alloc (type, 0);
     if (self == NULL) {
         return NULL;
     }
 
-    /* We always free on dealloc because we always own the memory due to:
-     *   1) copy_boxed == TRUE
-     *   2) allocated_slice > 0
-     *   3) otherwise the mode is assumed "transfer everything".
-     */
-    ((PyGBoxed *)self)->free_on_dealloc = TRUE;
-    ((PyGBoxed *)self)->gtype = gtype;
+    ( (PyGBoxed *) self)->gtype = pyg_type_from_object ( (PyObject *) type);
+    ( (PyGBoxed *) self)->free_on_dealloc = free_on_dealloc;
     pyg_boxed_set_ptr (self, boxed);
-
     if (allocated_slice > 0) {
         self->size = allocated_slice;
         self->slice_allocated = TRUE;
@@ -221,7 +205,11 @@ void
 _pygi_boxed_copy_in_place (PyGIBoxed *self)
 {
     PyGBoxed *pygboxed = (PyGBoxed *)self;
-    gpointer copy = g_boxed_copy (pygboxed->gtype, pyg_boxed_get_ptr (self));
+    gpointer ptr = pyg_boxed_get_ptr (self);
+    gpointer copy = NULL;
+
+    if (ptr)
+        copy = g_boxed_copy (pygboxed->gtype, ptr);
 
     boxed_del (self);
     pyg_boxed_set_ptr (pygboxed, copy);
index 8679322..5c04b5c 100644 (file)
@@ -34,9 +34,9 @@ typedef struct {
 
 extern PyTypeObject PyGIBoxed_Type;
 
-PyObject * _pygi_boxed_new (PyTypeObject *pytype,
+PyObject * _pygi_boxed_new (PyTypeObject *type,
                             gpointer      boxed,
-                            gboolean      copy_boxed,
+                            gboolean      free_on_dealloc,
                             gsize         allocated_slice);
 
 void * _pygi_boxed_alloc (GIBaseInfo *info,
index 4dfabd8..574563b 100644 (file)
@@ -50,14 +50,21 @@ typedef gboolean (*PyGIMarshalFromPyFunc) (PyGIInvokeState   *state,
 typedef PyObject *(*PyGIMarshalToPyFunc) (PyGIInvokeState   *state,
                                           PyGICallableCache *callable_cache,
                                           PyGIArgCache      *arg_cache,
-                                          GIArgument        *arg);
+                                          GIArgument        *arg,
+                                          gpointer          *cleanup_data);
 
 typedef void (*PyGIMarshalCleanupFunc) (PyGIInvokeState *state,
                                         PyGIArgCache    *arg_cache,
-                                        PyObject        *py_arg, /* always NULL for to_py cleanup */
+                                        PyObject        *py_arg,
                                         gpointer         data,
                                         gboolean         was_processed);
 
+typedef void (*PyGIMarshalToPyCleanupFunc) (PyGIInvokeState *state,
+                                            PyGIArgCache    *arg_cache,
+                                            gpointer         cleanup_data,
+                                            gpointer         data,
+                                            gboolean         was_processed);
+
 /* Argument meta types denote how we process the argument:
  *  - PYGI_META_ARG_TYPE_PARENT - parents may or may not have children
  *    but are always processed via the normal marshaller for their
@@ -118,7 +125,7 @@ struct _PyGIArgCache
     PyGIMarshalToPyFunc to_py_marshaller;
 
     PyGIMarshalCleanupFunc from_py_cleanup;
-    PyGIMarshalCleanupFunc to_py_cleanup;
+    PyGIMarshalToPyCleanupFunc to_py_cleanup;
 
     GDestroyNotify destroy_notify;
 
index b51c04c..42144e0 100644 (file)
@@ -393,10 +393,14 @@ _pygi_closure_convert_arguments (PyGIInvokeState *state,
             } else if (arg_cache->meta_type != PYGI_META_ARG_TYPE_PARENT) {
                 continue;
             } else {
+                gpointer cleanup_data = NULL;
+
                 value = arg_cache->to_py_marshaller (state,
                                                      cache,
                                                      arg_cache,
-                                                     &state->args[i].arg_value);
+                                                     &state->args[i].arg_value,
+                                                     &cleanup_data);
+                state->args[i].to_py_arg_cleanup_data = cleanup_data;
 
                 if (value == NULL) {
                     pygi_marshal_cleanup_args_to_py_parameter_fail (state,
@@ -800,7 +804,8 @@ static PyObject *
 _pygi_marshal_to_py_interface_callback (PyGIInvokeState   *state,
                                         PyGICallableCache *callable_cache,
                                         PyGIArgCache      *arg_cache,
-                                        GIArgument        *arg)
+                                        GIArgument        *arg,
+                                        gpointer          *arg_cleanup_data)
 {
     PyGICallbackCache *callback_cache = (PyGICallbackCache *) arg_cache;
     gssize user_data_index;
index 44eb009..fe6c7d7 100644 (file)
@@ -225,7 +225,8 @@ static PyObject *
 _pygi_marshal_to_py_interface_enum (PyGIInvokeState   *state,
                                     PyGICallableCache *callable_cache,
                                     PyGIArgCache      *arg_cache,
-                                    GIArgument        *arg)
+                                    GIArgument        *arg,
+                                    gpointer          *cleanup_data)
 {
     PyObject *py_obj = NULL;
     PyGIInterfaceCache *iface_cache = (PyGIInterfaceCache *)arg_cache;
@@ -253,7 +254,8 @@ static PyObject *
 _pygi_marshal_to_py_interface_flags (PyGIInvokeState   *state,
                                      PyGICallableCache *callable_cache,
                                      PyGIArgCache      *arg_cache,
-                                     GIArgument        *arg)
+                                     GIArgument        *arg,
+                                     gpointer          *cleanup_data)
 {
     PyObject *py_obj = NULL;
     PyGIInterfaceCache *iface_cache = (PyGIInterfaceCache *)arg_cache;
index e3d8838..4827e9f 100644 (file)
@@ -275,7 +275,8 @@ static PyObject *
 _pygi_marshal_to_py_gerror (PyGIInvokeState   *state,
                             PyGICallableCache *callable_cache,
                             PyGIArgCache      *arg_cache,
-                            GIArgument        *arg)
+                            GIArgument        *arg,
+                            gpointer          *cleanup_data)
 {
     GError *error = arg->v_pointer;
     PyObject *py_obj = NULL;
index 647bf04..f0cda78 100644 (file)
@@ -220,7 +220,8 @@ static PyObject *
 _pygi_marshal_to_py_ghash (PyGIInvokeState   *state,
                            PyGICallableCache *callable_cache,
                            PyGIArgCache      *arg_cache,
-                           GIArgument        *arg)
+                           GIArgument        *arg,
+                           gpointer          *cleanup_data)
 {
     GHashTable *hash_;
     GHashTableIter hash_table_iter;
@@ -259,6 +260,8 @@ _pygi_marshal_to_py_ghash (PyGIInvokeState   *state,
     while (g_hash_table_iter_next (&hash_table_iter,
                                    &key_arg.v_pointer,
                                    &value_arg.v_pointer)) {
+        gpointer key_cleanup_data = NULL;
+        gpointer value_cleanup_data = NULL;
         PyObject *py_key;
         PyObject *py_value;
         int retval;
@@ -268,7 +271,8 @@ _pygi_marshal_to_py_ghash (PyGIInvokeState   *state,
         py_key = key_to_py_marshaller ( state,
                                       callable_cache,
                                       key_arg_cache,
-                                     &key_arg);
+                                     &key_arg,
+                                     &key_cleanup_data);
 
         if (py_key == NULL) {
             Py_CLEAR (py_obj);
@@ -279,7 +283,8 @@ _pygi_marshal_to_py_ghash (PyGIInvokeState   *state,
         py_value = value_to_py_marshaller ( state,
                                           callable_cache,
                                           value_arg_cache,
-                                         &value_arg);
+                                         &value_arg,
+                                         &value_cleanup_data);
 
         if (py_value == NULL) {
             Py_CLEAR (py_obj);
@@ -304,7 +309,7 @@ _pygi_marshal_to_py_ghash (PyGIInvokeState   *state,
 static void
 _pygi_marshal_cleanup_to_py_ghash (PyGIInvokeState *state,
                                    PyGIArgCache    *arg_cache,
-                                   PyObject        *dummy,
+                                   gpointer         cleanup_data,
                                    gpointer         data,
                                    gboolean         was_processed)
 {
index 64711cb..dbf4e66 100644 (file)
@@ -20,6 +20,8 @@ typedef struct _PyGIInvokeArgState
     /* Holds from_py marshaler cleanup data. */
     gpointer arg_cleanup_data;
 
+    /* Holds to_py marshaler cleanup data. */
+    gpointer to_py_arg_cleanup_data;
 } PyGIInvokeArgState;
 
 
@@ -45,6 +47,7 @@ typedef struct _PyGIInvokeState
 
     /* Memory to receive the result of the C ffi function call. */
     GIArgument return_arg;
+    gpointer to_py_return_arg_cleanup_data;
 
     /* A GError exception which is indirectly bound into the last position of
      * the "args" array if the callable caches "throws" member is set.
index fd9e474..fca48ba 100644 (file)
@@ -565,10 +565,13 @@ _invoke_marshal_out_args (PyGIInvokeState *state, PyGIFunctionCache *function_ca
 
     if (cache->return_cache) {
         if (!cache->return_cache->is_skipped) {
+            gpointer cleanup_data = NULL;
             py_return = cache->return_cache->to_py_marshaller ( state,
                                                                 cache,
                                                                 cache->return_cache,
-                                                               &state->return_arg);
+                                                               &state->return_arg,
+                                                               &cleanup_data);
+            state->to_py_return_arg_cleanup_data = cleanup_data;
             if (py_return == NULL) {
                 pygi_marshal_cleanup_args_return_fail (state,
                                                        cache);
@@ -576,7 +579,7 @@ _invoke_marshal_out_args (PyGIInvokeState *state, PyGIFunctionCache *function_ca
             }
         } else {
             if (cache->return_cache->transfer == GI_TRANSFER_EVERYTHING) {
-                PyGIMarshalCleanupFunc to_py_cleanup =
+                PyGIMarshalToPyCleanupFunc to_py_cleanup =
                     cache->return_cache->to_py_cleanup;
 
                 if (to_py_cleanup != NULL)
@@ -604,10 +607,13 @@ _invoke_marshal_out_args (PyGIInvokeState *state, PyGIFunctionCache *function_ca
     } else if (!cache->has_return && n_out_args == 1) {
         /* if we get here there is one out arg an no return */
         PyGIArgCache *arg_cache = (PyGIArgCache *)cache->to_py_args->data;
+        gpointer cleanup_data = NULL;
         py_out = arg_cache->to_py_marshaller (state,
                                               cache,
                                               arg_cache,
-                                              state->args[arg_cache->c_arg_index].arg_pointer.v_pointer);
+                                              state->args[arg_cache->c_arg_index].arg_pointer.v_pointer,
+                                              &cleanup_data);
+        state->args[arg_cache->c_arg_index].to_py_arg_cleanup_data = cleanup_data;
         if (py_out == NULL) {
             pygi_marshal_cleanup_args_to_py_parameter_fail (state,
                                                             cache,
@@ -637,10 +643,13 @@ _invoke_marshal_out_args (PyGIInvokeState *state, PyGIFunctionCache *function_ca
 
         for (; py_arg_index < tuple_len; py_arg_index++) {
             PyGIArgCache *arg_cache = (PyGIArgCache *)cache_item->data;
+            gpointer cleanup_data = NULL;
             PyObject *py_obj = arg_cache->to_py_marshaller (state,
                                                             cache,
                                                             arg_cache,
-                                                            state->args[arg_cache->c_arg_index].arg_pointer.v_pointer);
+                                                            state->args[arg_cache->c_arg_index].arg_pointer.v_pointer,
+                                                            &cleanup_data);
+            state->args[arg_cache->c_arg_index].to_py_arg_cleanup_data = cleanup_data;
 
             if (py_obj == NULL) {
                 if (cache->has_return)
index 72a3d20..e9fc92c 100644 (file)
@@ -234,11 +234,13 @@ static PyObject *
 _pygi_marshal_to_py_glist (PyGIInvokeState   *state,
                            PyGICallableCache *callable_cache,
                            PyGIArgCache      *arg_cache,
-                           GIArgument        *arg)
+                           GIArgument        *arg,
+                           gpointer          *cleanup_data)
 {
     GList *list_;
     gsize length;
     gsize i;
+    GPtrArray *item_cleanups;
 
     PyGIMarshalToPyFunc item_to_py_marshaller;
     PyGIArgCache *item_arg_cache;
@@ -253,23 +255,31 @@ _pygi_marshal_to_py_glist (PyGIInvokeState   *state,
     if (py_obj == NULL)
         return NULL;
 
+    item_cleanups = g_ptr_array_sized_new (length);
+    *cleanup_data = item_cleanups;
+
     item_arg_cache = seq_cache->item_cache;
     item_to_py_marshaller = item_arg_cache->to_py_marshaller;
 
     for (i = 0; list_ != NULL; list_ = g_list_next (list_), i++) {
         GIArgument item_arg;
         PyObject *py_item;
+        gpointer item_cleanup_data = NULL;
 
         item_arg.v_pointer = list_->data;
         _pygi_hash_pointer_to_arg (&item_arg, item_arg_cache->type_info);
         py_item = item_to_py_marshaller (state,
                                          callable_cache,
                                          item_arg_cache,
-                                         &item_arg);
+                                         &item_arg,
+                                         &item_cleanup_data);
+
+        g_ptr_array_index (item_cleanups, i) = item_cleanup_data;
 
         if (py_item == NULL) {
             Py_CLEAR (py_obj);
             _PyGI_ERROR_PREFIX ("Item %zu: ", i);
+            g_ptr_array_unref (item_cleanups);
             return NULL;
         }
 
@@ -283,11 +293,13 @@ static PyObject *
 _pygi_marshal_to_py_gslist (PyGIInvokeState   *state,
                             PyGICallableCache *callable_cache,
                             PyGIArgCache      *arg_cache,
-                            GIArgument        *arg)
+                            GIArgument        *arg,
+                            gpointer *cleanup_data)
 {
     GSList *list_;
     gsize length;
     gsize i;
+    GPtrArray *item_cleanups;
 
     PyGIMarshalToPyFunc item_to_py_marshaller;
     PyGIArgCache *item_arg_cache;
@@ -302,23 +314,30 @@ _pygi_marshal_to_py_gslist (PyGIInvokeState   *state,
     if (py_obj == NULL)
         return NULL;
 
+    item_cleanups = g_ptr_array_sized_new (length);
+    *cleanup_data = item_cleanups;
+
     item_arg_cache = seq_cache->item_cache;
     item_to_py_marshaller = item_arg_cache->to_py_marshaller;
 
     for (i = 0; list_ != NULL; list_ = g_slist_next (list_), i++) {
         GIArgument item_arg;
         PyObject *py_item;
+        gpointer item_cleanup_data = NULL;
 
         item_arg.v_pointer = list_->data;
         _pygi_hash_pointer_to_arg (&item_arg, item_arg_cache->type_info);
         py_item = item_to_py_marshaller (state,
                                         callable_cache,
                                         item_arg_cache,
-                                        &item_arg);
+                                        &item_arg,
+                                        &item_cleanup_data);
 
+        g_ptr_array_index (item_cleanups, i) = item_cleanup_data;
         if (py_item == NULL) {
             Py_CLEAR (py_obj);
             _PyGI_ERROR_PREFIX ("Item %zu: ", i);
+            g_ptr_array_unref (item_cleanups);
             return NULL;
         }
 
@@ -331,27 +350,30 @@ _pygi_marshal_to_py_gslist (PyGIInvokeState   *state,
 static void
 _pygi_marshal_cleanup_to_py_glist (PyGIInvokeState *state,
                                    PyGIArgCache    *arg_cache,
-                                   PyObject        *dummy,
+                                   gpointer         cleanup_data,
                                    gpointer         data,
                                    gboolean         was_processed)
 {
+    GPtrArray *item_cleanups = (GPtrArray *) cleanup_data;
     PyGISequenceCache *sequence_cache = (PyGISequenceCache *)arg_cache;
     if (arg_cache->transfer == GI_TRANSFER_EVERYTHING ||
             arg_cache->transfer == GI_TRANSFER_CONTAINER) {
         GSList *list_ = (GSList *)data;
 
         if (sequence_cache->item_cache->to_py_cleanup != NULL) {
-            PyGIMarshalCleanupFunc cleanup_func =
+            PyGIMarshalToPyCleanupFunc cleanup_func =
                 sequence_cache->item_cache->to_py_cleanup;
             GSList *node = list_;
+            guint i = 0;
 
             while (node != NULL) {
                 cleanup_func (state,
                               sequence_cache->item_cache,
-                              NULL,
+                              g_ptr_array_index(item_cleanups, i),
                               node->data,
                               was_processed);
                 node = node->next;
+                i++;
             }
         }
 
@@ -363,6 +385,8 @@ _pygi_marshal_cleanup_to_py_glist (PyGIInvokeState *state,
             g_assert_not_reached();
         }
     }
+
+    g_ptr_array_unref (item_cleanups);
 }
 
 static void
index 906be58..ddda594 100644 (file)
@@ -119,13 +119,15 @@ pygi_marshal_cleanup_args_to_py_marshal_success (PyGIInvokeState   *state,
                                                  PyGICallableCache *cache)
 {
     GSList *cache_item;
+    guint i = 0;
+
     /* clean up the return if available */
     if (cache->return_cache != NULL) {
-        PyGIMarshalCleanupFunc cleanup_func = cache->return_cache->to_py_cleanup;
+        PyGIMarshalToPyCleanupFunc cleanup_func = cache->return_cache->to_py_cleanup;
         if (cleanup_func && state->return_arg.v_pointer != NULL)
             cleanup_func (state,
                           cache->return_cache,
-                          NULL,
+                          state->to_py_return_arg_cleanup_data,
                           state->return_arg.v_pointer,
                           TRUE);
     }
@@ -134,23 +136,24 @@ pygi_marshal_cleanup_args_to_py_marshal_success (PyGIInvokeState   *state,
     cache_item = cache->to_py_args;
     while (cache_item) {
         PyGIArgCache *arg_cache = (PyGIArgCache *) cache_item->data;
-        PyGIMarshalCleanupFunc cleanup_func = arg_cache->to_py_cleanup;
+        PyGIMarshalToPyCleanupFunc cleanup_func = arg_cache->to_py_cleanup;
         gpointer data = state->args[arg_cache->c_arg_index].arg_value.v_pointer;
 
         if (cleanup_func != NULL && data != NULL)
             cleanup_func (state,
                           arg_cache,
-                          NULL,
+                          state->args[arg_cache->c_arg_index].to_py_arg_cleanup_data,
                           data,
                           TRUE);
         else if (arg_cache->is_caller_allocates && data != NULL) {
             _cleanup_caller_allocates (state,
                                        arg_cache,
-                                       NULL,
+                                       state->args[arg_cache->c_arg_index].to_py_arg_cleanup_data,
                                        data,
                                        TRUE);
         }
 
+        i++;
         cache_item = cache_item->next;
     }
 }
index 8fd8ee0..80c9055 100644 (file)
@@ -279,7 +279,8 @@ static PyObject *
 _pygi_marshal_to_py_called_from_c_interface_object_cache_adapter (PyGIInvokeState   *state,
                                                                   PyGICallableCache *callable_cache,
                                                                   PyGIArgCache      *arg_cache,
-                                                                  GIArgument        *arg)
+                                                                  GIArgument        *arg,
+                                                                  gpointer          *cleanup_data)
 {
     return pygi_arg_gobject_to_py_called_from_c (arg, arg_cache->transfer);
 }
@@ -288,7 +289,8 @@ static PyObject *
 _pygi_marshal_to_py_called_from_py_interface_object_cache_adapter (PyGIInvokeState   *state,
                                                                    PyGICallableCache *callable_cache,
                                                                    PyGIArgCache      *arg_cache,
-                                                                   GIArgument        *arg)
+                                                                   GIArgument        *arg,
+                                                                   gpointer          *cleanup_data)
 {
     return pygi_arg_gobject_to_py (arg, arg_cache->transfer);
 }
@@ -296,7 +298,7 @@ _pygi_marshal_to_py_called_from_py_interface_object_cache_adapter (PyGIInvokeSta
 static void
 _pygi_marshal_cleanup_to_py_interface_object (PyGIInvokeState *state,
                                               PyGIArgCache    *arg_cache,
-                                              PyObject        *dummy,
+                                              gpointer         cleanup_data,
                                               gpointer         data,
                                               gboolean         was_processed)
 {
index 9978585..c4f3e4a 100644 (file)
@@ -160,6 +160,7 @@ pygi_get_property_value (PyGObject *instance, GParamSpec *pspec)
         GITypeInfo *type_info = NULL;
         gboolean free_array = FALSE;
         GIArgument arg = { 0, };
+        GITransfer transfer = GI_TRANSFER_NOTHING;
 
         type_info = g_property_info_get_type (property_info);
         arg = _pygi_argument_from_g_value (&value, type_info);
@@ -168,9 +169,12 @@ pygi_get_property_value (PyGObject *instance, GParamSpec *pspec)
         if (g_type_info_get_tag (type_info) == GI_TYPE_TAG_ARRAY) {
             arg.v_pointer = _pygi_argument_to_array (&arg, NULL, NULL, NULL,
                                                      type_info, &free_array);
+        } else if (g_type_is_a (pspec->value_type, G_TYPE_BOXED)) {
+          arg.v_pointer = g_value_dup_boxed (&value);
+          transfer = GI_TRANSFER_EVERYTHING;
         }
 
-        py_value = _pygi_argument_to_object (&arg, type_info, GI_TRANSFER_NOTHING);
+        py_value = _pygi_argument_to_object (&arg, type_info, transfer);
 
         if (free_array) {
             g_array_free (arg.v_pointer, FALSE);
index 5305260..2ed38d3 100644 (file)
@@ -241,10 +241,8 @@ pyg_source_new (void)
     source = (PyGRealSource*) g_source_new (&pyg_source_funcs, sizeof (PyGRealSource));
 
     py_type = _pygi_type_import_by_name ("GLib", "Source");
-    /* Full ownership transfer of the source, this will be free'd with g_boxed_free. */
-    source->obj = _pygi_boxed_new ( (PyTypeObject *) py_type, source,
-                                    FALSE, /* copy_boxed */
-                                    0);    /* slice_allocated */
+    /* g_source_new uses malloc, not slices */
+    source->obj = _pygi_boxed_new ( (PyTypeObject *) py_type, source, FALSE, 0);
 
     return source->obj;
 }
index 60d2585..48ed744 100644 (file)
@@ -388,11 +388,9 @@ pygi_arg_struct_to_py_marshal (GIArgument *arg,
                                                               arg->v_pointer);
     } else if (g_type_is_a (g_type, G_TYPE_BOXED)) {
         if (py_type) {
-            /* Force a boxed copy if we are not transfered ownership and the
-             * memory is not caller allocated. */
             py_obj = _pygi_boxed_new ((PyTypeObject *) py_type,
                                       arg->v_pointer,
-                                      transfer == GI_TRANSFER_NOTHING && !is_allocated,
+                                      transfer == GI_TRANSFER_EVERYTHING || is_allocated,
                                       is_allocated ?
                                               g_struct_info_get_size(interface_info) : 0);
         }
@@ -437,53 +435,29 @@ static PyObject *
 arg_struct_to_py_marshal_adapter (PyGIInvokeState   *state,
                                   PyGICallableCache *callable_cache,
                                   PyGIArgCache      *arg_cache,
-                                  GIArgument        *arg)
+                                  GIArgument        *arg,
+                                  gpointer          *cleanup_data)
 {
     PyGIInterfaceCache *iface_cache = (PyGIInterfaceCache *)arg_cache;
+    PyObject *ret;
 
-    return pygi_arg_struct_to_py_marshal (arg,
-                                          iface_cache->interface_info,
-                                          iface_cache->g_type,
-                                          iface_cache->py_type,
-                                          arg_cache->transfer,
-                                          arg_cache->is_caller_allocates,
-                                          iface_cache->is_foreign);
-}
-
-static PyObject *
-arg_boxed_to_py_marshal_pass_by_ref (PyGIInvokeState   *state,
-                                     PyGICallableCache *callable_cache,
-                                     PyGIArgCache      *arg_cache,
-                                     GIArgument        *arg)
-{
-    PyObject *py_obj = NULL;
-    PyGIInterfaceCache *iface_cache = (PyGIInterfaceCache *)arg_cache;
+    ret = pygi_arg_struct_to_py_marshal (arg,
+                                         iface_cache->interface_info,
+                                         iface_cache->g_type,
+                                         iface_cache->py_type,
+                                         arg_cache->transfer,
+                                         arg_cache->is_caller_allocates,
+                                         iface_cache->is_foreign);
 
-    if (arg->v_pointer == NULL) {
-        Py_RETURN_NONE;
-    }
-
-    if (g_type_is_a (iface_cache->g_type, G_TYPE_BOXED)) {
-        if (iface_cache->py_type) {
-            py_obj = _pygi_boxed_new ((PyTypeObject *) iface_cache->py_type,
-                                      arg->v_pointer,
-                                      FALSE, /* copy_boxed */
-                                      0);    /* slice_alloc */
-            ((PyGBoxed *)py_obj)->free_on_dealloc = FALSE;
-        }
-    } else {
-        PyErr_Format (PyExc_NotImplementedError,
-                      "expected boxed type but got %s",
-                      g_type_name (iface_cache->g_type));
-    }
+    *cleanup_data = ret;
 
-    return py_obj;
+    return ret;
 }
 
 static void
 arg_foreign_to_py_cleanup (PyGIInvokeState *state,
                            PyGIArgCache    *arg_cache,
-                           PyObject        *dummy,
+                           gpointer         cleanup_data,
                            gpointer         data,
                            gboolean         was_processed)
 {
@@ -494,6 +468,24 @@ arg_foreign_to_py_cleanup (PyGIInvokeState *state,
     }
 }
 
+static void
+arg_boxed_to_py_cleanup (PyGIInvokeState *state,
+                           PyGIArgCache    *arg_cache,
+                           gpointer         cleanup_data,
+                           gpointer         data,
+                           gboolean         was_processed)
+{
+    PyGIBoxed *boxed;
+
+    if (arg_cache->transfer == GI_TRANSFER_NOTHING) {
+        boxed = (PyGIBoxed *) cleanup_data;
+        /* If we are the sole owner of the wrapper it will be freed after this
+         * anyway, so no need to copy the wrapped boxed. */
+        if (Py_REFCNT (boxed) > 1)
+            _pygi_boxed_copy_in_place (boxed);
+    }
+}
+
 static gboolean
 arg_type_class_from_py_marshal (PyGIInvokeState   *state,
                                 PyGICallableCache *callable_cache,
@@ -561,54 +553,22 @@ arg_struct_from_py_setup (PyGIArgCache     *arg_cache,
 static void
 arg_struct_to_py_setup (PyGIArgCache     *arg_cache,
                         GIInterfaceInfo  *iface_info,
-                        GITransfer        transfer,
-                        GIArgInfo        *arg_info)
+                        GITransfer        transfer)
 {
     PyGIInterfaceCache *iface_cache = (PyGIInterfaceCache *)arg_cache;
 
-    /* HACK to force GtkTreeModel:iter_next() and iter_previous() vfunc implementations
-     * to receive their Gtk.TreeIter argument as pass-by-reference. We create a new
-     * PyGIBoxed wrapper which does not copy the memory and also does not free it.
-     * This is needed to hack the noted vfunc implementations so they can continue
-     * working with bug https://bugzilla.gnome.org/show_bug.cgi?id=722899
-     * being fixed. This hack should be removed once GTK+ has fixed bug
-     * https://bugzilla.gnome.org/show_bug.cgi?id=734465
-     * and we've moved to a new major version.
-     */
-    if (arg_info && g_strcmp0 (iface_cache->type_name, "Gtk.TreeIter") == 0) {
-
-        /* GICallbackInfo */
-        GIBaseInfo *info = g_base_info_get_container (arg_info);
-        if (info && g_base_info_get_type (info) == GI_INFO_TYPE_CALLBACK &&
-                (g_strcmp0 (g_base_info_get_name (info), "iter_next") == 0 ||
-                 g_strcmp0 (g_base_info_get_name (info), "iter_previous") == 0)) {
-
-            /* GITypeInfo */
-            info = g_base_info_get_container (info);
-            if (info && g_base_info_get_type (info) == GI_INFO_TYPE_TYPE &&
-                    g_type_info_get_tag ((GITypeInfo *)info) == GI_TYPE_TAG_INTERFACE) {
-
-                /* GIFieldInfo */
-                info = g_base_info_get_container (info);
-                if (info && g_base_info_get_type (info) == GI_INFO_TYPE_FIELD) {
-
-                    /* GIStructInfo */
-                    info = g_base_info_get_container (info);
-                    if (info && g_base_info_get_type (info) == GI_INFO_TYPE_STRUCT &&
-                            g_strcmp0 (g_base_info_get_name (info), "TreeModelIface") == 0) {
-                        arg_cache->to_py_marshaller = arg_boxed_to_py_marshal_pass_by_ref;
-                    }
-                }
-            }
-        }
-    }
-
     if (arg_cache->to_py_marshaller == NULL) {
         arg_cache->to_py_marshaller = arg_struct_to_py_marshal_adapter;
     }
 
+    iface_cache->is_foreign = g_struct_info_is_foreign ( (GIStructInfo*)iface_info);
+
     if (iface_cache->is_foreign)
         arg_cache->to_py_cleanup = arg_foreign_to_py_cleanup;
+    else if (!g_type_is_a (iface_cache->g_type, G_TYPE_VALUE) &&
+             iface_cache->py_type &&
+             g_type_is_a (iface_cache->g_type, G_TYPE_BOXED))
+        arg_cache->to_py_cleanup = arg_boxed_to_py_cleanup;
 }
 
 PyGIArgCache *
@@ -638,7 +598,7 @@ pygi_arg_struct_new_from_info (GITypeInfo      *type_info,
     }
 
     if (direction & PYGI_DIRECTION_TO_PYTHON) {
-        arg_struct_to_py_setup (cache, iface_info, transfer, arg_info);
+        arg_struct_to_py_setup (cache, iface_info, transfer);
     }
 
     return cache;
index 729bb4d..304b427 100644 (file)
@@ -1037,7 +1037,12 @@ pygobject_unwatch_closure(gpointer data, GClosure *closure)
 {
     PyGObjectData *inst_data = data;
 
+    /* Despite no Python API is called the list inst_data->closures
+     * must be protected by GIL as it is used by GC in
+     * pygobject_traverse */
+    PyGILState_STATE state = PyGILState_Ensure();
     inst_data->closures = g_slist_remove (inst_data->closures, closure);
+    PyGILState_Release(state);
 }
 
 /**
index 82a32d2..5be6560 100644 (file)
@@ -234,7 +234,6 @@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
 LCOV = @LCOV@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
-LIBFFI_PC = @LIBFFI_PC@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
index 9bc3779..f73f30c 100644 (file)
@@ -24,6 +24,7 @@ from __future__ import absolute_import
 
 import sys
 import warnings
+import re
 
 from ._constants import TYPE_INVALID
 from .docstring import generate_doc_string
@@ -49,6 +50,11 @@ if (3, 0) <= sys.version_info < (3, 3):
         return hasattr(obj, '__call__')
 
 
+def snake_case(name):
+    s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
+    return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).lower()
+
+
 class MetaClassHelper(object):
     def _setup_methods(cls):
         for method_info in cls.__info__.get_methods():
@@ -81,6 +87,8 @@ class MetaClassHelper(object):
             if not vfunc_name.startswith("do_") or not callable(py_vfunc):
                 continue
 
+            skip_ambiguity_check = False
+
             # If a method name starts with "do_" assume it is a vfunc, and search
             # in the base classes for a method with the same name to override.
             # Recursion is necessary as overriden methods in most immediate parent
@@ -92,6 +100,20 @@ class MetaClassHelper(object):
                     vfunc_info = method
                     break
 
+                if not hasattr(base, '__info__') or not hasattr(base.__info__, 'get_vfuncs'):
+                    continue
+
+                base_name = snake_case(base.__info__.get_type_name())
+
+                for v in base.__info__.get_vfuncs():
+                    if vfunc_name == 'do_%s_%s' % (base_name, v.get_name()):
+                        vfunc_info = v
+                        skip_ambiguity_check = True
+                        break
+
+                if vfunc_info:
+                    break
+
             # If we did not find a matching method name in the bases, we might
             # be overriding an interface virtual method. Since interfaces do not
             # provide implementations, there will be no method attribute installed
@@ -102,22 +124,22 @@ class MetaClassHelper(object):
                 vfunc_info = find_vfunc_info_in_interface(cls.__bases__, vfunc_name[len("do_"):])
 
             if vfunc_info is not None:
-                assert vfunc_name == ('do_' + vfunc_info.get_name())
                 # Check to see if there are vfuncs with the same name in the bases.
                 # We have no way of specifying which one we are supposed to override.
-                ambiguous_base = find_vfunc_conflict_in_bases(vfunc_info, cls.__bases__)
-                if ambiguous_base is not None:
-                    base_info = vfunc_info.get_container()
-                    raise TypeError('Method %s() on class %s.%s is ambiguous '
-                                    'with methods in base classes %s.%s and %s.%s' %
-                                    (vfunc_name,
-                                     cls.__info__.get_namespace(),
-                                     cls.__info__.get_name(),
-                                     base_info.get_namespace(),
-                                     base_info.get_name(),
-                                     ambiguous_base.__info__.get_namespace(),
-                                     ambiguous_base.__info__.get_name()
-                                    ))
+                if not skip_ambiguity_check:
+                    ambiguous_base = find_vfunc_conflict_in_bases(vfunc_info, cls.__bases__)
+                    if ambiguous_base is not None:
+                        base_info = vfunc_info.get_container()
+                        raise TypeError('Method %s() on class %s.%s is ambiguous '
+                                        'with methods in base classes %s.%s and %s.%s' %
+                                        (vfunc_name,
+                                         cls.__info__.get_namespace(),
+                                         cls.__info__.get_name(),
+                                         base_info.get_namespace(),
+                                         base_info.get_name(),
+                                         ambiguous_base.__info__.get_namespace(),
+                                         ambiguous_base.__info__.get_name()
+                                        ))
                 hook_up_vfunc_implementation(vfunc_info, cls.__gtype__,
                                              py_vfunc)
 
index 3c7af01..ca49423 100644 (file)
@@ -3,7 +3,6 @@ exec_prefix=@exec_prefix@
 includedir=@includedir@
 datarootdir=@datarootdir@
 datadir=@datadir@
-libdir=@libdir@
 
 # you can use the --variable=pygobjectincludedir argument to
 # pkg-config to get this value. You might want to use this to
@@ -13,7 +12,7 @@ pygobjectincludedir=${includedir}/pygobject-3.0
 Name: PyGObject
 Description: Python bindings for GObject
 Requires: gobject-2.0
-Requires.private: @LIBFFI_PC@
+Requires.private: libffi
 Version: @VERSION@
 Cflags: -I${pygobjectincludedir}
 
index 0e787c2..fe5ddae 100644 (file)
@@ -234,7 +234,6 @@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
 LCOV = @LCOV@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
-LIBFFI_PC = @LIBFFI_PC@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
diff --git a/setup.cfg b/setup.cfg
new file mode 100644 (file)
index 0000000..5933e6a
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,3 @@
+[flake8]
+ignore=E501,E123,E124,E402,E731,E722
+builtins=long,unicode,basestring
old mode 100644 (file)
new mode 100755 (executable)
index 95669db..5d06491
--- a/setup.py
+++ b/setup.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # Copyright 2017 Christoph Reiter <reiter.christoph@gmail.com>
 #
 # This library is free software; you can redistribute it and/or
 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301
 # USA
 
-"""
-ATTENTION DISTRO PACKAGERS: This is not a valid replacement for autotools.
-It does not install headers, pkgconfig files and does not support running
-tests. Its main use case atm is installation in virtualenvs and via pip.
-"""
-
 import io
 import os
 import re
@@ -34,9 +28,11 @@ from email import parser
 
 import pkg_resources
 from setuptools import setup, find_packages
-from distutils.core import Extension, Distribution
+from distutils.core import Extension, Distribution, Command
+from distutils.errors import DistutilsSetupError
 from distutils.ccompiler import new_compiler
-from distutils import dir_util
+from distutils.sysconfig import get_python_lib
+from distutils import dir_util, log
 
 
 def get_command_class(name):
@@ -130,30 +126,21 @@ def pkg_config_version_check(pkg, version):
 
 def pkg_config_parse(opt, pkg):
     ret = _run_pkg_config([opt, pkg])
-    output = ret.decode()
+    if sys.version_info[0] == 3:
+        output = ret.decode()
+    else:
+        output = ret
     opt = opt[-2:]
     return [x.lstrip(opt) for x in output.split()]
 
 
-def samefile(src, dst):
-    # Python 2 on Windows doesn't have os.path.samefile, so we have to provide
-    # a fallback
-
-    if hasattr(os.path, "samefile"):
-        return os.path.samefile(src, dst)
-
-    os.stat(src)
-    os.stat(dst)
-    return (os.path.normcase(os.path.abspath(src)) ==
-            os.path.normcase(os.path.abspath(dst)))
-
-
 du_sdist = get_command_class("sdist")
 
 
 class distcheck(du_sdist):
     """Creates a tarball and does some additional sanity checks such as
-    checking if the tarballs includes all files and builds.
+    checking if the tarball includes all files, builds successfully and
+    the tests suite passes.
     """
 
     def _check_manifest(self):
@@ -211,6 +198,7 @@ class distcheck(du_sdist):
                         "--record",
                         os.path.join(distcheck_dir, "log.txt"),
                         ])
+            self.spawn([sys.executable, "setup.py", "test"])
         finally:
             os.chdir(old_pwd)
 
@@ -220,6 +208,417 @@ class distcheck(du_sdist):
         self._check_dist()
 
 
+class build_tests(Command):
+    description = "build test libraries and extensions"
+    user_options = [
+        ("force", "f", "force a rebuild"),
+    ]
+
+    def initialize_options(self):
+        self.build_temp = None
+        self.force = False
+
+    def finalize_options(self):
+        self.set_undefined_options(
+            'build_ext',
+            ('build_temp', 'build_temp'))
+
+    def _newer_group(self, sources, *targets):
+        assert targets
+
+        from distutils.dep_util import newer_group
+
+        if self.force:
+            return True
+        else:
+            for target in targets:
+                if not newer_group(sources, target):
+                    return False
+            return True
+
+    def run(self):
+        from distutils.ccompiler import new_compiler
+        from distutils.sysconfig import customize_compiler
+
+        gidatadir = pkg_config_parse(
+            "--variable=gidatadir", "gobject-introspection-1.0")[0]
+        g_ir_scanner = pkg_config_parse(
+            "--variable=g_ir_scanner", "gobject-introspection-1.0")[0]
+        g_ir_compiler = pkg_config_parse(
+            "--variable=g_ir_compiler", "gobject-introspection-1.0")[0]
+
+        script_dir = get_script_dir()
+        tests_dir = os.path.join(script_dir, "tests")
+        gi_tests_dir = os.path.join(gidatadir, "tests")
+
+        schema_xml = os.path.join(tests_dir, "org.gnome.test.gschema.xml")
+        schema_bin = os.path.join(tests_dir, "gschemas.compiled")
+        if self._newer_group([schema_xml], schema_bin):
+            subprocess.check_call([
+                "glib-compile-schemas",
+                "--targetdir=%s" % tests_dir,
+                "--schema-file=%s" % schema_xml,
+            ])
+
+        compiler = new_compiler()
+        customize_compiler(compiler)
+
+        if os.name == "nt":
+            compiler.shared_lib_extension = ".dll"
+
+        if sys.platform == "darwin":
+            compiler.shared_lib_extension = ".dylib"
+            if "-bundle" in compiler.linker_so:
+                compiler.linker_so = list(compiler.linker_so)
+                i = compiler.linker_so.index("-bundle")
+                compiler.linker_so[i] = "-dynamiclib"
+
+        def build_ext(ext):
+            if compiler.compiler_type == "msvc":
+                raise Exception("MSVC support not implemented")
+
+            libname = compiler.shared_object_filename(ext.name)
+            ext_paths = [os.path.join(tests_dir, libname)]
+            if os.name == "nt":
+                implibname = libname + ".a"
+                ext_paths.append(os.path.join(tests_dir, implibname))
+
+            if self._newer_group(ext.sources + ext.depends, *ext_paths):
+                objects = compiler.compile(
+                    ext.sources,
+                    output_dir=self.build_temp,
+                    include_dirs=ext.include_dirs)
+
+                if os.name == "nt":
+                    postargs = ["-Wl,--out-implib=%s" %
+                                os.path.join(tests_dir, implibname)]
+                else:
+                    postargs = []
+
+                compiler.link_shared_object(
+                    objects,
+                    compiler.shared_object_filename(ext.name),
+                    output_dir=tests_dir,
+                    libraries=ext.libraries,
+                    library_dirs=ext.library_dirs,
+                    extra_postargs=postargs)
+
+            return ext_paths
+
+        ext = Extension(
+            name='libgimarshallingtests',
+            sources=[
+                os.path.join(gi_tests_dir, "gimarshallingtests.c"),
+                os.path.join(tests_dir, "gimarshallingtestsextra.c"),
+            ],
+            include_dirs=[
+                gi_tests_dir,
+                tests_dir,
+            ],
+            depends=[
+                os.path.join(gi_tests_dir, "gimarshallingtests.h"),
+                os.path.join(tests_dir, "gimarshallingtestsextra.h"),
+            ],
+        )
+        add_ext_pkg_config_dep(ext, compiler.compiler_type, "glib-2.0")
+        add_ext_pkg_config_dep(ext, compiler.compiler_type, "gio-2.0")
+        ext_paths = build_ext(ext)
+
+        gir_path = os.path.join(tests_dir, "GIMarshallingTests-1.0.gir")
+        typelib_path = os.path.join(
+            tests_dir, "GIMarshallingTests-1.0.typelib")
+
+        if self._newer_group(ext_paths, gir_path):
+            subprocess.check_call([
+                g_ir_scanner,
+                "--no-libtool",
+                "--include=Gio-2.0",
+                "--namespace=GIMarshallingTests",
+                "--nsversion=1.0",
+                "--symbol-prefix=gi_marshalling_tests",
+                "--warn-all",
+                "--warn-error",
+                "--library-path=%s" % tests_dir,
+                "--library=gimarshallingtests",
+                "--pkg=glib-2.0",
+                "--pkg=gio-2.0",
+                "--output=%s" % gir_path,
+            ] + ext.sources + ext.depends)
+
+        if self._newer_group([gir_path], typelib_path):
+            subprocess.check_call([
+                g_ir_compiler,
+                gir_path,
+                "--output=%s" % typelib_path,
+            ])
+
+        ext = Extension(
+            name='libregress',
+            sources=[
+                os.path.join(gi_tests_dir, "regress.c"),
+            ],
+            include_dirs=[
+                gi_tests_dir,
+            ],
+            depends=[
+                os.path.join(gi_tests_dir, "regress.h"),
+            ],
+        )
+        add_ext_pkg_config_dep(ext, compiler.compiler_type, "glib-2.0")
+        add_ext_pkg_config_dep(ext, compiler.compiler_type, "gio-2.0")
+        add_ext_pkg_config_dep(ext, compiler.compiler_type, "cairo")
+        add_ext_pkg_config_dep(ext, compiler.compiler_type, "cairo-gobject")
+        ext_paths = build_ext(ext)
+
+        gir_path = os.path.join(tests_dir, "Regress-1.0.gir")
+        typelib_path = os.path.join(tests_dir, "Regress-1.0.typelib")
+
+        if self._newer_group(ext_paths, gir_path):
+            subprocess.check_call([
+                g_ir_scanner,
+                "--no-libtool",
+                "--include=cairo-1.0",
+                "--include=Gio-2.0",
+                "--namespace=Regress",
+                "--nsversion=1.0",
+                "--warn-all",
+                "--warn-error",
+                "--library-path=%s" % tests_dir,
+                "--library=regress",
+                "--pkg=glib-2.0",
+                "--pkg=gio-2.0",
+                "--pkg=cairo",
+                "--pkg=cairo-gobject",
+                "--output=%s" % gir_path,
+            ] + ext.sources + ext.depends)
+
+        if self._newer_group([gir_path], typelib_path):
+            subprocess.check_call([
+                g_ir_compiler,
+                gir_path,
+                "--output=%s" % typelib_path,
+            ])
+
+        ext = Extension(
+            name='tests.testhelper',
+            sources=[
+                os.path.join(tests_dir, "testhelpermodule.c"),
+                os.path.join(tests_dir, "test-floating.c"),
+                os.path.join(tests_dir, "test-thread.c"),
+                os.path.join(tests_dir, "test-unknown.c"),
+            ],
+            include_dirs=[
+                os.path.join(script_dir, "gi"),
+                tests_dir,
+            ],
+            depends=[
+                os.path.join(tests_dir, "test-thread.h"),
+                os.path.join(tests_dir, "test-unknown.h"),
+                os.path.join(tests_dir, "test-floating.h"),
+            ],
+        )
+        add_ext_pkg_config_dep(ext, compiler.compiler_type, "glib-2.0")
+        add_ext_pkg_config_dep(ext, compiler.compiler_type, "gio-2.0")
+        add_ext_pkg_config_dep(ext, compiler.compiler_type, "cairo")
+
+        dist = Distribution({"ext_modules": [ext]})
+        cmd = dist.get_command_obj("build_ext")
+        cmd.inplace = True
+        cmd.ensure_finalized()
+        cmd.run()
+
+
+class test(Command):
+    user_options = []
+
+    def initialize_options(self):
+        pass
+
+    def finalize_options(self):
+        pass
+
+    def run(self):
+        cmd = self.reinitialize_command("build_ext")
+        cmd.inplace = True
+        cmd.ensure_finalized()
+        cmd.run()
+
+        cmd = self.reinitialize_command("build_tests")
+        cmd.ensure_finalized()
+        cmd.run()
+
+        env = os.environ.copy()
+        env.pop("MSYSTEM", None)
+
+        pre_args = []
+        try:
+            subprocess.check_call(["dbus-run-session", "--", "true"])
+        except (EnvironmentError, subprocess.CalledProcessError):
+            # Spawning a bus failed, disable dbus instead of inheriting
+            # the user one
+            env["DBUS_SESSION_BUS_ADDRESS"] = ""
+        else:
+            pre_args = ["dbus-run-session", "--"]
+
+        tests_dir = os.path.join(get_script_dir(), "tests")
+        subprocess.check_call(pre_args + [
+            sys.executable,
+            os.path.join(tests_dir, "runtests.py"),
+        ], env=env)
+
+        if not env.get("TEST_NAMES"):
+            env["TEST_NAMES"] = "compat_test_pygtk"
+            subprocess.check_call(pre_args + [
+                sys.executable,
+                os.path.join(tests_dir, "runtests.py"),
+            ], env=env)
+
+
+class quality(Command):
+    description = "run code quality tests"
+    user_options = []
+
+    def initialize_options(self):
+        pass
+
+    def finalize_options(self):
+        pass
+
+    def run(self):
+        status = subprocess.call([
+            sys.executable, "-m", "flake8",
+        ], cwd=get_script_dir())
+        if status != 0:
+            raise SystemExit(status)
+
+
+def get_script_dir():
+    return os.path.dirname(os.path.realpath(__file__))
+
+
+def get_pycairo_include_dir():
+    """Returns the best guess at where to find the pycairo headers.
+    A bit convoluted because we have to deal with multiple pycairo
+    versions.
+
+    Raises if pycairo isn't found or it's too old.
+    """
+
+    script_dir = get_script_dir()
+    pkg_config_name = get_pycairo_pkg_config_name()
+    min_version = get_version_requirement(script_dir, pkg_config_name)
+
+    def check_path(include_dir):
+        log.info("pycairo: trying include directory: %r" % include_dir)
+        header_path = os.path.join(include_dir, "%s.h" % pkg_config_name)
+        if os.path.exists(header_path):
+            log.info("pycairo: found %r" % header_path)
+            return True
+        log.info("pycairo: header file (%r) not found" % header_path)
+        return False
+
+    def find_path(paths):
+        for p in reversed(paths):
+            if check_path(p):
+                return p
+
+    def find_new_api():
+        log.info("pycairo: new API")
+        import cairo
+
+        pkg_version = pkg_resources.parse_version(cairo.version)
+        pkg_min_version = pkg_resources.parse_version(min_version)
+        if pkg_version < pkg_min_version:
+            raise DistutilsSetupError(
+                "pycairo >=%s required, %s found." % (
+                    pkg_min_version, pkg_version))
+
+        if hasattr(cairo, "get_include"):
+            return [cairo.get_include()]
+        log.info("pycairo: no get_include()")
+        return []
+
+    def find_old_api():
+        log.info("pycairo: old API")
+        dist = pkg_resources.get_distribution("pycairo>=%s" % min_version)
+        log.info("pycairo: found %r" % dist)
+
+        def samefile(src, dst):
+            # Python 2 on Windows doesn't have os.path.samefile, so we have to
+            # provide a fallback
+            if hasattr(os.path, "samefile"):
+                return os.path.samefile(src, dst)
+            os.stat(src)
+            os.stat(dst)
+            return (os.path.normcase(os.path.abspath(src)) ==
+                    os.path.normcase(os.path.abspath(dst)))
+
+        def get_sys_path(dist, name):
+            # Returns the sysconfig path for a distribution, or None
+            location = dist.location
+            for scheme in sysconfig.get_scheme_names():
+                for path_type in ["platlib", "purelib"]:
+                    path = sysconfig.get_path(path_type, scheme)
+                    try:
+                        if samefile(path, location):
+                            return sysconfig.get_path(name, scheme)
+                    except EnvironmentError:
+                        pass
+
+        data_path = get_sys_path(dist, "data") or sys.prefix
+        return [os.path.join(data_path, "include", "pycairo")]
+
+    def find_pkg_config():
+        log.info("pycairo: pkg-config")
+        pkg_config_version_check(pkg_config_name, min_version)
+        return pkg_config_parse("--cflags-only-I", pkg_config_name)
+
+    # First the new get_include() API added in >1.15.6
+    include_dir = find_path(find_new_api())
+    if include_dir is not None:
+        return include_dir
+
+    # Then try to find it in the data prefix based on the module path.
+    # This works with many virtualenv/userdir setups, but not all apparently,
+    # see https://gitlab.gnome.org/GNOME/pygobject/issues/150
+    include_dir = find_path(find_old_api())
+    if include_dir is not None:
+        return include_dir
+
+    # Finally, fall back to pkg-config
+    include_dir = find_path(find_pkg_config())
+    if include_dir is not None:
+        return include_dir
+
+    raise DistutilsSetupError("Could not find pycairo headers")
+
+
+def add_ext_pkg_config_dep(ext, compiler_type, name):
+    script_dir = get_script_dir()
+
+    msvc_libraries = {
+        "glib-2.0": ["glib-2.0"],
+        "gio-2.0": ["gio-2.0", "gobject-2.0", "glib-2.0"],
+        "gobject-introspection-1.0":
+            ["girepository-1.0", "gobject-2.0", "glib-2.0"],
+        "cairo": ["cairo"],
+        "cairo-gobject":
+            ["cairo-gobject", "cairo", "gobject-2.0", "glib-2.0"],
+        "libffi": ["ffi"],
+    }
+
+    fallback_libs = msvc_libraries[name]
+    if compiler_type == "msvc":
+        # assume that INCLUDE and LIB contains the right paths
+        ext.libraries += fallback_libs
+    else:
+        min_version = get_version_requirement(script_dir, name)
+        pkg_config_version_check(name, min_version)
+        ext.include_dirs += pkg_config_parse("--cflags-only-I", name)
+        ext.library_dirs += pkg_config_parse("--libs-only-L", name)
+        ext.libraries += pkg_config_parse("--libs-only-l", name)
+
+
 du_build_ext = get_command_class("build_ext")
 
 
@@ -234,7 +633,7 @@ class build_ext(du_build_ext):
         self.compiler_type = new_compiler(compiler=self.compiler).compiler_type
 
     def _write_config_h(self):
-        script_dir = os.path.dirname(os.path.realpath(__file__))
+        script_dir = get_script_dir()
         target = os.path.join(script_dir, "config.h")
         versions = parse_versions(script_dir)
         with io.open(target, 'w', encoding="utf-8") as h:
@@ -253,54 +652,12 @@ class build_ext(du_build_ext):
 
     def _setup_extensions(self):
         ext = {e.name: e for e in self.extensions}
-        script_dir = os.path.dirname(os.path.realpath(__file__))
-
-        msvc_libraries = {
-            "glib-2.0": ["glib-2.0"],
-            "gio-2.0": ["gio-2.0", "gobject-2.0", "glib-2.0"],
-            "gobject-introspection-1.0":
-                ["girepository-1.0", "gobject-2.0", "glib-2.0"],
-            "cairo": ["cairo"],
-            "cairo-gobject":
-                ["cairo-gobject", "cairo", "gobject-2.0", "glib-2.0"],
-            "libffi": ["ffi"],
-        }
 
         def add_dependency(ext, name):
-            fallback_libs = msvc_libraries[name]
-
-            if self.compiler_type == "msvc":
-                # assume that INCLUDE and LIB contains the right paths
-                ext.libraries += fallback_libs
-            else:
-                min_version = get_version_requirement(script_dir, name)
-                pkg_config_version_check(name, min_version)
-                ext.include_dirs += pkg_config_parse("--cflags-only-I", name)
-                ext.library_dirs += pkg_config_parse("--libs-only-L", name)
-                ext.libraries += pkg_config_parse("--libs-only-l", name)
+            add_ext_pkg_config_dep(ext, self.compiler_type, name)
 
         def add_pycairo(ext):
-            min_version = get_version_requirement(
-                script_dir, get_pycairo_pkg_config_name())
-
-            dist = pkg_resources.get_distribution("pycairo>=%s" % min_version)
-
-            def get_sys_path(dist, name):
-                """The sysconfig path for a distribution, or None"""
-
-                location = dist.location
-                for scheme in sysconfig.get_scheme_names():
-                    for path_type in ["platlib", "purelib"]:
-                        path = sysconfig.get_path(path_type, scheme)
-                        try:
-                            if samefile(path, location):
-                                return sysconfig.get_path(name, scheme)
-                        except EnvironmentError:
-                            pass
-
-            data_path = get_sys_path(dist, "data") or sys.prefix
-            include_dir = os.path.join(data_path, "include", "pycairo")
-            ext.include_dirs += [include_dir]
+            ext.include_dirs += [get_pycairo_include_dir()]
 
         gi_ext = ext["gi._gi"]
         add_dependency(gi_ext, "glib-2.0")
@@ -323,8 +680,85 @@ class build_ext(du_build_ext):
         du_build_ext.run(self)
 
 
+class install_pkgconfig(Command):
+    description = "install .pc file"
+    user_options = []
+
+    def initialize_options(self):
+        self.install_base = None
+        self.install_platbase = None
+        self.install_data = None
+        self.compiler_type = None
+        self.outfiles = []
+
+    def finalize_options(self):
+        self.set_undefined_options(
+            'install',
+            ('install_base', 'install_base'),
+            ('install_data', 'install_data'),
+            ('install_platbase', 'install_platbase'),
+        )
+
+        self.set_undefined_options(
+            'build_ext',
+            ('compiler_type', 'compiler_type'),
+        )
+
+    def get_outputs(self):
+        return self.outfiles
+
+    def get_inputs(self):
+        return []
+
+    def run(self):
+        cmd = self.distribution.get_command_obj("bdist_wheel", create=False)
+        if cmd is not None:
+            log.warn(
+                "Python wheels and pkg-config is not compatible. "
+                "No pkg-config file will be included in the wheel. Install "
+                "from source if you need one.")
+            return
+
+        if self.compiler_type == "msvc":
+            return
+
+        script_dir = get_script_dir()
+        pkgconfig_in = os.path.join(script_dir, "pygobject-3.0.pc.in")
+        with io.open(pkgconfig_in, "r", encoding="utf-8") as h:
+            content = h.read()
+
+        config = {
+            "prefix": self.install_base,
+            "exec_prefix": self.install_platbase,
+            "includedir": "${prefix}/include",
+            "datarootdir": "${prefix}/share",
+            "datadir": "${datarootdir}",
+            "VERSION": self.distribution.get_version(),
+        }
+        for key, value in config.items():
+            content = content.replace("@%s@" % key, value)
+
+        libdir = os.path.dirname(get_python_lib(True, True, self.install_data))
+        pkgconfig_dir = os.path.join(libdir, "pkgconfig")
+        self.mkpath(pkgconfig_dir)
+        target = os.path.join(pkgconfig_dir, "pygobject-3.0.pc")
+        with io.open(target, "w", encoding="utf-8") as h:
+            h.write(content)
+        self.outfiles.append(target)
+
+
+du_install = get_command_class("install")
+
+
+class install(du_install):
+
+    sub_commands = du_install.sub_commands + [
+        ("install_pkgconfig", lambda self: True),
+    ]
+
+
 def main():
-    script_dir = os.path.dirname(os.path.realpath(__file__))
+    script_dir = get_script_dir()
     pkginfo = parse_pkg_info(script_dir)
     gi_dir = os.path.join(script_dir, "gi")
 
@@ -375,11 +809,20 @@ def main():
         cmdclass={
             "build_ext": build_ext,
             "distcheck": distcheck,
+            "build_tests": build_tests,
+            "test": test,
+            "quality": quality,
+            "install": install,
+            "install_pkgconfig": install_pkgconfig,
         },
         install_requires=[
             "pycairo>=%s" % get_version_requirement(
                 script_dir, get_pycairo_pkg_config_name()),
         ],
+        data_files=[
+            ('include/pygobject-3.0', ['gi/pygobject.h']),
+        ],
+        zip_safe=False,
     )
 
 
index d7e307b..732665d 100644 (file)
@@ -288,7 +288,6 @@ INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
 LCOV = @LCOV@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
-LIBFFI_PC = @LIBFFI_PC@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
index fda4dd1..79297d0 100755 (executable)
@@ -49,6 +49,7 @@ import gi
 gi.require_version("GIRepository", "2.0")
 from gi.repository import GIRepository
 repo = GIRepository.Repository.get_default()
+repo.prepend_library_path(os.path.join(tests_builddir))
 repo.prepend_library_path(os.path.join(tests_builddir, ".libs"))
 repo.prepend_search_path(tests_builddir)
 
index 78366a9..fa48cdb 100644 (file)
@@ -208,6 +208,7 @@ https://my.org/q?x=1&y=2
 
         self.assertEqual(call_data, [(r, GLib.IOCondition.IN, b'a', ('moo', 'foo'))])
 
+    @unittest.skipIf(sys.platform == "darwin", "fails")
     @unittest.skipIf(os.name == "nt", "no shell on Windows")
     def test_io_add_watch_pyfile(self):
         call_data = []
index 891923e..a9d5b58 100644 (file)
@@ -140,6 +140,34 @@ class TestGVariant(unittest.TestCase):
         self.assertEqual(variant.get_type_string(), 'aai')
         self.assertEqual(variant.unpack(), [[1, 2], [3, 4, 5]])
 
+    def test_create_maybe(self):
+        variant = GLib.Variant('mai', None)
+        self.assertEqual(variant.get_type_string(), 'mai')
+        self.assertEqual(variant.n_children(), 0)
+        self.assertEqual(variant.unpack(), None)
+
+        variant = GLib.Variant('mai', [])
+        self.assertEqual(variant.get_type_string(), 'mai')
+        self.assertEqual(variant.n_children(), 1)
+
+        variant = GLib.Variant('mami', [None])
+        self.assertEqual(variant.get_type_string(), 'mami')
+        self.assertEqual(variant.n_children(), 1)
+
+        variant = GLib.Variant('mami', [None, 13, None])
+        self.assertEqual(variant.get_type_string(), 'mami')
+        self.assertEqual(variant.n_children(), 1)
+        array = variant.get_child_value(0)
+        self.assertEqual(array.n_children(), 3)
+
+        element = array.get_child_value(0)
+        self.assertEqual(element.n_children(), 0)
+        element = array.get_child_value(1)
+        self.assertEqual(element.n_children(), 1)
+        self.assertEqual(element.get_child_value(0).get_int32(), 13)
+        element = array.get_child_value(2)
+        self.assertEqual(element.n_children(), 0)
+
     def test_create_complex(self):
         variant = GLib.Variant('(as)', ([],))
         self.assertEqual(variant.get_type_string(), '(as)')
@@ -232,8 +260,8 @@ class TestGVariant(unittest.TestCase):
         self.assertRaises(TypeError, GLib.Variant, '(ss)', 'mec', 'mac')
         self.assertRaises(TypeError, GLib.Variant, '(s)', 'hello')
 
-        # unimplemented data type
-        self.assertRaises(NotImplementedError, GLib.Variant, 'Q', 1)
+        # invalid format string
+        self.assertRaises(TypeError, GLib.Variant, 'Q', 1)
 
         # invalid types
         self.assertRaises(TypeError, GLib.Variant, '(ii', (42, 3))
@@ -280,12 +308,16 @@ class TestGVariant(unittest.TestCase):
         self.assertEqual(res, {'key1': 1, 'key2': 2})
 
         # maybe
-        v = GLib.Variant.new_maybe(GLib.VariantType.new('i'), GLib.Variant('i', 1))
-        res = v.unpack()
-        self.assertEqual(res, 1)
-        v = GLib.Variant.new_maybe(GLib.VariantType.new('i'), None)
-        res = v.unpack()
-        self.assertEqual(res, None)
+        v = GLib.Variant('mi', 1)
+        self.assertEqual(v.unpack(), 1)
+        v = GLib.Variant('mi', None)
+        self.assertEqual(v.unpack(), None)
+        v = GLib.Variant('mai', [])
+        self.assertEqual(v.unpack(), [])
+        v = GLib.Variant('m()', ())
+        self.assertEqual(v.unpack(), ())
+        v = GLib.Variant('mami', [None, 1, None])
+        self.assertEqual(v.unpack(), [None, 1, None])
 
     def test_iteration(self):
         # array index access
index 769e439..f15e717 100644 (file)
@@ -463,6 +463,12 @@ class TestGtk(unittest.TestCase):
         adjustment = Gtk.Adjustment()
         self.adjustment_check(adjustment)
 
+        adjustment = Gtk.Adjustment(1, -1, 3, 0, 0, 0)
+        self.adjustment_check(adjustment, value=1, lower=-1, upper=3)
+
+        adjustment = Gtk.Adjustment(1, -1, 3, 0, 0, 0, value=2)
+        self.adjustment_check(adjustment, value=2, lower=-1, upper=3)
+
     @unittest.skipIf(Gtk._version == "4.0", "not in gtk4")
     def test_table(self):
         table = Gtk.Table()
@@ -538,6 +544,7 @@ class TestGtk(unittest.TestCase):
             self.assertTrue(hasattr(widget, 'drag_dest_set_proxy'))
         self.assertTrue(hasattr(widget, 'drag_get_data'))
 
+    @unittest.skipIf(sys.platform == "darwin", "crashes")
     def test_drag_target_list(self):
         mixed_target_list = [Gtk.TargetEntry.new('test0', 0, 0),
                              ('test1', 1, 1),
index b2f121a..642708b 100644 (file)
@@ -4,12 +4,15 @@ import gc
 import unittest
 import sys
 import weakref
+import threading
+import time
 
 from gi.repository import GObject, GLib, Regress, Gio
 from gi import _signalhelper as signalhelper
 import testhelper
 from compathelper import _long
 from helper import capture_glib_warnings, capture_gi_deprecation_warnings
+from gi.module import repository as repo
 
 
 class C(GObject.GObject):
@@ -1219,6 +1222,53 @@ class TestIntrospectedSignals(unittest.TestCase):
         self.assertNotEqual(struct, held_struct)
 
 
+class TestIntrospectedSignalsIssue158(unittest.TestCase):
+    """
+    The test for https://gitlab.gnome.org/GNOME/pygobject/issues/158
+    """
+    _obj_sig_names = [sig.get_name() for sig in repo.find_by_name('Regress', 'TestObj').get_signals()]
+
+    def __init__(self, *args):
+        unittest.TestCase.__init__(self, *args)
+        self._gc_thread_stop = False
+
+    def _gc_thread(self):
+        while not self._gc_thread_stop:
+            gc.collect()
+            time.sleep(0.010)
+
+    def _callback(self, *args):
+        pass
+
+    def test_run(self):
+        """
+        Manually trigger GC from a different thread periodicaly
+        while the main thread keeps connecting/disconnecting to/from signals.
+
+        It takes a lot of time to reproduce the issue. It is possible to make it
+        fail reliably by changing the code of pygobject_unwatch_closure slightly from:
+          PyGObjectData *inst_data = data;
+          inst_data->closures = g_slist_remove (inst_data->closures, closure);
+        to
+          PyGObjectData *inst_data = data;
+          GSList *tmp = g_slist_remove (inst_data->closures, closure);
+          g_usleep(G_USEC_PER_SEC/10);
+          inst_data->closures = tmp;
+        """
+        obj = Regress.TestObj()
+        gc_thread = threading.Thread(target=self._gc_thread)
+        gc_thread.start()
+
+        for _ in range(8):
+            handlers = [obj.connect(sig, self._callback) for sig in self._obj_sig_names]
+            time.sleep(0.010)
+            while len(handlers) > 0:
+                obj.disconnect(handlers.pop())
+
+        self._gc_thread_stop = True
+        gc_thread.join()
+
+
 class _ConnectObjectTestBase(object):
     # Notes:
     #  - self.Object is overridden in sub-classes.
index 866826e..b544734 100644 (file)
@@ -1,7 +1,6 @@
 # -*- Mode: Python -*-
 
 import sys
-import gc
 import unittest
 import warnings
 
@@ -127,7 +126,6 @@ class TestSource(unittest.TestCase):
             return s
 
         s = f()
-        gc.collect()
         self.assertTrue(s.is_destroyed())
 
     def test_remove(self):
@@ -209,9 +207,8 @@ class TestSource(unittest.TestCase):
                 self.finalized = True
 
         source = S()
-        self.assertEqual(source.ref_count, 1)
-        source.attach()
-        self.assertEqual(source.ref_count, 2)
+        id = source.attach()
+        print('source id:', id)
         self.assertFalse(self.finalized)
         self.assertFalse(source.is_destroyed())
 
@@ -219,7 +216,6 @@ class TestSource(unittest.TestCase):
             pass
 
         source.destroy()
-        self.assertEqual(source.ref_count, 1)
         self.assertTrue(self.dispatched)
         self.assertFalse(self.finalized)
         self.assertTrue(source.is_destroyed())