Code deduplication: make function in GUIUtil to get connection type to call object slot in GUI thread
with invokeMethod.
This commit is contained in:
parent
55f69a4700
commit
7e7bcce2d9
3 changed files with 23 additions and 18 deletions
|
@ -5,6 +5,7 @@
|
||||||
#include "clientmodel.h"
|
#include "clientmodel.h"
|
||||||
#include "walletmodel.h"
|
#include "walletmodel.h"
|
||||||
#include "optionsmodel.h"
|
#include "optionsmodel.h"
|
||||||
|
#include "guiutil.h"
|
||||||
|
|
||||||
#include "headers.h"
|
#include "headers.h"
|
||||||
#include "init.h"
|
#include "init.h"
|
||||||
|
@ -12,7 +13,6 @@
|
||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QThread>
|
|
||||||
#include <QTextCodec>
|
#include <QTextCodec>
|
||||||
#include <QLocale>
|
#include <QLocale>
|
||||||
#include <QTranslator>
|
#include <QTranslator>
|
||||||
|
@ -70,15 +70,7 @@ bool ThreadSafeAskFee(int64 nFeeRequired, const std::string& strCaption, wxWindo
|
||||||
return true;
|
return true;
|
||||||
bool payFee = false;
|
bool payFee = false;
|
||||||
|
|
||||||
// Call slot on GUI thread.
|
QMetaObject::invokeMethod(guiref, "askFee", GUIUtil::blockingGUIThreadConnection(),
|
||||||
// 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,
|
|
||||||
Q_ARG(qint64, nFeeRequired),
|
Q_ARG(qint64, nFeeRequired),
|
||||||
Q_ARG(bool*, &payFee));
|
Q_ARG(bool*, &payFee));
|
||||||
|
|
||||||
|
@ -90,14 +82,7 @@ void ThreadSafeHandleURL(const std::string& strURL)
|
||||||
if(!guiref)
|
if(!guiref)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Call slot on GUI thread.
|
QMetaObject::invokeMethod(guiref, "handleURL", GUIUtil::blockingGUIThreadConnection(),
|
||||||
// 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,
|
|
||||||
Q_ARG(QString, QString::fromStdString(strURL)));
|
Q_ARG(QString, QString::fromStdString(strURL)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include <QClipboard>
|
#include <QClipboard>
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
#include <QDesktopServices>
|
#include <QDesktopServices>
|
||||||
|
#include <QThread>
|
||||||
|
|
||||||
QString GUIUtil::dateTimeStr(qint64 nTime)
|
QString GUIUtil::dateTimeStr(qint64 nTime)
|
||||||
{
|
{
|
||||||
|
@ -184,3 +185,14 @@ QString GUIUtil::getSaveFileName(QWidget *parent, const QString &caption,
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Qt::ConnectionType GUIUtil::blockingGUIThreadConnection()
|
||||||
|
{
|
||||||
|
if(QThread::currentThread() != QCoreApplication::instance()->thread())
|
||||||
|
{
|
||||||
|
return Qt::BlockingQueuedConnection;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return Qt::DirectConnection;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -60,6 +60,14 @@ public:
|
||||||
const QString &dir=QString(), const QString &filter=QString(),
|
const QString &dir=QString(), const QString &filter=QString(),
|
||||||
QString *selectedSuffixOut=0);
|
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
|
#endif // GUIUTIL_H
|
||||||
|
|
Loading…
Reference in a new issue