From 1b5705388c4d41aac8462895e618577ad696d631 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Fri, 30 Oct 2020 12:52:39 +0200 Subject: [PATCH] Fix crash while synchronize measurements. --- ChangeLog.txt | 1 + src/app/valentina/mainwindow.cpp | 29 ++++++++++++++++++----------- src/app/valentina/mainwindow.h | 1 + 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 0a9b75fbb..94d927a2e 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -38,6 +38,7 @@ - Elide a variable description in the formula wizard. - Fix removing a pin in the Seam Allowance tool dialog. - Fix label size for case with two pins. +- Fix crash while synchronize measurements. # Version 0.6.1 October 23, 2018 - [#885] Regression. Broken support for multi size measurements. diff --git a/src/app/valentina/mainwindow.cpp b/src/app/valentina/mainwindow.cpp index cdc6387a5..9d477302d 100644 --- a/src/app/valentina/mainwindow.cpp +++ b/src/app/valentina/mainwindow.cpp @@ -136,7 +136,11 @@ MainWindow::MainWindow(QWidget *parent) isDockGroupsVisible(true), drawMode(true), recentFileActs(), separatorAct(nullptr), - leftGoToStage(nullptr), rightGoToStage(nullptr), autoSaveTimer(nullptr), guiEnabled(true), + leftGoToStage(nullptr), + rightGoToStage(nullptr), + autoSaveTimer(nullptr), + measurementsSyncTimer(new QTimer(this)), + guiEnabled(true), gradationHeights(nullptr), gradationSizes(nullptr), gradationHeightsLabel(nullptr), @@ -209,18 +213,22 @@ MainWindow::MainWindow(QWidget *parent) ui->dockWidgetLayoutPages->setVisible(false); connect(watcher, &QFileSystemWatcher::fileChanged, this, &MainWindow::MeasurementsChanged); - connect(qApp, &QApplication::focusChanged, this, [this](QWidget *old, QWidget *now) + + measurementsSyncTimer->setTimerType(Qt::VeryCoarseTimer); + connect(measurementsSyncTimer, &QTimer::timeout, this, [this]() { - if (old == nullptr && isAncestorOf(now) == true) - {// focus IN + if (isActiveWindow()) + { static bool asking = false; if (not asking && mChanges && not mChangesAsked) { asking = true; mChangesAsked = true; - const auto answer = QMessageBox::question(this, tr("Measurements"), - tr("Measurements were changed. Do you want to sync measurements now?"), - QMessageBox::Yes|QMessageBox::No, QMessageBox::Yes); + measurementsSyncTimer->stop(); + const auto answer = + QMessageBox::question(this, tr("Measurements"), + tr("Measurements were changed. Do you want to sync measurements now?"), + QMessageBox::Yes|QMessageBox::No, QMessageBox::Yes); if (answer == QMessageBox::Yes) { SyncMeasurements(); @@ -228,10 +236,6 @@ MainWindow::MainWindow(QWidget *parent) asking = false; } } - - // In case we will need it - // else if (isAncestorOf(old) == true && now == nullptr) - // focus OUT }); #if defined(Q_OS_MAC) @@ -1771,6 +1775,7 @@ void MainWindow::MeasurementsChanged(const QString &path) { mChanges = true; mChangesAsked = false; + measurementsSyncTimer->start(1500); } else { @@ -1780,6 +1785,7 @@ void MainWindow::MeasurementsChanged(const QString &path) { mChanges = true; mChangesAsked = false; + measurementsSyncTimer->start(1500); break; } else @@ -1812,6 +1818,7 @@ void MainWindow::SyncMeasurements() doc->LiteParseTree(Document::LiteParse); mChanges = false; mChangesAsked = true; + measurementsSyncTimer->stop(); UpdateWindowTitle(); ui->actionSyncMeasurements->setEnabled(mChanges); } diff --git a/src/app/valentina/mainwindow.h b/src/app/valentina/mainwindow.h index 63e75efd2..0a3c547e7 100644 --- a/src/app/valentina/mainwindow.h +++ b/src/app/valentina/mainwindow.h @@ -264,6 +264,7 @@ private: QLabel *leftGoToStage; QLabel *rightGoToStage; QTimer *autoSaveTimer; + QTimer *measurementsSyncTimer; bool guiEnabled; QPointer gradationHeights; QPointer gradationSizes;