Defer loading .rdc from drag & drop, to unblock the calling application

This commit is contained in:
baldurk
2017-11-10 16:43:14 +00:00
parent 136909eaad
commit 82e1218b62
3 changed files with 13 additions and 1 deletions
+5
View File
@@ -372,6 +372,11 @@ void GUIInvoke::call(const std::function<void()> &f)
return;
}
defer(f);
}
void GUIInvoke::defer(const std::function<void()> &f)
{
GUIInvoke *invoke = new GUIInvoke(f);
invoke->moveToThread(qApp->thread());
invoke->metaObject()->method(methodIndex).invoke(invoke, Qt::QueuedConnection);
+3
View File
@@ -177,6 +177,9 @@ public:
static void blockcall(const std::function<void()> &f);
static bool onUIThread();
// same as call() above, but it doesn't check for an instant call on the UI thread
static void defer(const std::function<void()> &f);
protected slots:
void doInvoke()
{
+5 -1
View File
@@ -1776,7 +1776,11 @@ void MainWindow::dropEvent(QDropEvent *event)
{
QString fn = dragFilename(event->mimeData());
if(!fn.isEmpty())
LoadFromFilename(fn, false);
{
// we defer this so we can return immediately and unblock whichever application dropped the
// item.
GUIInvoke::defer([this, fn]() { LoadFromFilename(fn, false); });
}
}
void MainWindow::LoadSaveLayout(QAction *action, bool save)