mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-01-03 11:00:53 +01:00
L'application verifie desormais les fenetres cachees avant de quitter lors de la fermeture de la derniere fenetre visible
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@155 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
48
qetapp.cpp
48
qetapp.cpp
@@ -34,7 +34,7 @@ QETApp::QETApp(int &argc, char **argv) : QApplication(argc, argv) {
|
||||
reduce_appli -> setToolTip(tr("R\351duire QElectroTech dans le systray"));
|
||||
restore_appli -> setToolTip(tr("Restaurer QElectroTech"));
|
||||
|
||||
connect(quitter_qet, SIGNAL(triggered()), this, SLOT(closeEveryEditor()));
|
||||
connect(quitter_qet, SIGNAL(triggered()), this, SLOT(quitQET()));
|
||||
connect(reduce_appli, SIGNAL(triggered()), this, SLOT(reduceEveryEditor()));
|
||||
connect(restore_appli, SIGNAL(triggered()), this, SLOT(restoreEveryEditor()));
|
||||
connect(reduce_diagrams, SIGNAL(triggered()), this, SLOT(reduceDiagramEditors()));
|
||||
@@ -53,6 +53,9 @@ QETApp::QETApp(int &argc, char **argv) : QApplication(argc, argv) {
|
||||
connect(qsti, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(systray(QSystemTrayIcon::ActivationReason)));
|
||||
qsti -> setContextMenu(menu_systray);
|
||||
qsti -> show();
|
||||
|
||||
setQuitOnLastWindowClosed(false);
|
||||
connect(this, SIGNAL(lastWindowClosed()), this, SLOT(checkRemainingWindows()));
|
||||
}
|
||||
|
||||
// Creation et affichage d'un editeur de schema
|
||||
@@ -238,12 +241,19 @@ QString QETApp::languagesPath() {
|
||||
|
||||
/**
|
||||
Ferme tous les editeurs
|
||||
@return true si l'utilisateur a accepte toutes les fermetures, false sinon
|
||||
*/
|
||||
void QETApp::closeEveryEditor() {
|
||||
bool QETApp::closeEveryEditor() {
|
||||
// s'assure que toutes les fenetres soient visibles avant de quitter
|
||||
restoreEveryEditor();
|
||||
foreach(QETDiagramEditor *e, diagramEditors()) e -> close();
|
||||
foreach(QETElementEditor *e, elementEditors()) e -> close();
|
||||
bool every_window_closed = true;
|
||||
foreach(QETDiagramEditor *e, diagramEditors()) {
|
||||
every_window_closed = every_window_closed && e -> close();
|
||||
}
|
||||
foreach(QETElementEditor *e, elementEditors()) {
|
||||
every_window_closed = every_window_closed && e -> close();
|
||||
}
|
||||
return(every_window_closed);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -310,6 +320,36 @@ void QETApp::invertMainWindowVisibility(QWidget *window) {
|
||||
if (QMainWindow *w = qobject_cast<QMainWindow *>(window)) setMainWindowVisible(w, !w -> isVisible());
|
||||
}
|
||||
|
||||
/**
|
||||
Demande la fermeture de toutes les fenetres ; si l'utilisateur les accepte,
|
||||
l'application quitte
|
||||
*/
|
||||
void QETApp::quitQET() {
|
||||
if (closeEveryEditor()) {
|
||||
quit();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Verifie s'il reste des fenetres (cachees ou non) et quitte s'il n'en reste
|
||||
plus.
|
||||
*/
|
||||
void QETApp::checkRemainingWindows() {
|
||||
/* petite bidouille : le slot se rappelle apres 500 ms d'attente
|
||||
afin de compenser le fait que certaines fenetres peuvent encore
|
||||
paraitre vivantes alors qu'elles viennent d'etre fermees
|
||||
*/
|
||||
static bool sleep = true;
|
||||
if (sleep) {
|
||||
QTimer::singleShot(500, this, SLOT(checkRemainingWindows()));
|
||||
} else {
|
||||
if (!diagramEditors().count() && !elementEditors().count()) {
|
||||
quit();
|
||||
}
|
||||
}
|
||||
sleep = !sleep;
|
||||
}
|
||||
|
||||
/**
|
||||
@param window fenetre dont il faut trouver les barres d'outils et dock flottants
|
||||
@return les barres d'outils et dock flottants de la fenetre
|
||||
|
||||
Reference in New Issue
Block a user