+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
-------------------
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
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)
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)
project('pygobject', 'c',
- version : '3.30.3',
+ version : '3.30.4',
meson_version : '>= 0.46.0',
default_options : [ 'warning_level=1',
'buildtype=debugoptimized'])
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"
def is_dev_version():
- version = tuple(map(int, PYGOBJECT_VERISON.split(".")))
+ version = tuple(map(int, PYGOBJECT_VERSION.split(".")))
return version[1] % 2 != 0
def get_versions():
- version = PYGOBJECT_VERISON.split(".")
+ version = PYGOBJECT_VERSION.split(".")
assert len(version) == 3
versions = {
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:
"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)
([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 = []
([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()
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
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')
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')
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())
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):
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)