Fixes bug #910 - installEventFilter() increments reference count on target object.
http://bugs.pyside.org/show_bug.cgi?id=910 Also added/fixed unit tests. Reviewed by Hugo Parente <hugo.lima@openbossa.org> Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
This commit is contained in:
parent
33bf95628f
commit
2e98f87d20
3 changed files with 39 additions and 13 deletions
|
|
@ -1284,16 +1284,6 @@
|
||||||
<define-ownership owner="c++"/>
|
<define-ownership owner="c++"/>
|
||||||
</modify-argument>
|
</modify-argument>
|
||||||
</modify-function>
|
</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 -->
|
<!-- Invalidate-after-use stuff -->
|
||||||
<modify-function signature="childEvent(QChildEvent*)">
|
<modify-function signature="childEvent(QChildEvent*)">
|
||||||
<modify-argument index="1" invalidate-after-use="yes"/>
|
<modify-argument index="1" invalidate-after-use="yes"/>
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@
|
||||||
'''Test cases for QObject.eventFilter'''
|
'''Test cases for QObject.eventFilter'''
|
||||||
|
|
||||||
import unittest
|
import unittest
|
||||||
|
import weakref
|
||||||
|
import sys
|
||||||
|
|
||||||
from PySide.QtCore import QObject, QTimerEvent
|
from PySide.QtCore import QObject, QTimerEvent
|
||||||
|
|
||||||
|
|
@ -76,5 +78,39 @@ class TestQObjectEventFilterPython(UsesQCoreApplication):
|
||||||
self.assertEqual(filtered.times_called, 5)
|
self.assertEqual(filtered.times_called, 5)
|
||||||
self.assertEqual(self.obj_filter.events_handled, 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__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ import unittest
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from helper import UsesQApplication
|
from helper import UsesQApplication
|
||||||
from PySide.QtCore import QObject, QEvent, QTimer
|
from PySide.QtCore import QObject, QEvent
|
||||||
from PySide.QtGui import QWidget
|
from PySide.QtGui import QWidget
|
||||||
|
|
||||||
class MyFilter(QObject):
|
class MyFilter(QObject):
|
||||||
|
|
@ -17,10 +17,10 @@ class EventFilter(UsesQApplication):
|
||||||
o = QObject()
|
o = QObject()
|
||||||
filt = MyFilter()
|
filt = MyFilter()
|
||||||
o.installEventFilter(filt)
|
o.installEventFilter(filt)
|
||||||
self.assertEqual(sys.getrefcount(o), 3)
|
self.assertEqual(sys.getrefcount(o), 2)
|
||||||
|
|
||||||
o.installEventFilter(filt)
|
o.installEventFilter(filt)
|
||||||
self.assertEqual(sys.getrefcount(o), 3)
|
self.assertEqual(sys.getrefcount(o), 2)
|
||||||
|
|
||||||
o.removeEventFilter(filt)
|
o.removeEventFilter(filt)
|
||||||
self.assertEqual(sys.getrefcount(o), 2)
|
self.assertEqual(sys.getrefcount(o), 2)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue