src/corelib/kernel/qtimer.cpp
changeset 30 5dc02b23752f
parent 18 2f34d5167611
--- a/src/corelib/kernel/qtimer.cpp	Wed Jun 23 19:07:03 2010 +0300
+++ b/src/corelib/kernel/qtimer.cpp	Tue Jul 06 15:10:48 2010 +0300
@@ -339,8 +339,20 @@
 
 void QTimer::singleShot(int msec, QObject *receiver, const char *member)
 {
-    if (receiver && member)
+    if (receiver && member) {
+        if (msec == 0) {
+            // special code shortpath for 0-timers
+            const char* bracketPosition = strchr(member, '(');
+            if (!bracketPosition || !(member[0] >= '0' && member[0] <= '3')) {
+                qWarning("QTimer::singleShot: Invalid slot specification");
+                return;
+            }
+            QByteArray methodName(member+1, bracketPosition - 1 - member); // extract method name
+            QMetaObject::invokeMethod(receiver, methodName.constData(), Qt::QueuedConnection);
+            return;
+        }
         (void) new QSingleShotTimer(msec, receiver, member);
+    }
 }
 
 /*!