aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libpyside/pysidesignal.cpp9
-rw-r--r--tests/QtGui/CMakeLists.txt1
-rw-r--r--tests/QtGui/bug_988.py18
3 files changed, 27 insertions, 1 deletions
diff --git a/libpyside/pysidesignal.cpp b/libpyside/pysidesignal.cpp
index 9b8cbc076..3308035a4 100644
--- a/libpyside/pysidesignal.cpp
+++ b/libpyside/pysidesignal.cpp
@@ -777,6 +777,12 @@ static void _addSignalToWrapper(SbkObjectType* wrapperType, const char* signalNa
PyDict_SetItemString(typeDict, signalName, reinterpret_cast<PyObject*>(signal));
}
+// This function is used by qStableSort to promote empty signatures
+static bool compareSignals(const QByteArray& sig1, const QByteArray& sig2)
+{
+ return sig1.isEmpty();
+}
+
void registerSignals(SbkObjectType* pyObj, const QMetaObject* metaObject)
{
typedef QHash<QByteArray, QList<QByteArray> > SignalSigMap;
@@ -801,7 +807,8 @@ void registerSignals(SbkObjectType* pyObj, const QMetaObject* metaObject)
self->initialized = 0;
self->homonymousMethod = 0;
- qSort(it.value().begin(), it.value().end());
+ // Empty signatures comes first! So they will be the default signal signature
+ qStableSort(it.value().begin(), it.value().end(), &compareSignals);
SignalSigMap::mapped_type::const_iterator j = it.value().begin();
SignalSigMap::mapped_type::const_iterator endJ = it.value().end();
for (; j != endJ; ++j)
diff --git a/tests/QtGui/CMakeLists.txt b/tests/QtGui/CMakeLists.txt
index 044366ded..85e5988f7 100644
--- a/tests/QtGui/CMakeLists.txt
+++ b/tests/QtGui/CMakeLists.txt
@@ -72,6 +72,7 @@ PYSIDE_TEST(bug_921.py)
PYSIDE_TEST(bug_941.py)
PYSIDE_TEST(bug_964.py)
PYSIDE_TEST(bug_972.py)
+PYSIDE_TEST(bug_988.py)
PYSIDE_TEST(bug_991.py)
PYSIDE_TEST(customproxywidget_test.py)
PYSIDE_TEST(deepcopy_test.py)
diff --git a/tests/QtGui/bug_988.py b/tests/QtGui/bug_988.py
new file mode 100644
index 000000000..12e2155e1
--- /dev/null
+++ b/tests/QtGui/bug_988.py
@@ -0,0 +1,18 @@
+import unittest
+from PySide.QtGui import *
+
+class TestBug988 (unittest.TestCase):
+
+ def callback(self, arg):
+ self.arg = arg
+
+ def testIt(self):
+ self.arg = None
+ app = QApplication([])
+ obj = QTabWidget()
+ obj.currentChanged.connect(self.callback)
+ obj.currentChanged.emit(5)
+ self.assertEqual(self.arg, 5)
+
+if __name__ == "__main__":
+ unittest.main()