Imported Upstream version 3.30.4 upstream/3.30.4
authorDongHun Kwak <dh0128.kwak@samsung.com>
Wed, 25 Nov 2020 05:47:53 +0000 (14:47 +0900)
committerDongHun Kwak <dh0128.kwak@samsung.com>
Wed, 25 Nov 2020 05:47:53 +0000 (14:47 +0900)
NEWS
PKG-INFO.in
gi/overrides/Gtk.py
meson.build
setup.py
tests/test_overrides_gtk.py
tests/test_repository.py

diff --git a/NEWS b/NEWS
index 6edadfa..940085b 100644 (file)
--- 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 <cianwilson>`
+  for the report)
+
+
 3.30.3 - 2018-11-27
 -------------------
 
index c357cc3..34891d7 100644 (file)
@@ -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
index 0a0714d..9cb92c0 100644 (file)
@@ -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)
 
index 714ff7f..fab0768 100644 (file)
@@ -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'])
index f1b03a8..52f8f78 100755 (executable)
--- 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)
index c515e51..643be5c 100644 (file)
@@ -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()
index d324dfc..de2e5c9 100644 (file)
 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)