summaryrefslogtreecommitdiffstats
path: root/src/widgets/accessible/qaccessiblewidget.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@nokia.com>2012-04-16 12:04:34 +0200
committerLars Knoll <lars.knoll@nokia.com>2012-04-16 12:04:34 +0200
commit9bd032355163d92cda5e7e59ecd21214b131f187 (patch)
tree002fa12558505683143c7eb08949a3d225bf0712 /src/widgets/accessible/qaccessiblewidget.cpp
parentd037d25c3d5236623371cf051aaf6a9e59792ba7 (diff)
parent41673c45dde2eb95ee21dd918235218399f2be2c (diff)
Merge remote-tracking branch 'origin/master' into api_changes
Conflicts: configure src/corelib/io/qurl.cpp src/gui/kernel/qwindow.cpp src/tools/moc/generator.cpp src/widgets/kernel/qwidget_qpa.cpp src/widgets/styles/qstyle.h src/widgets/widgets/qtabbar.cpp tests/auto/corelib/codecs/utf8/tst_utf8.cpp Change-Id: Ia457228d6f684ec8184e13e8fcc9d25857b1751e
Diffstat (limited to 'src/widgets/accessible/qaccessiblewidget.cpp')
-rw-r--r--src/widgets/accessible/qaccessiblewidget.cpp41
1 files changed, 29 insertions, 12 deletions
diff --git a/src/widgets/accessible/qaccessiblewidget.cpp b/src/widgets/accessible/qaccessiblewidget.cpp
index ae050ac643..796ce42118 100644
--- a/src/widgets/accessible/qaccessiblewidget.cpp
+++ b/src/widgets/accessible/qaccessiblewidget.cpp
@@ -100,16 +100,14 @@ static QString buddyString(const QWidget *widget)
return QString();
}
-QString Q_WIDGETS_EXPORT qt_accStripAmp(const QString &text)
-{
- return QString(text).remove(QLatin1Char('&'));
-}
-
-QString Q_WIDGETS_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;
@@ -118,23 +116,42 @@ QString Q_WIDGETS_EXPORT qt_accHotKey(const QString &text)
if (fa < text.length()) {
// ignore "&&"
if (text.at(fa) == QLatin1Char('&')) {
+
++fa;
continue;
} else {
- ac = text.at(fa);
+ return fa - 1;
break;
}
}
}
- if (ac.isNull())
- return QString();
- return QKeySequence(Qt::ALT).toString(QKeySequence::NativeText) + ac.toUpper();
+
+ return -1;
#else
Q_UNUSED(text);
- return QString();
+ return -1;
#endif
}
+QString Q_WIDGETS_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_WIDGETS_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: