From 63aba8728b285fe974f3384a95ab53ea853e2af9 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Wed, 27 Jan 2021 19:20:26 +0200 Subject: [PATCH] Fix regression. Changing dimension value caused an infinite loop. --- ChangeLog.txt | 1 + src/app/valentina/mainwindow.cpp | 51 ++++++++++++++++++++------------ 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 6e5881241..d5509e372 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,5 +1,6 @@ # Version 0.7.43 (unreleased) - Improve Windows installer. Avoid crashing on checking if a program is still running. +- Fix regression. Changing dimension value caused an infinite loop. # Version 0.7.42 Jan 26, 2021 - Fix export of pattern recipe. diff --git a/src/app/valentina/mainwindow.cpp b/src/app/valentina/mainwindow.cpp index eb09427f3..99c3d1224 100644 --- a/src/app/valentina/mainwindow.cpp +++ b/src/app/valentina/mainwindow.cpp @@ -3831,45 +3831,58 @@ void MainWindow::PatternChangesWereSaved(bool saved) //--------------------------------------------------------------------------------------------------------------------- void MainWindow::DimensionABaseChanged() { + const qreal oldValue = m_currentDimensionA; m_currentDimensionA = dimensionA->currentData().toDouble(); - const QList dimensions = m->Dimensions().values(); - if (dimensions.size() > 1) + if (not VFuzzyComparePossibleNulls(oldValue, m_currentDimensionA)) { - MeasurementDimension_p dimension = dimensions.at(1); - InitDimensionGradation(1, dimension, dimensionB); - - if (dimensions.size() > 2) + const QList dimensions = m->Dimensions().values(); + if (dimensions.size() > 1) { - dimension = dimensions.at(2); - InitDimensionGradation(2, dimension, dimensionC); - } - } + MeasurementDimension_p dimension = dimensions.at(1); + InitDimensionGradation(1, dimension, dimensionB); - m_gradation->start(); + if (dimensions.size() > 2) + { + dimension = dimensions.at(2); + InitDimensionGradation(2, dimension, dimensionC); + } + } + + m_gradation->start(); + } } //--------------------------------------------------------------------------------------------------------------------- void MainWindow::DimensionBBaseChanged() { + const qreal oldValue = m_currentDimensionB; m_currentDimensionB = dimensionB->currentData().toDouble(); - const QList dimensions = m->Dimensions().values(); - - if (dimensions.size() > 2) + if (not VFuzzyComparePossibleNulls(oldValue, m_currentDimensionB)) { - MeasurementDimension_p dimension = dimensions.at(2); - InitDimensionGradation(2, dimension, dimensionC); - } + const QList dimensions = m->Dimensions().values(); - m_gradation->start(); + if (dimensions.size() > 2) + { + const MeasurementDimension_p& dimension = dimensions.at(2); + InitDimensionGradation(2, dimension, dimensionC); + } + + m_gradation->start(); + } } //--------------------------------------------------------------------------------------------------------------------- void MainWindow::DimensionCBaseChanged() { + const qreal oldValue = m_currentDimensionC; m_currentDimensionC = dimensionC->currentData().toDouble(); - m_gradation->start(); + + if (not VFuzzyComparePossibleNulls(oldValue, m_currentDimensionC)) + { + m_gradation->start(); + } } //---------------------------------------------------------------------------------------------------------------------