Remove possibility of the infinitive loop on screen capture and remove activeModalWidget check on screen capture for MacOS

(cherry picked from commit 305e054c9c97e47e092ad974a683cdf5753ab4a9)
This commit is contained in:
Yuriy Puchkov
2021-02-08 15:14:56 +02:00
parent 74f5ded7db
commit 3973c2f38d

View File

@@ -36,11 +36,13 @@
#include <QJsonDocument>
#include <QJsonObject>
#include <QMenu>
#include <QMessageBox>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QOperatingSystemVersion>
#include <QSystemTrayIcon>
#include <QThread>
#ifdef Q_OS_WIN
#include "src/core/globalshortcutfilter.h"
@@ -262,15 +264,29 @@ void Controller::startVisualCapture(const uint id,
}
#endif
if (!m_captureWindow) {
QWidget* modalWidget = nullptr;
do {
modalWidget = qApp->activeModalWidget();
if (nullptr == m_captureWindow) {
#if (defined(Q_OS_MAC) || defined(Q_OS_MAC64) || defined(Q_OS_MACOS) || \
defined(Q_OS_MACX))
// It seems that the following code is not required for MacOS because it
// has another type of CaptureWidget editor (FullScreen instead Flags:
// Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::Popup
int timeout = 5000; // 5 seconds
for (; timeout >= 0; timeout -= 10) {
qDebug() << "timeout" << timeout;
QWidget* modalWidget = qApp->activeModalWidget();
if (modalWidget) {
modalWidget->close();
modalWidget->deleteLater();
} else {
break;
}
} while (modalWidget);
QThread::msleep(10);
}
if (0 == timeout) {
QMessageBox::warning(
nullptr, tr("Error"), tr("Unable to close active modal widgets"));
}
#endif
m_captureWindow = new CaptureWidget(id, forcedSavePath);
// m_captureWindow = new CaptureWidget(id, forcedSavePath, false); //