summaryrefslogtreecommitdiffstats
path: root/src/gui/accessible
diff options
context:
space:
mode:
authorJosé Millán Soto <fid@gpul.org>2012-01-22 18:48:09 (GMT)
committerQt by Nokia <qt-info@nokia.com>2012-04-09 12:59:25 (GMT)
commitf864f8f79b88bbc3cc9007d2a92b08ca4b5cb871 (patch)
tree1f30e7f6f9141d8075ff69fcf5c961f8da525a68 /src/gui/accessible
parent98b2984f54930c2df858a6c8a669a960a355370e (diff)
downloadQt-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.cpp40
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: