diff --git a/apps/opencs/view/doc/viewmanager.cpp b/apps/opencs/view/doc/viewmanager.cpp index 03d7a2638..a058ea7a2 100644 --- a/apps/opencs/view/doc/viewmanager.cpp +++ b/apps/opencs/view/doc/viewmanager.cpp @@ -364,17 +364,17 @@ void CSVDoc::ViewManager::onExitWarningHandler (int state, CSMDoc::Document *doc } } -void CSVDoc::ViewManager::exitApplication (CSVDoc::View *view) +bool CSVDoc::ViewManager::removeDocument (CSVDoc::View *view) { - // close the current document first if(!notifySaveOnClose(view)) - return; + return false; else { // don't bother closing views or updating indicies, but remove from mViews CSMDoc::Document * document = view->getDocument(); std::vector remainingViews; - for (std::vector::const_iterator iter (mViews.begin()); iter!=mViews.end(); ++iter) + std::vector::const_iterator iter = mViews.begin(); + for (; iter!=mViews.end(); ++iter) { if(document == (*iter)->getDocument()) (*iter)->setVisible(false); @@ -383,30 +383,21 @@ void CSVDoc::ViewManager::exitApplication (CSVDoc::View *view) } mDocumentManager.removeDocument(document); mViews = remainingViews; + } + return true; +} - // attempt to close all other documents - while(!mViews.empty()) - { - // raise the window to alert the user - mViews.back()->activateWindow(); - mViews.back()->raise(); - if (!notifySaveOnClose(mViews.back())) - return; - else - { - document = mViews.back()->getDocument(); - remainingViews.clear(); - for (std::vector::const_iterator iter (mViews.begin()); iter!=mViews.end(); ++iter) - { - if(document == (*iter)->getDocument()) - (*iter)->setVisible(false); - else - remainingViews.push_back(*iter); - } - mDocumentManager.removeDocument(document); - mViews = remainingViews; - } - } +void CSVDoc::ViewManager::exitApplication (CSVDoc::View *view) +{ + if(!removeDocument(view)) // close the current document first + return; + + while(!mViews.empty()) // attempt to close all other documents + { + mViews.back()->activateWindow(); + mViews.back()->raise(); // raise the window to alert the user + if(!removeDocument(mViews.back())) + return; } // Editor exits (via a signal) when the last document is deleted } diff --git a/apps/opencs/view/doc/viewmanager.hpp b/apps/opencs/view/doc/viewmanager.hpp index e0121a7fb..753d7f0cb 100644 --- a/apps/opencs/view/doc/viewmanager.hpp +++ b/apps/opencs/view/doc/viewmanager.hpp @@ -41,6 +41,7 @@ namespace CSVDoc bool notifySaveOnClose (View *view = 0); bool showModifiedDocumentMessageBox (View *view); bool showSaveInProgressMessageBox (View *view); + bool removeDocument(View *view); public: