diff options
author | Christoph Reiter <reiter.christoph@gmail.com> | 2020-03-07 13:22:54 +0100 |
---|---|---|
committer | Christoph Reiter <reiter.christoph@gmail.com> | 2020-03-17 08:31:12 +0000 |
commit | 9cdbc56fbac4db2de78dc080934b8f0a7efc892a (patch) | |
tree | 9724a554a4685d3f14c871e6e5066927730329f3 | |
parent | 9f50957ea17f116fafc44be5e26c08fc3c1179b0 (diff) | |
download | pygobject-9cdbc56fbac4db2de78dc080934b8f0a7efc892a.tar.gz |
Gtk overrides: make sure TreeModelSort.new_with_model and TreeModel.sort_new_with_model exist
In https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/1134 the method was changed to a constructor
which means the API is different between older and newer gtk.
Add fallbacks for both in our overrides so both ways work all the time.
-rw-r--r-- | gi/overrides/Gtk.py | 12 | ||||
-rw-r--r-- | tests/test_overrides_gtk.py | 15 |
2 files changed, 27 insertions, 0 deletions
diff --git a/gi/overrides/Gtk.py b/gi/overrides/Gtk.py index b4213642..d1ed83da 100644 --- a/gi/overrides/Gtk.py +++ b/gi/overrides/Gtk.py @@ -834,6 +834,13 @@ class TreeModel(Gtk.TreeModel): raise IndexError("could not find tree path '%s'" % key) return aiter + def sort_new_with_model(self): + super_object = super(TreeModel, self) + if hasattr(super_object, "sort_new_with_model"): + return super_object.sort_new_with_model() + else: + return TreeModelSort.new_with_model(self) + def _coerce_path(self, path): if isinstance(path, Gtk.TreePath): return path @@ -973,6 +980,11 @@ class TreeModelSort(Gtk.TreeModelSort): arg_names=('model',), category=PyGTKDeprecationWarning) + if not hasattr(Gtk.TreeModelSort, "new_with_model"): + @classmethod + def new_with_model(self, child_model): + return TreeModel.sort_new_with_model(child_model) + TreeModelSort = override(TreeModelSort) __all__.append('TreeModelSort') diff --git a/tests/test_overrides_gtk.py b/tests/test_overrides_gtk.py index 4cb2c748..4283d765 100644 --- a/tests/test_overrides_gtk.py +++ b/tests/test_overrides_gtk.py @@ -1169,6 +1169,21 @@ class TestTreeModelRow(unittest.TestCase): @ignore_gi_deprecation_warnings @unittest.skipUnless(Gtk, 'Gtk not available') class TestTreeModel(unittest.TestCase): + + def test_tree_model_sort_new_with_model_old(self): + # https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/1134 + model = Gtk.TreeStore(int) + sort_model = model.sort_new_with_model() + assert isinstance(sort_model, Gtk.TreeModelSort) + assert sort_model.get_model() == model + + def test_tree_model_sort_new_with_model_new(self): + # https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/1134 + model = Gtk.TreeStore(int) + sort_model = Gtk.TreeModelSort.new_with_model(child_model=model) + assert isinstance(sort_model, Gtk.TreeModelSort) + assert sort_model.get_model() == model + def test_tree_model_sort(self): self.assertEqual(Gtk.TreeModelSort, gi.overrides.Gtk.TreeModelSort) model = Gtk.TreeStore(int, bool) |