void FileManager::closeDocument(Document* document) { emit aboutToCloseDocument(document); m_documentMap.remove(document->documentInfo()->absoluteFilePath()); m_documents.removeAll(document); // m_documents.removeOne(document); if(m_activeDocument == document) { m_activeDocument = 0; emit activeDocumentChanged(m_activeDocument); } Q_ASSERT(!m_documents.contains(document)); delete document; }
bool pTabbedWorkspace::eventFilter( QObject* o, QEvent* e ) { // get event type QEvent::Type t = e->type(); // get document QWidget* td = qobject_cast<QWidget*>( o ); // child modified state if ( t == QEvent::ModifiedChange ) mTabBar->setTabText( indexOf( td ), td->windowTitle().append( td->isWindowModified() ? QString( "*" ) : QString::null ) ); // if mode is toplevel and event is activate, activate correct window if needed else if ( mTabMode == tmTopLevel && t == QEvent::WindowActivate ) { if ( td && td != currentDocument() ) setCurrentDocument( td ); } // remove document from workspace else if ( t == QEvent::Close && td ) { // get closeevent QCloseEvent* ce = static_cast<QCloseEvent*>( e ); // emit that document will be close, giving event so user can cancel it emit aboutToCloseTab( indexOf( td ), ce ); emit aboutToCloseDocument( td, ce ); // close document if accepted if ( !ce->isAccepted() && td->property( "ForceClose" ).toBool() && !td->testAttribute( Qt::WA_DeleteOnClose ) ) td->deleteLater(); else if ( ce->isAccepted() && !td->testAttribute( Qt::WA_DeleteOnClose ) ) removeDocument( td ); else return true; } // return default event filter return QWidget::eventFilter( o, e ); }