forked from qt-creator/qt-creator
Fix that menus didn't show ampersands in files names
And instead interpreted the ampersand + following character as an accelerator key. Task-number: QTCREATORBUG-17817 Change-Id: I327239499ce56e75fd12f2df5be60d4b04913acd Reviewed-by: David Schulz <david.schulz@qt.io> Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
@@ -375,4 +375,10 @@ int caseFriendlyCompare(const QString &a, const QString &b)
|
|||||||
return a.compare(b, Qt::CaseSensitive);
|
return a.compare(b, Qt::CaseSensitive);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString quoteAmpersands(const QString &text)
|
||||||
|
{
|
||||||
|
QString result = text;
|
||||||
|
return result.replace("&", "&&");
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Utils
|
} // namespace Utils
|
||||||
|
@@ -53,6 +53,8 @@ QTCREATOR_UTILS_EXPORT QString withTildeHomePath(const QString &path);
|
|||||||
|
|
||||||
// Removes first unescaped ampersand in text
|
// Removes first unescaped ampersand in text
|
||||||
QTCREATOR_UTILS_EXPORT QString stripAccelerator(const QString &text);
|
QTCREATOR_UTILS_EXPORT QString stripAccelerator(const QString &text);
|
||||||
|
// Quotes all ampersands
|
||||||
|
QTCREATOR_UTILS_EXPORT QString quoteAmpersands(const QString &text);
|
||||||
|
|
||||||
QTCREATOR_UTILS_EXPORT bool readMultiLineString(const QJsonValue &value, QString *out);
|
QTCREATOR_UTILS_EXPORT bool readMultiLineString(const QJsonValue &value, QString *out);
|
||||||
|
|
||||||
|
@@ -70,8 +70,9 @@
|
|||||||
#include <utils/macroexpander.h>
|
#include <utils/macroexpander.h>
|
||||||
#include <utils/mimetypes/mimedatabase.h>
|
#include <utils/mimetypes/mimedatabase.h>
|
||||||
#include <utils/mimetypes/mimetype.h>
|
#include <utils/mimetypes/mimetype.h>
|
||||||
#include <utils/qtcassert.h>
|
|
||||||
#include <utils/overridecursor.h>
|
#include <utils/overridecursor.h>
|
||||||
|
#include <utils/qtcassert.h>
|
||||||
|
#include <utils/stringutils.h>
|
||||||
#include <utils/utilsicons.h>
|
#include <utils/utilsicons.h>
|
||||||
|
|
||||||
#include <QClipboard>
|
#include <QClipboard>
|
||||||
@@ -1695,7 +1696,8 @@ void EditorManagerPrivate::setupSaveActions(IDocument *document, QAction *saveAc
|
|||||||
revertToSavedAction->setEnabled(hasFile);
|
revertToSavedAction->setEnabled(hasFile);
|
||||||
|
|
||||||
if (document && !document->displayName().isEmpty()) {
|
if (document && !document->displayName().isEmpty()) {
|
||||||
const QString quotedName = QLatin1Char('"') + document->displayName() + QLatin1Char('"');
|
const QString quotedName = QLatin1Char('"')
|
||||||
|
+ Utils::quoteAmpersands(document->displayName()) + QLatin1Char('"');
|
||||||
saveAction->setText(tr("&Save %1").arg(quotedName));
|
saveAction->setText(tr("&Save %1").arg(quotedName));
|
||||||
saveAsAction->setText(tr("Save %1 &As...").arg(quotedName));
|
saveAsAction->setText(tr("Save %1 &As...").arg(quotedName));
|
||||||
revertToSavedAction->setText(document->isModified()
|
revertToSavedAction->setText(document->isModified()
|
||||||
@@ -1718,7 +1720,8 @@ void EditorManagerPrivate::updateActions()
|
|||||||
|
|
||||||
QString quotedName;
|
QString quotedName;
|
||||||
if (curDocument)
|
if (curDocument)
|
||||||
quotedName = QLatin1Char('"') + curDocument->displayName() + QLatin1Char('"');
|
quotedName = QLatin1Char('"') + Utils::quoteAmpersands(curDocument->displayName())
|
||||||
|
+ QLatin1Char('"');
|
||||||
setupSaveActions(curDocument, d->m_saveAction, d->m_saveAsAction, d->m_revertToSavedAction);
|
setupSaveActions(curDocument, d->m_saveAction, d->m_saveAsAction, d->m_revertToSavedAction);
|
||||||
|
|
||||||
d->m_closeCurrentEditorAction->setEnabled(curDocument);
|
d->m_closeCurrentEditorAction->setEnabled(curDocument);
|
||||||
@@ -2397,11 +2400,12 @@ void EditorManager::addSaveAndCloseEditorActions(QMenu *contextMenu, DocumentMod
|
|||||||
|
|
||||||
contextMenu->addSeparator();
|
contextMenu->addSeparator();
|
||||||
|
|
||||||
|
const QString quotedDisplayName = Utils::quoteAmpersands(entry->displayName());
|
||||||
d->m_closeCurrentEditorContextAction->setText(entry
|
d->m_closeCurrentEditorContextAction->setText(entry
|
||||||
? tr("Close \"%1\"").arg(entry->displayName())
|
? tr("Close \"%1\"").arg(quotedDisplayName)
|
||||||
: tr("Close Editor"));
|
: tr("Close Editor"));
|
||||||
d->m_closeOtherDocumentsContextAction->setText(entry
|
d->m_closeOtherDocumentsContextAction->setText(entry
|
||||||
? tr("Close All Except \"%1\"").arg(entry->displayName())
|
? tr("Close All Except \"%1\"").arg(quotedDisplayName)
|
||||||
: tr("Close Other Editors"));
|
: tr("Close Other Editors"));
|
||||||
d->m_closeCurrentEditorContextAction->setEnabled(entry != nullptr);
|
d->m_closeCurrentEditorContextAction->setEnabled(entry != nullptr);
|
||||||
d->m_closeOtherDocumentsContextAction->setEnabled(entry != nullptr);
|
d->m_closeOtherDocumentsContextAction->setEnabled(entry != nullptr);
|
||||||
|
@@ -1060,7 +1060,8 @@ void MainWindow::aboutToShowRecentFiles()
|
|||||||
for (int i = 0; i < recentFiles.count(); ++i) {
|
for (int i = 0; i < recentFiles.count(); ++i) {
|
||||||
const DocumentManager::RecentFile file = recentFiles[i];
|
const DocumentManager::RecentFile file = recentFiles[i];
|
||||||
|
|
||||||
const QString filePath = QDir::toNativeSeparators(withTildeHomePath(file.first));
|
const QString filePath
|
||||||
|
= Utils::quoteAmpersands(QDir::toNativeSeparators(withTildeHomePath(file.first)));
|
||||||
const QString actionText = ActionManager::withNumberAccelerator(filePath, i + 1);
|
const QString actionText = ActionManager::withNumberAccelerator(filePath, i + 1);
|
||||||
QAction *action = menu->addAction(actionText);
|
QAction *action = menu->addAction(actionText);
|
||||||
connect(action, &QAction::triggered, this, [file] {
|
connect(action, &QAction::triggered, this, [file] {
|
||||||
|
@@ -34,6 +34,7 @@
|
|||||||
#include <app/app_version.h>
|
#include <app/app_version.h>
|
||||||
#include <utils/hostosinfo.h>
|
#include <utils/hostosinfo.h>
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
|
#include <utils/stringutils.h>
|
||||||
|
|
||||||
#include <QAction>
|
#include <QAction>
|
||||||
#include <QEvent>
|
#include <QEvent>
|
||||||
@@ -194,7 +195,7 @@ void WindowList::updateTitle(QWidget *window)
|
|||||||
QString title = window->windowTitle();
|
QString title = window->windowTitle();
|
||||||
if (title.endsWith(QStringLiteral("- ") + Constants::IDE_DISPLAY_NAME))
|
if (title.endsWith(QStringLiteral("- ") + Constants::IDE_DISPLAY_NAME))
|
||||||
title.chop(12);
|
title.chop(12);
|
||||||
m_windowActions.at(index)->setText(title.trimmed());
|
m_windowActions.at(index)->setText(Utils::quoteAmpersands(title.trimmed()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void WindowList::removeWindow(QWidget *window)
|
void WindowList::removeWindow(QWidget *window)
|
||||||
|
@@ -59,9 +59,10 @@
|
|||||||
|
|
||||||
#include <coreplugin/messagebox.h>
|
#include <coreplugin/messagebox.h>
|
||||||
#include <utils/asconst.h>
|
#include <utils/asconst.h>
|
||||||
#include <utils/qtcassert.h>
|
|
||||||
#include <utils/parameteraction.h>
|
#include <utils/parameteraction.h>
|
||||||
#include <utils/pathchooser.h>
|
#include <utils/pathchooser.h>
|
||||||
|
#include <utils/qtcassert.h>
|
||||||
|
#include <utils/stringutils.h>
|
||||||
#include <utils/utilsicons.h>
|
#include <utils/utilsicons.h>
|
||||||
#include <texteditor/texteditor.h>
|
#include <texteditor/texteditor.h>
|
||||||
|
|
||||||
@@ -1358,7 +1359,7 @@ void GitPlugin::updateActions(VcsBasePlugin::ActionState as)
|
|||||||
updateVersionWarning();
|
updateVersionWarning();
|
||||||
// Note: This menu is visible if there is no repository. Only
|
// Note: This menu is visible if there is no repository. Only
|
||||||
// 'Create Repository'/'Show' actions should be available.
|
// 'Create Repository'/'Show' actions should be available.
|
||||||
const QString fileName = state.currentFileName();
|
const QString fileName = Utils::quoteAmpersands(state.currentFileName());
|
||||||
for (ParameterAction *fileAction : Utils::asConst(m_fileActions))
|
for (ParameterAction *fileAction : Utils::asConst(m_fileActions))
|
||||||
fileAction->setParameter(fileName);
|
fileAction->setParameter(fileName);
|
||||||
// If the current file looks like a patch, offer to apply
|
// If the current file looks like a patch, offer to apply
|
||||||
|
@@ -46,8 +46,9 @@
|
|||||||
|
|
||||||
#include <utils/hostosinfo.h>
|
#include <utils/hostosinfo.h>
|
||||||
#include <utils/proxyaction.h>
|
#include <utils/proxyaction.h>
|
||||||
#include <utils/utilsicons.h>
|
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
|
#include <utils/stringutils.h>
|
||||||
|
#include <utils/utilsicons.h>
|
||||||
|
|
||||||
#include <qmljs/qmljsreformatter.h>
|
#include <qmljs/qmljsreformatter.h>
|
||||||
|
|
||||||
@@ -281,7 +282,7 @@ void ShortCutManager::updateActions(Core::IEditor* currentEditor)
|
|||||||
|
|
||||||
QString quotedName;
|
QString quotedName;
|
||||||
if (currentEditor && document)
|
if (currentEditor && document)
|
||||||
quotedName = '"' + document->displayName() + '"';
|
quotedName = '"' + Utils::quoteAmpersands(document->displayName()) + '"';
|
||||||
|
|
||||||
m_saveAsAction.setText(tr("Save %1 As...").arg(quotedName));
|
m_saveAsAction.setText(tr("Save %1 As...").arg(quotedName));
|
||||||
m_saveAction.setText(tr("&Save %1").arg(quotedName));
|
m_saveAction.setText(tr("&Save %1").arg(quotedName));
|
||||||
|
Reference in New Issue
Block a user