From e201665db4ee1749993974c36e0e5288a48be160 Mon Sep 17 00:00:00 2001 From: DongHun Kwak Date: Tue, 24 Nov 2020 12:36:44 +0900 Subject: [PATCH] Imported Upstream version 3.30.4 --- NEWS | 9 ++++++++ PKG-INFO.in | 2 +- gi/overrides/Gtk.py | 4 ++++ meson.build | 2 +- setup.py | 10 ++++----- tests/test_overrides_gtk.py | 40 ++++++++++++++++++++++++++++++++++ tests/test_repository.py | 43 ++++++++++++++++++++----------------- 7 files changed, 83 insertions(+), 27 deletions(-) diff --git a/NEWS b/NEWS index 6edadfa..940085b 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,12 @@ +3.30.4 - 2018-11-30 +------------------- + +* gtk overrides: Fix rows getting inserted on the wrong level with + TreeStore.insert_before/inster_after if parent=None. + :issue:`281` (3.30 regression, thanks to :user:`Cian Wilson ` + for the report) + + 3.30.3 - 2018-11-27 ------------------- diff --git a/PKG-INFO.in b/PKG-INFO.in index c357cc3..34891d7 100644 --- a/PKG-INFO.in +++ b/PKG-INFO.in @@ -12,7 +12,7 @@ Description: Python bindings for GObject Introspection Platform: POSIX, Windows Classifier: Development Status :: 5 - Production/Stable Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL) +Classifier: License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+) Classifier: Operating System :: POSIX Classifier: Operating System :: Microsoft :: Windows Classifier: Programming Language :: C diff --git a/gi/overrides/Gtk.py b/gi/overrides/Gtk.py index 0a0714d..9cb92c0 100644 --- a/gi/overrides/Gtk.py +++ b/gi/overrides/Gtk.py @@ -1282,6 +1282,8 @@ class TreeStore(Gtk.TreeStore, TreeModel, TreeSortable): if sibling is None: position = -1 else: + if parent is None: + parent = self.iter_parent(sibling) position = self.get_path(sibling).get_indices()[-1] return self._do_insert(parent, position, row) @@ -1292,6 +1294,8 @@ class TreeStore(Gtk.TreeStore, TreeModel, TreeSortable): if sibling is None: position = 0 else: + if parent is None: + parent = self.iter_parent(sibling) position = self.get_path(sibling).get_indices()[-1] + 1 return self._do_insert(parent, position, row) diff --git a/meson.build b/meson.build index 714ff7f..fab0768 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ project('pygobject', 'c', - version : '3.30.3', + version : '3.30.4', meson_version : '>= 0.46.0', default_options : [ 'warning_level=1', 'buildtype=debugoptimized']) diff --git a/setup.py b/setup.py index f1b03a8..52f8f78 100755 --- a/setup.py +++ b/setup.py @@ -41,7 +41,7 @@ from distutils import dir_util, log from distutils.spawn import find_executable -PYGOBJECT_VERISON = "3.30.3" +PYGOBJECT_VERSION = "3.30.4" GLIB_VERSION_REQUIRED = "2.38.0" GI_VERSION_REQUIRED = "1.46.0" PYCAIRO_VERSION_REQUIRED = "1.11.1" @@ -49,7 +49,7 @@ LIBFFI_VERSION_REQUIRED = "3.0" def is_dev_version(): - version = tuple(map(int, PYGOBJECT_VERISON.split("."))) + version = tuple(map(int, PYGOBJECT_VERSION.split("."))) return version[1] % 2 != 0 @@ -79,7 +79,7 @@ def get_version_requirement(pkg_config_name): def get_versions(): - version = PYGOBJECT_VERISON.split(".") + version = PYGOBJECT_VERSION.split(".") assert len(version) == 3 versions = { @@ -275,7 +275,7 @@ class sdist_gnome(Command): def run(self): # Don't use PEP 440 pre-release versions for GNOME releases - self.distribution.metadata.version = PYGOBJECT_VERISON + self.distribution.metadata.version = PYGOBJECT_VERSION dist_dir = tempfile.mkdtemp() try: @@ -1130,7 +1130,7 @@ class install_pkgconfig(Command): "includedir": "${prefix}/include", "datarootdir": "${prefix}/share", "datadir": "${datarootdir}", - "VERSION": PYGOBJECT_VERISON, + "VERSION": PYGOBJECT_VERSION, } for key, value in config.items(): content = content.replace("@%s@" % key, value) diff --git a/tests/test_overrides_gtk.py b/tests/test_overrides_gtk.py index c515e51..643be5c 100644 --- a/tests/test_overrides_gtk.py +++ b/tests/test_overrides_gtk.py @@ -1596,6 +1596,26 @@ class TestTreeModel(unittest.TestCase): ([0], [-1]), ([0, 0], [0]), ([0, 1], [None]), ([0, 2], [None]), ([0, 3], [4321]), ([0, 4], [1234])] + def test_tree_store_insert_before_none(self): + store = Gtk.TreeStore(object) + root = store.append(None) + sub = store.append(root) + + iter_ = store.insert_before(None, None, [1]) + assert store.get_path(iter_).get_indices() == [1] + + iter_ = store.insert_before(root, None, [1]) + assert store.get_path(iter_).get_indices() == [0, 1] + + iter_ = store.insert_before(sub, None, [1]) + assert store.get_path(iter_).get_indices() == [0, 0, 0] + + iter_ = store.insert_before(None, root, [1]) + assert store.get_path(iter_).get_indices() == [0] + + iter_ = store.insert_before(None, sub, [1]) + assert store.get_path(iter_).get_indices() == [1, 0] + def test_tree_store_insert_after(self): store = Gtk.TreeStore(object) signals = [] @@ -1657,6 +1677,26 @@ class TestTreeModel(unittest.TestCase): ([0], [-1]), ([0, 0], [1234]), ([0, 1], [4321]), ([0, 2], [None]), ([0, 3], [None]), ([0, 4], [0])] + def test_tree_store_insert_after_none(self): + store = Gtk.TreeStore(object) + root = store.append(None) + sub = store.append(root) + + iter_ = store.insert_after(None, None, [1]) + assert store.get_path(iter_).get_indices() == [0] + + iter_ = store.insert_after(root, None, [1]) + assert store.get_path(iter_).get_indices() == [1, 0] + + iter_ = store.insert_after(sub, None, [1]) + assert store.get_path(iter_).get_indices() == [1, 1, 0] + + iter_ = store.insert_after(None, root, [1]) + assert store.get_path(iter_).get_indices() == [2] + + iter_ = store.insert_after(None, sub, [1]) + assert store.get_path(iter_).get_indices() == [1, 2] + def test_tree_path(self): p1 = Gtk.TreePath() p2 = Gtk.TreePath.new_first() diff --git a/tests/test_repository.py b/tests/test_repository.py index d324dfc..de2e5c9 100644 --- a/tests/test_repository.py +++ b/tests/test_repository.py @@ -23,7 +23,10 @@ from __future__ import absolute_import import unittest -import collections +try: + from collections import abc +except ImportError: + import collections as abc import gi._gi as GIRepository from gi.module import repository as repo @@ -113,12 +116,12 @@ class Test(unittest.TestCase): def test_object_info(self): info = repo.find_by_name('GIMarshallingTests', 'Object') self.assertEqual(info.get_parent(), repo.find_by_name('GObject', 'Object')) - self.assertTrue(isinstance(info.get_methods(), collections.Iterable)) - self.assertTrue(isinstance(info.get_fields(), collections.Iterable)) - self.assertTrue(isinstance(info.get_interfaces(), collections.Iterable)) - self.assertTrue(isinstance(info.get_constants(), collections.Iterable)) - self.assertTrue(isinstance(info.get_vfuncs(), collections.Iterable)) - self.assertTrue(isinstance(info.get_properties(), collections.Iterable)) + self.assertTrue(isinstance(info.get_methods(), abc.Iterable)) + self.assertTrue(isinstance(info.get_fields(), abc.Iterable)) + self.assertTrue(isinstance(info.get_interfaces(), abc.Iterable)) + self.assertTrue(isinstance(info.get_constants(), abc.Iterable)) + self.assertTrue(isinstance(info.get_vfuncs(), abc.Iterable)) + self.assertTrue(isinstance(info.get_properties(), abc.Iterable)) self.assertFalse(info.get_abstract()) self.assertEqual(info.get_class_struct(), repo.find_by_name('GIMarshallingTests', 'ObjectClass')) self.assertEqual(info.get_type_name(), 'GIMarshallingTestsObject') @@ -158,12 +161,12 @@ class Test(unittest.TestCase): def test_interface_info(self): info = repo.find_by_name('GIMarshallingTests', 'Interface') - self.assertTrue(isinstance(info.get_methods(), collections.Iterable)) - self.assertTrue(isinstance(info.get_vfuncs(), collections.Iterable)) - self.assertTrue(isinstance(info.get_constants(), collections.Iterable)) - self.assertTrue(isinstance(info.get_prerequisites(), collections.Iterable)) - self.assertTrue(isinstance(info.get_properties(), collections.Iterable)) - self.assertTrue(isinstance(info.get_signals(), collections.Iterable)) + self.assertTrue(isinstance(info.get_methods(), abc.Iterable)) + self.assertTrue(isinstance(info.get_vfuncs(), abc.Iterable)) + self.assertTrue(isinstance(info.get_constants(), abc.Iterable)) + self.assertTrue(isinstance(info.get_prerequisites(), abc.Iterable)) + self.assertTrue(isinstance(info.get_properties(), abc.Iterable)) + self.assertTrue(isinstance(info.get_signals(), abc.Iterable)) method = info.find_method('test_int8_in') vfunc = info.find_vfunc('test_int8_in') @@ -179,8 +182,8 @@ class Test(unittest.TestCase): def test_struct_info(self): info = repo.find_by_name('GIMarshallingTests', 'InterfaceIface') self.assertTrue(isinstance(info, GIRepository.StructInfo)) - self.assertTrue(isinstance(info.get_fields(), collections.Iterable)) - self.assertTrue(isinstance(info.get_methods(), collections.Iterable)) + self.assertTrue(isinstance(info.get_fields(), abc.Iterable)) + self.assertTrue(isinstance(info.get_methods(), abc.Iterable)) self.assertTrue(isinstance(info.get_size(), int)) self.assertTrue(isinstance(info.get_alignment(), int)) self.assertTrue(info.is_gtype_struct()) @@ -189,16 +192,16 @@ class Test(unittest.TestCase): def test_enum_info(self): info = repo.find_by_name('GIMarshallingTests', 'Enum') self.assertTrue(isinstance(info, GIRepository.EnumInfo)) - self.assertTrue(isinstance(info.get_values(), collections.Iterable)) - self.assertTrue(isinstance(info.get_methods(), collections.Iterable)) + self.assertTrue(isinstance(info.get_values(), abc.Iterable)) + self.assertTrue(isinstance(info.get_methods(), abc.Iterable)) self.assertFalse(info.is_flags()) self.assertTrue(info.get_storage_type() > 0) # might be platform dependent def test_union_info(self): info = repo.find_by_name('GIMarshallingTests', 'Union') self.assertTrue(isinstance(info, GIRepository.UnionInfo)) - self.assertTrue(isinstance(info.get_fields(), collections.Iterable)) - self.assertTrue(isinstance(info.get_methods(), collections.Iterable)) + self.assertTrue(isinstance(info.get_fields(), abc.Iterable)) + self.assertTrue(isinstance(info.get_methods(), abc.Iterable)) self.assertTrue(isinstance(info.get_size(), int)) def test_type_info(self): @@ -245,7 +248,7 @@ class Test(unittest.TestCase): def test_callable_info(self): func_info = repo.find_by_name('GIMarshallingTests', 'array_fixed_out_struct') self.assertTrue(hasattr(func_info, 'invoke')) - self.assertTrue(isinstance(func_info.get_arguments(), collections.Iterable)) + self.assertTrue(isinstance(func_info.get_arguments(), abc.Iterable)) self.assertEqual(func_info.get_caller_owns(), GIRepository.Transfer.NOTHING) self.assertFalse(func_info.may_return_null()) self.assertEqual(func_info.get_return_type().get_tag(), GIRepository.TypeTag.VOID) -- 2.34.1