diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index a3bce5276fee7f00a8c0461d91310c83187fbfe7..de7ada34f0d2c6a1468f71de6c0d250e24541ac0 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -768,7 +768,7 @@ bool EditorManager::closeEditors(const QList<IEditor*> &editorsToClose, bool ask foreach (ICoreListener *listener, listeners) { if (!listener->editorAboutToClose(editor)) { editorAccepted = false; - closingFailed = false; + closingFailed = true; break; } } @@ -802,7 +802,8 @@ bool EditorManager::closeEditors(const QList<IEditor*> &editorsToClose, bool ask // remove the editors foreach (IEditor *editor, acceptedEditors) { emit editorAboutToClose(editor); - if (!editor->file()->fileName().isEmpty()) { + if (!editor->file()->fileName().isEmpty() + && !editor->isTemporary()) { QByteArray state = editor->saveState(); if (!state.isEmpty()) m_d->m_editorStates.insert(editor->file()->fileName(), QVariant(state)); diff --git a/src/plugins/coreplugin/editormanager/editorview.cpp b/src/plugins/coreplugin/editormanager/editorview.cpp index ea165c02a833c4cf8102213448dfa5c037fb700a..75db54bcdef217cd6affcfc35bbaeb9370073ec7 100644 --- a/src/plugins/coreplugin/editormanager/editorview.cpp +++ b/src/plugins/coreplugin/editormanager/editorview.cpp @@ -803,14 +803,26 @@ QByteArray SplitterOrView::saveState() const IEditor* e = editor(); EditorManager *em = CoreImpl::instance()->editorManager(); - if (e && e == em->currentEditor()) { + // don't save state of temporary or ad-hoc editors + if (e && (e->isTemporary() || e->file()->fileName().isEmpty())) { + // look for another editor that is more suited + e = 0; + foreach (IEditor *otherEditor, editors()) { + if (!otherEditor->isTemporary() && !otherEditor->file()->fileName().isEmpty()) { + e = otherEditor; + break; + } + } + } + + if (!e) { + stream << QByteArray("empty"); + } else if (e == em->currentEditor()) { stream << QByteArray("currenteditor") << e->file()->fileName() << e->id() << e->saveState(); - } else if (e) { + } else { stream << QByteArray("editor") << e->file()->fileName() << e->id() << e->saveState(); - } else { - stream << QByteArray("empty"); } } return bytes;