[pygobject/tree-model-sort-new-overrides] Gtk overrides: make sure TreeModelSort.new_with_model and TreeModel.sort_new_with_model exist



commit cd71a5f1abd4eadc159ce60fd14a2971e66990aa
Author: Christoph Reiter <reiter christoph gmail com>
Date:   Sat Mar 7 13:22:54 2020 +0100

    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.

 gi/overrides/Gtk.py         | 12 ++++++++++++
 tests/test_overrides_gtk.py | 15 +++++++++++++++
 2 files changed, 27 insertions(+)
---
diff --git a/gi/overrides/Gtk.py b/gi/overrides/Gtk.py
index 3ea02ae1..ff22f228 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 9c32e8ba..88b3f88e 100644
--- a/tests/test_overrides_gtk.py
+++ b/tests/test_overrides_gtk.py
@@ -1148,6 +1148,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)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]