diff --git a/CHANGES b/CHANGES index 2ac33261c..e396247d0 100644 --- a/CHANGES +++ b/CHANGES @@ -22,7 +22,9 @@ This release contains contributions from (alphabetically by first name): * Under-the-hood code cleanups in lots of parts of the core. Calamares now builds without warnings when Clang 8 is used. - + * A new *disable-cancel-during-exec* setting provides more fine-grained + control than *disable-cancel* (which hides the button entirely). + ## Modules ## * All of the Python-based modules now have translations enabled. diff --git a/settings.conf b/settings.conf index bd0d307bd..938817ef1 100644 --- a/settings.conf +++ b/settings.conf @@ -154,7 +154,9 @@ dont-chroot: false # Calamares will complain if this is not explicitly set. # oem-setup: true -# If this is set to true, the "Cancel" button will be disabled. +# If this is set to true, the "Cancel" button will be disabled entirely. +# The button is also hidden from view. +# # This can be useful if when e.g. Calamares is used as a post-install # configuration tool and you require the user to go through all the # configuration steps. @@ -167,4 +169,8 @@ disable-cancel: false # If this is set to true, the "Cancel" button will be disabled once # you start the 'Installation', meaning there won't be a way to cancel # the Installation until it has finished or installation has failed. -dont-cancel: false +# +# Default is false, but Calamares will complain if this is not explicitly set. +# +# YAML: boolean. +disable-cancel-during-exec: false diff --git a/src/libcalamares/Settings.cpp b/src/libcalamares/Settings.cpp index 4b33fa2e7..74b99c417 100644 --- a/src/libcalamares/Settings.cpp +++ b/src/libcalamares/Settings.cpp @@ -207,7 +207,7 @@ Settings::Settings( const QString& settingsFilePath, m_doChroot = !requireBool( config, "dont-chroot", false ); m_isSetupMode = requireBool( config, "oem-setup", !m_doChroot ); m_disableCancel = requireBool( config, "disable-cancel", false ); - m_dontCancel = requireBool( config, "dont-cancel", false ); + m_dontCancel = requireBool( config, "disable-cancel-during-exec", false ); } catch ( YAML::Exception& e ) { diff --git a/src/libcalamares/Settings.h b/src/libcalamares/Settings.h index 75c7886c9..da3f46921 100644 --- a/src/libcalamares/Settings.h +++ b/src/libcalamares/Settings.h @@ -69,8 +69,9 @@ public: */ bool isSetupMode() const { return m_isSetupMode; } + /** @brief Global setting of disable-cancel: can't cancel ever. */ bool disableCancel() const; - + /** @brief Temporary setting of disable-cancel: can't cancel during exec. */ bool dontCancel() const; private: diff --git a/src/libcalamaresui/ViewManager.cpp b/src/libcalamaresui/ViewManager.cpp index 655e581ea..b8116746d 100644 --- a/src/libcalamaresui/ViewManager.cpp +++ b/src/libcalamaresui/ViewManager.cpp @@ -103,7 +103,6 @@ ViewManager::ViewManager( QObject* parent ) if (Calamares::Settings::instance()->disableCancel()) m_quit->setVisible( false ); - } @@ -241,22 +240,24 @@ ViewManager::next() bool executing = false; if ( step->isAtEnd() ) { + const auto const* settings = Calamares::Settings::instance(); + // Special case when the user clicks next on the very last page in a view phase // and right before switching to an execution phase. // Depending on Calamares::Settings, we show an "are you sure" prompt or not. - if ( Calamares::Settings::instance()->showPromptBeforeExecution() && stepNextWillExecute( m_steps, m_currentStep ) ) + if ( settings->showPromptBeforeExecution() && stepNextWillExecute( m_steps, m_currentStep ) ) { - QString title = Calamares::Settings::instance()->isSetupMode() + QString title = settings->isSetupMode() ? tr( "Continue with setup?" ) : tr( "Continue with installation?" ); - QString question = Calamares::Settings::instance()->isSetupMode() + QString question = settings->isSetupMode() ? tr( "The %1 setup program is about to make changes to your " "disk in order to set up %2.
You will not be able " "to undo these changes." ) : tr( "The %1 installer is about to make changes to your " "disk in order to install %2.
You will not be able " "to undo these changes." ); - QString confirm = Calamares::Settings::instance()->isSetupMode() + QString confirm = settings->isSetupMode() ? tr( "&Set up now" ) : tr( "&Install now" ); @@ -283,9 +284,12 @@ ViewManager::next() { m_back->setEnabled( false ); m_next->setEnabled( false ); - if (Calamares::Settings::instance()->dontCancel()) - m_quit->setEnabled( false ); + // Enabled if there's nothing blocking it during exec + m_quit->setEnabled( !( settings->dontCancel() || settings->disableCancel() ) ); } + else + // Enabled unless it's also hidden + m_quit->setEnabled( !settings->disableCancel() ); } else step->next(); @@ -318,13 +322,16 @@ ViewManager::updateButtonLabels() { m_quit->setText( tr( "&Done" ) ); m_quit->setToolTip( complete ); - if (Calamares::Settings::instance()->disableCancel()) - m_quit->setVisible( true ); + m_quit->setVisible( true ); // At end, always visible and enabled. + m_quit->setEnabled( true ); } else { - if (Calamares::Settings::instance()->disableCancel()) + if ( Calamares::Settings::instance()->disableCancel() ) + { m_quit->setVisible( false ); + m_quit->setEnabled( false ); // Can't be triggered through DBUS + } m_quit->setText( tr( "&Cancel" ) ); m_quit->setToolTip( quit ); }