mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-04-14 20:29:59 +02: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"));
|
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
|
||||||
|
|||||||
4
qetapp.h
4
qetapp.h
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user