From 5c8f46d25d60dfaf37a32ec5091385a25ab80b5e Mon Sep 17 00:00:00 2001
From: Eike Ziller <eike.ziller@digia.com>
Date: Tue, 7 May 2013 11:39:45 +0200
Subject: [PATCH] Make a few more shortcuts/actions raise the main window.

Also make registerShortcut set an application shortcut.
That is necessary when the user opened a separate editor window.

Change-Id: I366044b7acba51daca46a15a302a24b5b8e99cc1
Reviewed-by: David Schulz <david.schulz@digia.com>
---
 .../coreplugin/actionmanager/actionmanager.cpp     |  1 +
 src/plugins/coreplugin/modemanager.cpp             |  1 +
 src/plugins/coreplugin/navigationwidget.cpp        |  3 +++
 src/plugins/coreplugin/outputpanemanager.cpp       | 14 +++++++++-----
 4 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/src/plugins/coreplugin/actionmanager/actionmanager.cpp b/src/plugins/coreplugin/actionmanager/actionmanager.cpp
index 597bc66d28e..2a71ba62972 100644
--- a/src/plugins/coreplugin/actionmanager/actionmanager.cpp
+++ b/src/plugins/coreplugin/actionmanager/actionmanager.cpp
@@ -278,6 +278,7 @@ Command *ActionManager::registerShortcut(QShortcut *shortcut, const Id &id, cons
         shortcut->setEnabled(false);
     shortcut->setObjectName(id.toString());
     shortcut->setParent(ICore::mainWindow());
+    shortcut->setContext(Qt::ApplicationShortcut);
     sc->setShortcut(shortcut);
     sc->setScriptable(scriptable);
     sc->setContext(context);
diff --git a/src/plugins/coreplugin/modemanager.cpp b/src/plugins/coreplugin/modemanager.cpp
index 1925f58d474..21407245332 100644
--- a/src/plugins/coreplugin/modemanager.cpp
+++ b/src/plugins/coreplugin/modemanager.cpp
@@ -165,6 +165,7 @@ void ModeManager::activateModeType(Id type)
 void ModeManager::slotActivateMode(int id)
 {
     m_instance->activateMode(Id::fromUniqueIdentifier(id));
+    ICore::raiseWindow(d->m_modeStack);
 }
 
 void ModeManager::activateMode(Id id)
diff --git a/src/plugins/coreplugin/navigationwidget.cpp b/src/plugins/coreplugin/navigationwidget.cpp
index c654f3ff136..d6190771811 100644
--- a/src/plugins/coreplugin/navigationwidget.cpp
+++ b/src/plugins/coreplugin/navigationwidget.cpp
@@ -30,6 +30,7 @@
 #include "navigationwidget.h"
 #include "navigationsubwidget.h"
 #include "icontext.h"
+#include "icore.h"
 #include "coreconstants.h"
 #include "inavigationwidgetfactory.h"
 #include "modemanager.h"
@@ -266,6 +267,7 @@ void NavigationWidget::activateSubWidget(const Id &factoryId)
     foreach (Internal::NavigationSubWidget *subWidget, d->m_subWidgets) {
         if (subWidget->factory()->id() == factoryId) {
             subWidget->setFocusWidget();
+            ICore::raiseWindow(this);
             return;
         }
     }
@@ -274,6 +276,7 @@ void NavigationWidget::activateSubWidget(const Id &factoryId)
     if (index >= 0) {
         d->m_subWidgets.first()->setFactoryIndex(index);
         d->m_subWidgets.first()->setFocusWidget();
+        ICore::raiseWindow(this);
     }
 }
 
diff --git a/src/plugins/coreplugin/outputpanemanager.cpp b/src/plugins/coreplugin/outputpanemanager.cpp
index 55a4f220e17..cd105414cac 100644
--- a/src/plugins/coreplugin/outputpanemanager.cpp
+++ b/src/plugins/coreplugin/outputpanemanager.cpp
@@ -275,7 +275,7 @@ void OutputPaneManager::init()
         Command *cmd = ActionManager::registerAction(action, id, globalContext);
 
         mpanes->addAction(cmd, "Coreplugin.OutputPane.PanesGroup");
-        m_actions.append(cmd->action());
+        m_actions.append(action);
         m_ids.append(id);
 
         cmd->setDefaultKeySequence(QKeySequence(paneShortCut(shortcutNumber)));
@@ -289,7 +289,7 @@ void OutputPaneManager::init()
         bool visible = outPane->priorityInStatusBar() != -1;
         button->setVisible(visible);
 
-        connect(cmd->action(), SIGNAL(triggered()), this, SLOT(shortcutTriggered()));
+        connect(action, SIGNAL(triggered()), this, SLOT(shortcutTriggered()));
     }
 
     m_titleLabel->setMinimumWidth(minTitleWidth + m_titleLabel->contentsMargins().left()
@@ -312,10 +312,12 @@ void OutputPaneManager::shortcutTriggered()
     // then just give it focus.
     int current = currentIndex();
     if (OutputPanePlaceHolder::isCurrentVisible() && current == idx) {
-        if (!outputPane->hasFocus() && outputPane->canFocus())
+        if (!outputPane->hasFocus() && outputPane->canFocus()) {
             outputPane->setFocus();
-        else
+            ICore::raiseWindow(m_outputWidgetPane);
+        } else {
             slotHide();
+        }
     } else {
         // Else do the same as clicking on the button does.
         buttonTriggered(idx);
@@ -476,8 +478,10 @@ void OutputPaneManager::showPage(int idx, int flags)
         ensurePageVisible(idx);
         IOutputPane *out = m_panes.at(idx);
         out->visibilityChanged(true);
-        if (flags & IOutputPane::WithFocus && out->canFocus())
+        if (flags & IOutputPane::WithFocus && out->canFocus()) {
             out->setFocus();
+            ICore::raiseWindow(m_outputWidgetPane);
+        }
 
         if (flags & IOutputPane::EnsureSizeHint)
             ph->ensureSizeHintAsMinimum();
-- 
GitLab