diff --git a/src/calamares/CalamaresApplication.cpp b/src/calamares/CalamaresApplication.cpp index 4d2e54aca..40d4abf24 100644 --- a/src/calamares/CalamaresApplication.cpp +++ b/src/calamares/CalamaresApplication.cpp @@ -55,14 +55,7 @@ CalamaresApplication::CalamaresApplication( int& argc, char* argv[] ) QFont f = font(); - cDebug() << "Default font =====" - << "\nPixel size: " << f.pixelSize() - << "\nPoint size: " << f.pointSize() - << "\nPoint sizeF: " << f.pointSizeF() - << "\nFont family: " << f.family() - << "\nMetric height:" << QFontMetrics( f ).height(); - // The following line blocks for 15s on Qt 5.1.0 - cDebug() << "Font height:" << QFontMetrics( f ).height(); + cDebug() << "Default font size" << f.pointSize() << ';' << f.pixelSize() << "px"; CalamaresUtils::setDefaultFontSize( f.pointSize() ); cDebug() << "Available languages:" << QString( CALAMARES_TRANSLATION_LANGUAGES ).split( ';' ); diff --git a/src/calamares/CalamaresWindow.cpp b/src/calamares/CalamaresWindow.cpp index 37b288948..9f2ab6472 100644 --- a/src/calamares/CalamaresWindow.cpp +++ b/src/calamares/CalamaresWindow.cpp @@ -1,7 +1,7 @@ /* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * Copyright 2017-2018, Adriaan de Groot * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,6 +30,7 @@ #include #include +#include #include #include #include @@ -37,10 +38,8 @@ CalamaresWindow::CalamaresWindow( QWidget* parent ) : QWidget( parent ) , m_debugWindow( nullptr ) + , m_viewManager( nullptr ) { - // Hide close button - setWindowFlags( Qt::Window | Qt::WindowTitleHint | Qt::CustomizeWindowHint ); - CALAMARES_RETRANSLATE( setWindowTitle( tr( "%1 Installer" ) .arg( *Calamares::Branding::ProductName ) ); @@ -139,10 +138,10 @@ CalamaresWindow::CalamaresWindow( QWidget* parent ) CalamaresUtils::unmarginLayout( sideLayout ); CalamaresUtils::unmarginLayout( mainLayout ); - Calamares::ViewManager* vm = Calamares::ViewManager::instance( this ); - connect( vm, &Calamares::ViewManager::enlarge, this, &CalamaresWindow::enlarge ); + m_viewManager = Calamares::ViewManager::instance( this ); + connect( m_viewManager, &Calamares::ViewManager::enlarge, this, &CalamaresWindow::enlarge ); - mainLayout->addWidget( vm->centralWidget() ); + mainLayout->addWidget( m_viewManager->centralWidget() ); } void @@ -156,3 +155,15 @@ CalamaresWindow::enlarge( QSize enlarge ) resize( w, h ); } + +void +CalamaresWindow::closeEvent( QCloseEvent* event ) +{ + if ( ( !m_viewManager ) || m_viewManager->confirmCancelInstallation() ) + { + event->accept(); + qApp->quit(); + } + else + event->ignore(); +} diff --git a/src/calamares/CalamaresWindow.h b/src/calamares/CalamaresWindow.h index 23f40d3c9..19aeaa59e 100644 --- a/src/calamares/CalamaresWindow.h +++ b/src/calamares/CalamaresWindow.h @@ -1,7 +1,7 @@ /* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * Copyright 2017-2018, Adriaan de Groot * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,6 +26,7 @@ namespace Calamares { class DebugWindow; +class ViewManager; } /** @@ -46,8 +47,12 @@ public slots: */ void enlarge( QSize enlarge ); +protected: + virtual void closeEvent( QCloseEvent* e ) override; + private: - QPointer< Calamares::DebugWindow > m_debugWindow; + QPointer< Calamares::DebugWindow > m_debugWindow; // Managed by self + Calamares::ViewManager* m_viewManager; }; #endif //CALAMARESWINDOW_H diff --git a/src/libcalamaresui/ViewManager.cpp b/src/libcalamaresui/ViewManager.cpp index 9083794d7..2807cf9f4 100644 --- a/src/libcalamaresui/ViewManager.cpp +++ b/src/libcalamaresui/ViewManager.cpp @@ -1,7 +1,7 @@ /* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * Copyright 2017-2018, Adriaan de Groot * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -88,30 +88,8 @@ ViewManager::ViewManager( QObject* parent ) connect( m_back, &QPushButton::clicked, this, &ViewManager::back ); m_back->setEnabled( false ); - connect( m_quit, &QPushButton::clicked, - this, [this]() - { - // If it's NOT the last page of the last step, we ask for confirmation - if ( !( m_currentStep == m_steps.count() -1 && - m_steps.last()->isAtEnd() ) ) - { - QMessageBox mb( QMessageBox::Question, - tr( "Cancel installation?" ), - tr( "Do you really want to cancel the current install process?\n" - "The installer will quit and all changes will be lost." ), - QMessageBox::Yes | QMessageBox::No, - m_widget ); - mb.setDefaultButton( QMessageBox::No ); - mb.button( QMessageBox::Yes )->setText( tr( "&Yes" ) ); - mb.button( QMessageBox::No )->setText( tr( "&No" ) ); - int response = mb.exec(); - if ( response == QMessageBox::Yes ) - qApp->quit(); - } - else // Means we're at the end, no need to confirm. - qApp->quit(); - } ); - + connect( m_quit, &QPushButton::clicked, this, + [this]() { if ( this->confirmCancelInstallation() ) qApp->quit(); } ); connect( JobQueue::instance(), &JobQueue::failed, this, &ViewManager::onInstallationFailed ); connect( JobQueue::instance(), &JobQueue::finished, @@ -302,4 +280,26 @@ ViewManager::back() } } +bool ViewManager::confirmCancelInstallation() +{ + // If it's NOT the last page of the last step, we ask for confirmation + if ( !( m_currentStep == m_steps.count() -1 && + m_steps.last()->isAtEnd() ) ) + { + QMessageBox mb( QMessageBox::Question, + tr( "Cancel installation?" ), + tr( "Do you really want to cancel the current install process?\n" + "The installer will quit and all changes will be lost." ), + QMessageBox::Yes | QMessageBox::No, + m_widget ); + mb.setDefaultButton( QMessageBox::No ); + mb.button( QMessageBox::Yes )->setText( tr( "&Yes" ) ); + mb.button( QMessageBox::No )->setText( tr( "&No" ) ); + int response = mb.exec(); + return response == QMessageBox::Yes; + } + else // Means we're at the end, no need to confirm. + return true; } + +} // namespace diff --git a/src/libcalamaresui/ViewManager.h b/src/libcalamaresui/ViewManager.h index 80804141d..fa80698ce 100644 --- a/src/libcalamaresui/ViewManager.h +++ b/src/libcalamaresui/ViewManager.h @@ -1,7 +1,7 @@ /* === This file is part of Calamares - === * * Copyright 2014-2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * Copyright 2017-2018, Adriaan de Groot * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -86,6 +86,13 @@ public: */ int currentStepIndex() const; + /** + * @ brief Called when "Cancel" is clicked; asks for confirmation. + * Other means of closing Calamares also call this method, e.g. alt-F4. + * At the end of installation, no confirmation is asked. Returns true + * if the user confirms closing the window. + */ + bool confirmCancelInstallation(); public slots: /**