[finished] Add a restart-anyway API to Config

It's possible to ignore the "user setting" for restart-now
and call doRestart(true) directly. This is intended for
use with specific UIs that make that choice clear for the user.

Hook up both [finished] and [finishedq] to the "traditional"
restart-if-the-box-is-ticked logic although the example
QML doesn't expose that box.
This commit is contained in:
Adriaan de Groot 2021-03-06 13:51:45 +01:00
parent aa004503c5
commit bd775a16e2
5 changed files with 14 additions and 12 deletions

View File

@ -109,12 +109,13 @@ Config::onInstallationFailed( const QString& message, const QString& details )
void
Config::doRestart()
Config::doRestart( bool restartAnyway )
{
cDebug() << "Restart requested, mode=" << restartModes().find( restartNowMode() ) << " want?" << restartNowWanted();
if ( restartNowWanted() )
cDebug() << "mode=" << restartModes().find( restartNowMode() ) << " user?" << restartNowWanted() << "arg?"
<< restartAnyway;
if ( restartNowMode() != RestartMode::Never && restartAnyway )
{
cDebug() << "Running restart command" << m_restartNowCommand;
cDebug() << Logger::SubEntry << "Running restart command" << m_restartNowCommand;
QProcess::execute( "/bin/sh", { "-c", m_restartNowCommand } );
}
}

View File

@ -73,8 +73,13 @@ public Q_SLOTS:
* The "if desired" part is: only if the restart mode allows it,
* **and** the user has checked the box (or done whatever to
* turn on restartNowWanted()).
*
* - The one-argument form ignores what the user wants and restarts
* if @p restartAnyway is @c true **unless** the mode is Never
* - The no-argument form uses the user setting
*/
void doRestart();
void doRestart( bool restartAnyway );
void doRestart() { doRestart( restartNowWanted() ); }
/** @brief Send DBus notification
*

View File

@ -86,7 +86,7 @@ void
FinishedViewStep::onActivate()
{
m_config->doNotify();
connect( qApp, &QApplication::aboutToQuit, m_config, &Config::doRestart );
connect( qApp, &QApplication::aboutToQuit, m_config, qOverload<>( &Config::doRestart ) );
}

View File

@ -67,6 +67,7 @@ void
FinishedQmlViewStep::onActivate()
{
m_config->doNotify();
connect( qApp, &QApplication::aboutToQuit, m_config, qOverload<>( &Config::doRestart ) );
QmlViewStep::onActivate();
}

View File

@ -70,7 +70,7 @@ Page {
Button {
text: qsTr("Restart System")
icon.name: "system-reboot"
onClicked: { config.doRestart(); }
onClicked: { config.doRestart(true); }
}
}
@ -93,11 +93,6 @@ Page {
function onActivate()
{
// This QML page has a **button** for restarting,
// so just pretend the setting is clicked; this is a
// poor solution, recommended is to set restartNowMode to Always
// in the config.
config.setRestartNowWanted(true);
}
function onLeave()