From dba352fd6f056ee85307efa3ce112d6f0c656336 Mon Sep 17 00:00:00 2001 From: cc9cii Date: Sun, 7 Sep 2014 18:35:50 +1000 Subject: [PATCH] Check all views before exiting. --- apps/opencs/view/doc/viewmanager.cpp | 41 ++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/apps/opencs/view/doc/viewmanager.cpp b/apps/opencs/view/doc/viewmanager.cpp index 6f4217aa8..e7d948ee7 100644 --- a/apps/opencs/view/doc/viewmanager.cpp +++ b/apps/opencs/view/doc/viewmanager.cpp @@ -174,15 +174,15 @@ bool CSVDoc::ViewManager::closeRequest (View *view) bool continueWithClose = true; - if (iter!=mViews.end()) + if (iter!=mViews.end()) // found view in mViews { bool last = countViews (view->getDocument())<=1; - if (last) + if (last) // only this view for the document continueWithClose = notifySaveOnClose (view); else { - (*iter)->deleteLater(); + (*iter)->deleteLater(); // there are other views, delete this one mViews.erase (iter); updateIndices(); @@ -343,6 +343,37 @@ void CSVDoc::ViewManager::onExitWarningHandler (int state, CSMDoc::Document *doc void CSVDoc::ViewManager::exitApplication (CSVDoc::View *view) { - if (notifySaveOnClose (view)) - QApplication::instance()->exit(); + // close the current view first + if(!closeRequest(view)) + return; // don't exit the application + else + { + view->deleteLater(); // ok to close the current view + view->setVisible(false); + std::vector::iterator iter = std::find (mViews.begin(), mViews.end(), view); + if (iter!=mViews.end()) + { + mViews.erase (iter); + updateIndices(); + } + + // attempt to close all other views + while(!mViews.empty()) + { + // raise the window + mViews.back()->activateWindow(); + mViews.back()->raise(); + // attempt to close it + if (!closeRequest(mViews.back())) + return; + else + { + mViews.back()->deleteLater(); + mViews.back()->setVisible(false); + mViews.pop_back(); + updateIndices(); + } + } + } + QApplication::instance()->exit(); }