[pygobject] Expose GObject.Object.run_dispose()



commit eb5aefa615e85e023920c366225a67b602a812db
Author: Christoph Reiter <reiter christoph gmail com>
Date:   Tue Apr 27 18:32:06 2021 +0200

    Expose GObject.Object.run_dispose()
    
    Up until now this raised an exception "This method is currently unsupported.".
    
    With Gtk.Widget.destroy() gone in gtk4 and that method often being used to remove
    references to other objects and breaking cycles this is the next best thing
    on a lower level and should make porting a bit easier.
    
    Fixes #470

 gi/overrides/GObject.py |  1 -
 tests/test_gobject.py   | 19 +++++++++++++++++++
 2 files changed, 19 insertions(+), 1 deletion(-)
---
diff --git a/gi/overrides/GObject.py b/gi/overrides/GObject.py
index 95a3c1f3..823c0b04 100644
--- a/gi/overrides/GObject.py
+++ b/gi/overrides/GObject.py
@@ -520,7 +520,6 @@ class Object(GObjectModule.Object):
     interface_install_property = _unsupported_method
     interface_list_properties = _unsupported_method
     notify_by_pspec = _unsupported_method
-    run_dispose = _unsupported_method
     watch_closure = _unsupported_method
 
     # Make all reference management methods private but still accessible.
diff --git a/tests/test_gobject.py b/tests/test_gobject.py
index f5a65bba..fbc3bb79 100644
--- a/tests/test_gobject.py
+++ b/tests/test_gobject.py
@@ -67,6 +67,25 @@ def test_gobject_weak_ref():
 
 class TestGObjectAPI(unittest.TestCase):
 
+    def test_run_dispose(self):
+        class TestObject(GObject.GObject):
+            int_prop = GObject.Property(default=0, type=int)
+
+        obj = TestObject()
+        called = []
+
+        def on_notify(*args):
+            called.append(args)
+
+        obj.connect('notify::int-prop', on_notify)
+        obj.notify("int-prop")
+        obj.notify("int-prop")
+        # after this everything should be disconnected
+        obj.run_dispose()
+        obj.notify("int-prop")
+        obj.notify("int-prop")
+        assert len(called) == 2
+
     def test_call_method_uninitialized_instance(self):
         obj = GObject.Object.__new__(GObject.Object)
         with self.assertRaisesRegex(RuntimeError, '.*is not initialized'):


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