aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--PySide/QtCore/typesystem_core.xml10
-rw-r--r--tests/QtCore/qobject_event_filter_test.py36
-rw-r--r--tests/QtGui/event_filter_test.py6
3 files changed, 39 insertions, 13 deletions
diff --git a/PySide/QtCore/typesystem_core.xml b/PySide/QtCore/typesystem_core.xml
index 3e4e656d8..b94832ad0 100644
--- a/PySide/QtCore/typesystem_core.xml
+++ b/PySide/QtCore/typesystem_core.xml
@@ -1276,16 +1276,6 @@
<define-ownership owner="c++"/>
</modify-argument>
</modify-function>
- <modify-function signature="installEventFilter(QObject*)">
- <inject-code>
- Shiboken::Object::keepReference((SbkObject*)%PYARG_1, "eventFilter", %PYSELF, true);
- </inject-code>
- </modify-function>
- <modify-function signature="removeEventFilter(QObject*)">
- <inject-code>
- Shiboken::Object::removeReference((SbkObject*)%PYARG_1, "eventFilter", %PYSELF);
- </inject-code>
- </modify-function>
<!-- Invalidate-after-use stuff -->
<modify-function signature="childEvent(QChildEvent*)">
<modify-argument index="1" invalidate-after-use="yes"/>
diff --git a/tests/QtCore/qobject_event_filter_test.py b/tests/QtCore/qobject_event_filter_test.py
index 8018fcda0..8fded7983 100644
--- a/tests/QtCore/qobject_event_filter_test.py
+++ b/tests/QtCore/qobject_event_filter_test.py
@@ -2,6 +2,8 @@
'''Test cases for QObject.eventFilter'''
import unittest
+import weakref
+import sys
from PySide.QtCore import QObject, QTimerEvent
@@ -76,5 +78,39 @@ class TestQObjectEventFilterPython(UsesQCoreApplication):
self.assertEqual(filtered.times_called, 5)
self.assertEqual(self.obj_filter.events_handled, 5)
+ def testInstallEventFilterRefCountAfterDelete(self):
+ '''Bug 910 - installEventFilter() increments reference count on target object
+ http://bugs.pyside.org/show_bug.cgi?id=910'''
+ obj = QObject()
+ filt = QObject()
+
+ self.assertEqual(sys.getrefcount(obj), 2)
+ self.assertEqual(sys.getrefcount(filt), 2)
+ obj.installEventFilter(filt)
+ self.assertEqual(sys.getrefcount(obj), 2)
+ self.assertEqual(sys.getrefcount(filt), 2)
+
+ wref = weakref.ref(obj)
+ del obj
+ self.assertEqual(wref(), None)
+
+ def testInstallEventFilterRefCountAfterRemove(self):
+ # Bug 910
+ obj = QObject()
+ filt = QObject()
+
+ self.assertEqual(sys.getrefcount(obj), 2)
+ self.assertEqual(sys.getrefcount(filt), 2)
+ obj.installEventFilter(filt)
+ self.assertEqual(sys.getrefcount(obj), 2)
+ self.assertEqual(sys.getrefcount(filt), 2)
+ obj.removeEventFilter(filt)
+ self.assertEqual(sys.getrefcount(obj), 2)
+ self.assertEqual(sys.getrefcount(filt), 2)
+
+ wref = weakref.ref(obj)
+ del obj
+ self.assertEqual(wref(), None)
+
if __name__ == '__main__':
unittest.main()
diff --git a/tests/QtGui/event_filter_test.py b/tests/QtGui/event_filter_test.py
index 88dbd960b..ec82515da 100644
--- a/tests/QtGui/event_filter_test.py
+++ b/tests/QtGui/event_filter_test.py
@@ -2,7 +2,7 @@ import unittest
import sys
from helper import UsesQApplication
-from PySide.QtCore import QObject, QEvent, QTimer
+from PySide.QtCore import QObject, QEvent
from PySide.QtGui import QWidget
class MyFilter(QObject):
@@ -17,10 +17,10 @@ class EventFilter(UsesQApplication):
o = QObject()
filt = MyFilter()
o.installEventFilter(filt)
- self.assertEqual(sys.getrefcount(o), 3)
+ self.assertEqual(sys.getrefcount(o), 2)
o.installEventFilter(filt)
- self.assertEqual(sys.getrefcount(o), 3)
+ self.assertEqual(sys.getrefcount(o), 2)
o.removeEventFilter(filt)
self.assertEqual(sys.getrefcount(o), 2)