OSDN Git Service

Don't close modified files or the current file at end of debug session
authorcon <qtc-committer@nokia.com>
Mon, 25 Oct 2010 11:37:46 +0000 (13:37 +0200)
committercon <qtc-committer@nokia.com>
Mon, 25 Oct 2010 15:21:28 +0000 (17:21 +0200)
Acked-by: hjk
src/plugins/debugger/debuggeragents.cpp
src/plugins/debugger/debuggerconstants.h
src/plugins/debugger/debuggerplugin.cpp

index c4b5928..d18e72c 100644 (file)
@@ -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();
     }
 
index 0360144..a01e327 100644 (file)
@@ -87,6 +87,9 @@ namespace Internal {
 
 } // namespace Internal
 
+const char * const OPENED_BY_DEBUGGER         = "OpenedByDebugger";
+const char * const OPENED_WITH_DISASSEMBLY    = "DisassemblerView";
+
 } // namespace Constants
 
 
index ea90ff9..c178d8a 100644 (file)
@@ -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));
 }