diff options
author | José Millán Soto <fid@gpul.org> | 2012-01-22 18:48:09 (GMT) |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-04-09 12:59:25 (GMT) |
commit | f864f8f79b88bbc3cc9007d2a92b08ca4b5cb871 (patch) | |
tree | 1f30e7f6f9141d8075ff69fcf5c961f8da525a68 /src/gui/accessible | |
parent | 98b2984f54930c2df858a6c8a669a960a355370e (diff) | |
download | Qt-f864f8f79b88bbc3cc9007d2a92b08ca4b5cb871.zip Qt-f864f8f79b88bbc3cc9007d2a92b08ca4b5cb871.tar.gz Qt-f864f8f79b88bbc3cc9007d2a92b08ca4b5cb871.tar.bz2 |
Made qt_accStripAmp handle "&&"
Changed qt_accStripAmp implementation to handle texts which contains
pairs of ampersands representing a single ampersand.
In order to do that, a new static function called qt_accAmpIndex was
created.
This function is based on the code of qt_accHotKey, which was changed
to use qt_accAmpIndex.
Change-Id: Idcc5d07581d7fb3251c30399b189740ca8071104
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@nokia.com>
Diffstat (limited to 'src/gui/accessible')
-rw-r--r-- | src/gui/accessible/qaccessiblewidget.cpp | 40 |
1 files changed, 28 insertions, 12 deletions
diff --git a/src/gui/accessible/qaccessiblewidget.cpp b/src/gui/accessible/qaccessiblewidget.cpp index a03bc34..d6cd966 100644 --- a/src/gui/accessible/qaccessiblewidget.cpp +++ b/src/gui/accessible/qaccessiblewidget.cpp @@ -100,16 +100,14 @@ static QString buddyString(const QWidget *widget) return QString(); } -QString Q_GUI_EXPORT qt_accStripAmp(const QString &text) -{ - return QString(text).remove(QLatin1Char('&')); -} - -QString Q_GUI_EXPORT qt_accHotKey(const QString &text) +/* This function will return the offset of the '&' in the text that would be + preceding the accelerator character. + If this text does not have an accelerator, -1 will be returned. */ +static int qt_accAmpIndex(const QString &text) { #ifndef QT_NO_SHORTCUT if (text.isEmpty()) - return text; + return -1; int fa = 0; QChar ac; @@ -121,20 +119,38 @@ QString Q_GUI_EXPORT qt_accHotKey(const QString &text) ++fa; continue; } else { - ac = text.at(fa); + return fa - 1; break; } } } - if (ac.isNull()) - return QString(); - return (QString)QKeySequence(Qt::ALT) + ac.toUpper(); + + return -1; #else Q_UNUSED(text); - return QString(); + return -1; #endif } +QString Q_GUI_EXPORT qt_accStripAmp(const QString &text) +{ + QString newText(text); + int ampIndex = qt_accAmpIndex(newText); + if (ampIndex != -1) + newText.remove(ampIndex, 1); + + return newText.replace(QLatin1String("&&"), QLatin1String("&")); +} + +QString Q_GUI_EXPORT qt_accHotKey(const QString &text) +{ + int ampIndex = qt_accAmpIndex(text); + if (ampIndex != -1) + return (QString)QKeySequence(Qt::ALT) + text.at(ampIndex + 1); + + return QString(); +} + class QAccessibleWidgetPrivate : public QAccessible { public: |