From 1a77c287dffaddda1b32605e477d6f6e290f7f7a Mon Sep 17 00:00:00 2001
From: mae <qt-info@nokia.com>
Date: Mon, 17 May 2010 11:39:42 +0200
Subject: [PATCH] Workaround for QTCREATORBUG-72 (multiple shortcuts)

This fixes the Ctrl+W vs. Ctrl+F4 for close on MS-Windows
by introducing Ctrl+F4 as an alternative shortcut.

Reviewed-by: con
---
 src/plugins/coreplugin/coreconstants.h           |  1 +
 .../coreplugin/editormanager/editormanager.cpp   | 16 ++++++++++++----
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/plugins/coreplugin/coreconstants.h b/src/plugins/coreplugin/coreconstants.h
index 21adb03f5be..0decf8aabc4 100644
--- a/src/plugins/coreplugin/coreconstants.h
+++ b/src/plugins/coreplugin/coreconstants.h
@@ -141,6 +141,7 @@ const char * const GOTO_OTHER_SPLIT      = "QtCreator.GotoOtherSplit";
 const char * const SAVEASDEFAULT         = "QtCreator.SaveAsDefaultLayout";
 const char * const RESTOREDEFAULT        = "QtCreator.RestoreDefaultLayout";
 const char * const CLOSE                 = "QtCreator.Close";
+const char * const CLOSE_ALTERNATIVE     = "QtCreator.Close_Alternative"; // temporary, see QTCREATORBUG-72
 const char * const CLOSEALL              = "QtCreator.CloseAll";
 const char * const CLOSEOTHERS           = "QtCreator.CloseOthers";
 const char * const GOTONEXT              = "QtCreator.GotoNext";
diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index da4bca7efd9..a296741aa05 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -67,6 +67,7 @@
 #include <QtCore/QSettings>
 
 #include <QtGui/QAction>
+#include <QtGui/QShortcut>
 #include <QtGui/QApplication>
 #include <QtGui/QFileDialog>
 #include <QtGui/QLayout>
@@ -311,16 +312,21 @@ EditorManager::EditorManager(ICore *core, QWidget *parent) :
 
     // Close Action
     cmd = am->registerAction(m_d->m_closeCurrentEditorAction, Constants::CLOSE, editManagerContext);
-#ifdef Q_WS_WIN
-    cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+F4")));
-#else
     cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+W")));
-#endif
     cmd->setAttribute(Core::Command::CA_UpdateText);
     cmd->setDefaultText(m_d->m_closeCurrentEditorAction->text());
     mfile->addAction(cmd, Constants::G_FILE_CLOSE);
     connect(m_d->m_closeCurrentEditorAction, SIGNAL(triggered()), this, SLOT(closeEditor()));
 
+#ifdef Q_WS_WIN
+    // workaround for QTCREATORBUG-72
+    QShortcut *sc = new QShortcut(parent);
+    cmd = am->registerShortcut(sc, Constants::CLOSE_ALTERNATIVE, editManagerContext);
+    cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+F4")));
+    cmd->setDefaultText(EditorManager::tr("Close"));
+    connect(sc, SIGNAL(activated()), this, SLOT(closeEditor()));
+#endif
+
     // Close All Action
     cmd = am->registerAction(m_d->m_closeAllEditorsAction, Constants::CLOSEALL, editManagerContext);
     cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+Shift+W")));
@@ -733,6 +739,8 @@ void EditorManager::closeOtherEditors()
 // SLOT connected to action
 void EditorManager::closeEditor()
 {
+    if (!m_d->m_currentEditor)
+        return;
     addCurrentPositionToNavigationHistory();
     closeEditor(m_d->m_currentEditor);
 }
-- 
GitLab