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:
xavierqet
2007-10-04 12:19:01 +00:00
parent 7158935743
commit 8138b5b86c
2 changed files with 47 additions and 5 deletions

View File

@@ -34,7 +34,7 @@ QETApp::QETApp(int &argc, char **argv) : QApplication(argc, argv) {
reduce_appli -> setToolTip(tr("R\351duire QElectroTech dans le systray")); reduce_appli -> setToolTip(tr("R\351duire QElectroTech dans le systray"));
restore_appli -> setToolTip(tr("Restaurer QElectroTech")); 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(reduce_appli, SIGNAL(triggered()), this, SLOT(reduceEveryEditor()));
connect(restore_appli, SIGNAL(triggered()), this, SLOT(restoreEveryEditor())); connect(restore_appli, SIGNAL(triggered()), this, SLOT(restoreEveryEditor()));
connect(reduce_diagrams, SIGNAL(triggered()), this, SLOT(reduceDiagramEditors())); 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))); connect(qsti, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(systray(QSystemTrayIcon::ActivationReason)));
qsti -> setContextMenu(menu_systray); qsti -> setContextMenu(menu_systray);
qsti -> show(); qsti -> show();
setQuitOnLastWindowClosed(false);
connect(this, SIGNAL(lastWindowClosed()), this, SLOT(checkRemainingWindows()));
} }
// Creation et affichage d'un editeur de schema // Creation et affichage d'un editeur de schema
@@ -238,12 +241,19 @@ QString QETApp::languagesPath() {
/** /**
Ferme tous les editeurs 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 // s'assure que toutes les fenetres soient visibles avant de quitter
restoreEveryEditor(); restoreEveryEditor();
foreach(QETDiagramEditor *e, diagramEditors()) e -> close(); bool every_window_closed = true;
foreach(QETElementEditor *e, elementEditors()) e -> close(); 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()); 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 @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 @return les barres d'outils et dock flottants de la fenetre

View File

@@ -64,9 +64,11 @@ class QETApp : public QApplication {
void restoreElementEditors(); void restoreElementEditors();
void newDiagramEditor(); void newDiagramEditor();
void newElementEditor(); void newElementEditor();
void closeEveryEditor(); bool closeEveryEditor();
void setMainWindowVisible(QMainWindow *, bool); void setMainWindowVisible(QMainWindow *, bool);
void invertMainWindowVisibility(QWidget *); void invertMainWindowVisibility(QWidget *);
void quitQET();
void checkRemainingWindows();
// methodes privees // methodes privees
private slots: private slots: