From 47fedc3d8a25ce0c93cc5ee9fb96f93ad530bf09 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Thu, 12 Jan 2012 17:04:14 +0100
Subject: [PATCH] debugger: sort entries in Windows->Views the same way as in
 the dock context menus

Task-number: QTCREATORBUG-6179
Change-Id: I1bc02ebce6de7ff5c12d7baf7c585a414f3972d5
Reviewed-by: hjk <qthjk@ovi.com>
---
 src/plugins/debugger/debuggermainwindow.cpp | 19 +++++++++++++++++--
 src/plugins/debugger/debuggermainwindow.h   |  1 +
 src/plugins/debugger/debuggerplugin.cpp     |  2 ++
 3 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/src/plugins/debugger/debuggermainwindow.cpp b/src/plugins/debugger/debuggermainwindow.cpp
index f3bc617d10e..54b3afabff6 100644
--- a/src/plugins/debugger/debuggermainwindow.cpp
+++ b/src/plugins/debugger/debuggermainwindow.cpp
@@ -136,6 +136,7 @@ public:
     DebuggerLanguages m_engineDebugLanguages;
 
     ActionContainer *m_viewsMenu;
+    QList<Command *> m_menuCommandsToAdd;
 
     Project *m_previousProject;
     Target *m_previousTarget;
@@ -321,7 +322,8 @@ void DebuggerMainWindowPrivate::createViewsMenuItems()
         Core::Id("Debugger.Views.OpenMemoryEditor"),
         debugcontext);
     cmd->setAttribute(Command::CA_Hide);
-    m_viewsMenu->addAction(cmd);
+    m_viewsMenu->addAction(cmd, Core::Constants::G_DEFAULT_THREE);
+
     cmd = am->registerAction(q->menuSeparator1(),
         Core::Id("Debugger.Views.Separator1"), debugcontext);
     cmd->setAttribute(Command::CA_Hide);
@@ -429,7 +431,7 @@ QDockWidget *DebuggerMainWindow::createDockWidget(const DebuggerLanguage &langua
     Command *cmd = am->registerAction(toggleViewAction,
              Core::Id(QLatin1String("Debugger.") + widget->objectName()), globalContext);
     cmd->setAttribute(Command::CA_Hide);
-    d->m_viewsMenu->addAction(cmd);
+    d->m_menuCommandsToAdd.append(cmd);
 
     dockWidget->installEventFilter(&d->m_resizeEventFilter);
 
@@ -443,6 +445,19 @@ QDockWidget *DebuggerMainWindow::createDockWidget(const DebuggerLanguage &langua
     return dockWidget;
 }
 
+static bool sortCommands(Command *cmd1, Command *cmd2)
+{
+    return cmd1->action()->text() < cmd2->action()->text();
+}
+
+void DebuggerMainWindow::addStagedMenuEntries()
+{
+    qSort(d->m_menuCommandsToAdd.begin(), d->m_menuCommandsToAdd.end(), &sortCommands);
+    foreach (Command *cmd, d->m_menuCommandsToAdd)
+        d->m_viewsMenu->addAction(cmd);
+    d->m_menuCommandsToAdd.clear();
+}
+
 QWidget *DebuggerMainWindow::createContents(IMode *mode)
 {
     ICore *core = ICore::instance();
diff --git a/src/plugins/debugger/debuggermainwindow.h b/src/plugins/debugger/debuggermainwindow.h
index ac5f8ee8f2a..bca47b16454 100644
--- a/src/plugins/debugger/debuggermainwindow.h
+++ b/src/plugins/debugger/debuggermainwindow.h
@@ -73,6 +73,7 @@ public:
 
     // Dockwidgets are registered to the main window.
     QDockWidget *createDockWidget(const DebuggerLanguage &language, QWidget *widget);
+    void addStagedMenuEntries();
 
     QWidget *createContents(Core::IMode *mode);
     QMenu *createPopupMenu();
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 51b2ee42d5f..974ed60d0aa 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -3025,6 +3025,8 @@ void DebuggerPluginPrivate::extensionsInitialized()
     dock = m_mainWindow->createDockWidget(CppLanguage, localsAndWatchers);
     dock->setProperty(DOCKWIDGET_DEFAULT_AREA, Qt::RightDockWidgetArea);
 
+    m_mainWindow->addStagedMenuEntries();
+
     // Do not fail to load the whole plugin if something goes wrong here.
     QString errorMessage;
     if (!parseArguments(m_arguments, &m_cmdLineEnabledEngines, &errorMessage)) {
-- 
GitLab