void MainBook::OnPageClosed(NotebookEvent &e) { SelectPage(m_book->GetCurrentPage()); m_quickFindBar->SetEditor(GetActiveEditor()); // any editors left open? LEditor *editor = NULL; for (size_t i = 0; i < m_book->GetPageCount() && editor == NULL; i++) { editor = dynamic_cast<LEditor*>(m_book->GetPage(i)); } if (m_book->GetPageCount() == 0) { SendCmdEvent(wxEVT_ALL_EDITORS_CLOSED); ShowQuickBar(false); } }
bool MainBook::CloseAll(bool cancellable) { LEditor::Vec_t editors; GetAllEditors(editors, kGetAll_IncludeDetached); // filter list of editors for any that need to be saved std::vector<std::pair<wxFileName, bool> > files; size_t n = 0; for(size_t i = 0; i < editors.size(); i++) { if(editors[i]->GetModify()) { files.push_back(std::make_pair(editors[i]->GetFileName(), true)); editors[n++] = editors[i]; } } editors.resize(n); if(!UserSelectFiles(files, _("Save Modified Files"), _("Some files are modified.\nChoose the files you would like to save."), cancellable)) return false; for(size_t i = 0; i < files.size(); i++) { if(files[i].second) { editors[i]->SaveFile(); } else { editors[i]->SetSavePoint(); } } // Delete the files without notifications (it will be faster) clWindowUpdateLocker locker(this); #if HAS_LIBCLANG ClangCodeCompletion::Instance()->CancelCodeComplete(); #endif SendCmdEvent(wxEVT_ALL_EDITORS_CLOSING); m_reloadingDoRaise = false; m_book->DeleteAllPages(); m_reloadingDoRaise = true; // Delete all detached editors EditorFrame::List_t::iterator iter = m_detachedEditors.begin(); for(; iter != m_detachedEditors.end(); ++iter) { (*iter)->Destroy(); // Destroying the frame will release the editor } // Since we got no more editors opened, // send a wxEVT_ALL_EDITORS_CLOSED event SendCmdEvent(wxEVT_ALL_EDITORS_CLOSED); // Update the quick-find-bar m_quickFindBar->SetEditor(NULL); ShowQuickBar(false); // Clear the Navigation Bar if it is not empty TagEntryPtr tag = NULL; m_navBar->UpdateScope(tag); // Update the frame's title clMainFrame::Get()->SetFrameTitle(NULL); DoHandleFrameMenu(NULL); // OutputTabWindow::OnEditUI will crash on >=wxGTK-2.9.3 if we don't set the focus somewhere that still exists // This workaround doesn't seem to work if applied earlier in the function :/ m_book->SetFocus(); return true; }