diff --git a/src/plugins/debugger/debuggeragents.cpp b/src/plugins/debugger/debuggeragents.cpp index c4b592856a0a5a2fea6cb276e9a6c9f5ee0abcc8..d18e72c2aa2614f724eb377ac831d2e32f33b200 100644 --- a/src/plugins/debugger/debuggeragents.cpp +++ b/src/plugins/debugger/debuggeragents.cpp @@ -33,6 +33,7 @@ #include "debuggerplugin.h" #include "debuggerstringutils.h" #include "stackframe.h" +#include "debuggerconstants.h" #include <coreplugin/coreconstants.h> #include <coreplugin/editormanager/editormanager.h> @@ -367,8 +368,8 @@ void DisassemblerViewAgent::setContents(const QString &contents) Core::Constants::K_DEFAULT_TEXT_EDITOR_ID, &titlePattern)); QTC_ASSERT(d->editor, return); - d->editor->setProperty("OpenedByDebugger", true); - d->editor->setProperty("DisassemblerView", true); + d->editor->setProperty(Debugger::Constants::OPENED_BY_DEBUGGER, true); + d->editor->setProperty(Debugger::Constants::OPENED_WITH_DISASSEMBLY, true); d->configureMimeType(); } diff --git a/src/plugins/debugger/debuggerconstants.h b/src/plugins/debugger/debuggerconstants.h index 0360144147da087358cd513e9d3960c77d04873f..a01e32759233bf7d323373b26e8e1e19c5af7b67 100644 --- a/src/plugins/debugger/debuggerconstants.h +++ b/src/plugins/debugger/debuggerconstants.h @@ -87,6 +87,9 @@ namespace Internal { } // namespace Internal +const char * const OPENED_BY_DEBUGGER = "OpenedByDebugger"; +const char * const OPENED_WITH_DISASSEMBLY = "DisassemblerView"; + } // namespace Constants diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index ea90ff9f155df533787b803373b413ad38df41b9..c178d8a2ae6f22f40e93caf6bb66c3d1ac3810ea 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -2146,9 +2146,17 @@ void DebuggerPluginPrivate::cleanupViews() if (theDebuggerBoolSetting(CloseBuffersOnExit)) { if (EditorManager *editorManager = EditorManager::instance()) { QList<IEditor *> toClose; - foreach (IEditor *editor, editorManager->openedEditors()) - if (editor->property("OpenedByDebugger").toBool()) - toClose.append(editor); + foreach (IEditor *editor, editorManager->openedEditors()) { + if (editor->property(Debugger::Constants::OPENED_BY_DEBUGGER).toBool()) { + // close disassembly views. close other opened files if they are not modified and not current editor + if (editor->property(Debugger::Constants::OPENED_WITH_DISASSEMBLY).toBool() + || (!editor->file()->isModified() && editor != editorManager->currentEditor())) { + toClose.append(editor); + } else { + editor->setProperty(Debugger::Constants::OPENED_BY_DEBUGGER, false); + } + } + } editorManager->closeEditors(toClose); } } @@ -2425,7 +2433,7 @@ void DebuggerPluginPrivate::gotoLocation(const QString &file, int line, bool set if (!editor) return; if (newEditor) - editor->setProperty("OpenedByDebugger", true); + editor->setProperty(Debugger::Constants::OPENED_BY_DEBUGGER, true); if (setMarker) m_locationMark.reset(new LocationMark(file, line)); }