Add menu-showing function to RDDialog (using manual event loop pump)

This commit is contained in:
baldurk
2016-10-10 13:28:52 +02:00
parent 400c596894
commit 9d49b7ae38
2 changed files with 16 additions and 0 deletions
+13
View File
@@ -25,6 +25,7 @@
#include "CaptureContext.h"
#include <QApplication>
#include <QFileInfo>
#include <QMenu>
#include <QMessageBox>
#include <QMetaObject>
#include <QStandardPaths>
@@ -282,6 +283,18 @@ void GUIInvoke::blockcall(const std::function<void()> &f)
QMetaObject::invokeMethod(invoke, "doInvoke", Qt::BlockingQueuedConnection);
}
void RDDialog::show(QMenu *menu, QPoint pos)
{
menu->setWindowModality(Qt::ApplicationModal);
menu->popup(pos);
QEventLoop loop;
while(menu->isVisible())
{
loop.processEvents(QEventLoop::WaitForMoreEvents);
QCoreApplication::sendPostedEvents();
}
}
void RDDialog::show(QDialog *dialog)
{
dialog->setWindowModality(Qt::ApplicationModal);
+3
View File
@@ -253,9 +253,12 @@ public:
bool isRunning() { return m_Thread; }
};
class QMenu;
// helper for doing a manual blocking invoke of a dialog
struct RDDialog
{
static void show(QMenu *menu, QPoint pos);
static void show(QDialog *dialog);
static QMessageBox::StandardButton messageBox(
QMessageBox::Icon, QWidget *parent, const QString &title, const QString &text,