mirror of
https://github.com/parchlinux/calamares.git
synced 2025-02-24 10:55:46 -05:00
[calamares] Allow WM close button
- remove hide-close-button hack - refactor code in viewmanager for confirming quit - hook up confirm-and-quit to WM close button - also works for alt-F4 and other quit methods - while here, update copyright year FIXES #870
This commit is contained in:
parent
5593be125f
commit
41e6f0e06c
4 changed files with 58 additions and 35 deletions
|
@ -1,7 +1,7 @@
|
|||
/* === This file is part of Calamares - <http://github.com/calamares> ===
|
||||
*
|
||||
* Copyright 2014-2015, Teo Mrnjavac <teo@kde.org>
|
||||
* Copyright 2017, Adriaan de Groot <groot@kde.org>
|
||||
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
|
||||
*
|
||||
* 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 <QApplication>
|
||||
#include <QBoxLayout>
|
||||
#include <QCloseEvent>
|
||||
#include <QDesktopWidget>
|
||||
#include <QLabel>
|
||||
#include <QTreeView>
|
||||
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* === This file is part of Calamares - <http://github.com/calamares> ===
|
||||
*
|
||||
* Copyright 2014-2015, Teo Mrnjavac <teo@kde.org>
|
||||
* Copyright 2017, Adriaan de Groot <groot@kde.org>
|
||||
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
|
||||
*
|
||||
* 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
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* === This file is part of Calamares - <http://github.com/calamares> ===
|
||||
*
|
||||
* Copyright 2014-2015, Teo Mrnjavac <teo@kde.org>
|
||||
* Copyright 2017, Adriaan de Groot <groot@kde.org>
|
||||
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
|
||||
*
|
||||
* 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
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* === This file is part of Calamares - <http://github.com/calamares> ===
|
||||
*
|
||||
* Copyright 2014-2015, Teo Mrnjavac <teo@kde.org>
|
||||
* Copyright 2017, Adriaan de Groot <groot@kde.org>
|
||||
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
|
||||
*
|
||||
* 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:
|
||||
/**
|
||||
|
|
Loading…
Add table
Reference in a new issue