Browse Source

Code deduplication: make function in GUIUtil to get connection type to call object slot in GUI thread

with invokeMethod.
0.8
Wladimir J. van der Laan 13 years ago
parent
commit
7e7bcce2d9
  1. 21
      src/qt/bitcoin.cpp
  2. 12
      src/qt/guiutil.cpp
  3. 8
      src/qt/guiutil.h

21
src/qt/bitcoin.cpp

@ -5,6 +5,7 @@ @@ -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 @@ @@ -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 @@ -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) @@ -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)));
}

12
src/qt/guiutil.cpp

@ -17,6 +17,7 @@ @@ -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, @@ -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;
}
}

8
src/qt/guiutil.h

@ -60,6 +60,14 @@ public: @@ -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

Loading…
Cancel
Save