Code deduplication: make function in GUIUtil to get connection type to call object...
authorWladimir J. van der Laan <laanwj@gmail.com>
Sat, 24 Mar 2012 16:07:29 +0000 (17:07 +0100)
committerWladimir J. van der Laan <laanwj@gmail.com>
Wed, 4 Apr 2012 06:46:12 +0000 (08:46 +0200)
with invokeMethod.

src/qt/bitcoin.cpp
src/qt/guiutil.cpp
src/qt/guiutil.h

index 7384646..0f7c96e 100644 (file)
@@ -5,6 +5,7 @@
 #include "clientmodel.h"
 #include "walletmodel.h"
 #include "optionsmodel.h"
+#include "guiutil.h"
 
 #include "headers.h"
 #include "init.h"
@@ -12,7 +13,6 @@
 
 #include <QApplication>
 #include <QMessageBox>
-#include <QThread>
 #include <QTextCodec>
 #include <QLocale>
 #include <QTranslator>
@@ -70,15 +70,7 @@ bool ThreadSafeAskFee(int64 nFeeRequired, const std::string& strCaption, wxWindo
         return true;
     bool payFee = false;
 
-    // Call slot on GUI thread.
-    // If called from another thread, use a blocking QueuedConnection.
-    Qt::ConnectionType connectionType = Qt::DirectConnection;
-    if(QThread::currentThread() != QCoreApplication::instance()->thread())
-    {
-        connectionType = Qt::BlockingQueuedConnection;
-    }
-
-    QMetaObject::invokeMethod(guiref, "askFee", connectionType,
+    QMetaObject::invokeMethod(guiref, "askFee", GUIUtil::blockingGUIThreadConnection(),
                                Q_ARG(qint64, nFeeRequired),
                                Q_ARG(bool*, &payFee));
 
@@ -90,14 +82,7 @@ void ThreadSafeHandleURL(const std::string& strURL)
     if(!guiref)
         return;
 
-    // Call slot on GUI thread.
-    // If called from another thread, use a blocking QueuedConnection.
-    Qt::ConnectionType connectionType = Qt::DirectConnection;
-    if(QThread::currentThread() != QCoreApplication::instance()->thread())
-    {
-        connectionType = Qt::BlockingQueuedConnection;
-    }
-    QMetaObject::invokeMethod(guiref, "handleURL", connectionType,
+    QMetaObject::invokeMethod(guiref, "handleURL", GUIUtil::blockingGUIThreadConnection(),
                                Q_ARG(QString, QString::fromStdString(strURL)));
 }
 
index ac69bd0..ad530a7 100644 (file)
@@ -17,6 +17,7 @@
 #include <QClipboard>
 #include <QFileDialog>
 #include <QDesktopServices>
+#include <QThread>
 
 QString GUIUtil::dateTimeStr(qint64 nTime)
 {
@@ -184,3 +185,14 @@ QString GUIUtil::getSaveFileName(QWidget *parent, const QString &caption,
     return result;
 }
 
+Qt::ConnectionType GUIUtil::blockingGUIThreadConnection()
+{
+    if(QThread::currentThread() != QCoreApplication::instance()->thread())
+    {
+        return Qt::BlockingQueuedConnection;
+    }
+    else
+    {
+        return Qt::DirectConnection;
+    }
+}
index 75ba53f..06426d7 100644 (file)
@@ -60,6 +60,14 @@ public:
                                    const QString &dir=QString(), const QString &filter=QString(),
                                    QString *selectedSuffixOut=0);
 
+
+    /** Get connection type to call object slot in GUI thread with invokeMethod. The call will be blocking.
+
+       @returns If called from the GUI thread, return a Qt::DirectConnection.
+                If called from another thread, return a Qt::BlockingQueuedConnection.
+    */
+    static Qt::ConnectionType blockingGUIThreadConnection();
+
 };
 
 #endif // GUIUTIL_H