From 063ad7a5f0b0bf32aa3f93366972e58c0784176f Mon Sep 17 00:00:00 2001 From: "Zheng, Lei" Date: Sun, 6 Mar 2022 20:43:17 +0800 Subject: [PATCH] Gui: fix action title processing --- src/Gui/Action.cpp | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/Gui/Action.cpp b/src/Gui/Action.cpp index 965f9ba7bb..e81503b3c0 100644 --- a/src/Gui/Action.cpp +++ b/src/Gui/Action.cpp @@ -38,6 +38,8 @@ # include #endif +#include + #include #include #include @@ -214,16 +216,30 @@ void Action::setToolTip(const QString & s, const QString & title) this)); } +static QString & actionTitle(QString & title) +{ + // Deal with QAction title mnemonic + static QRegularExpression re(QStringLiteral("&(.)")); + title.replace(re, QStringLiteral("\\1")); + // Trim line ending punctuation + static QRegularExpression rePunct(QStringLiteral("[[:punct:]]+$")); + title.replace(rePunct, QString()); + return title; +} + +static inline QString actionTitle(const QString &title) +{ + QString text(title); + return actionTitle(text); +} + QString Action::createToolTip(QString _tooltip, const QString & title, const QFont &font, const QString &sc, Action *act) { - QString text = title; - text.remove(QLatin1Char('&'));; - while(text.size() && text[text.size()-1].isPunct()) - text.resize(text.size()-1); + QString text = actionTitle(title); if (text.isEmpty()) return _tooltip; @@ -1406,14 +1422,10 @@ public: case Qt::DisplayRole: case Qt::EditRole: if (info.text.isEmpty()) { -#if QT_VERSION>=QT_VERSION_CHECK(5,2,0) - info.text = QString::fromLatin1("%2 (%1)").arg( + info.text = QStringLiteral("%2 (%1)").arg( QString::fromLatin1(info.cmd->getName()), qApp->translate(info.cmd->className(), info.cmd->getMenuText())); -#else - info.text = qApp->translate(info.cmd->className(), info.cmd->getMenuText()); -#endif - info.text.replace(QLatin1Char('&'), QString()); + actionTitle(info.text); if (info.text.isEmpty()) info.text = QString::fromLatin1(info.cmd->getName()); }