From d9170e650c55015c2dbfb61315935322f821840b Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Thu, 4 Apr 2013 11:58:34 +0200 Subject: Android: Don't show '&' character in menus Strip out shortcut indicator before showing the text. Task-number: QTBUG-30507 Change-Id: I8fa2ef8a2052f4c43d14b3babfd5aca0a08e29d5 Reviewed-by: Eskil Abrahamsen Blomfeldt --- .../platforms/android/src/androidjnimenu.cpp | 29 +++++++++++++++++----- 1 file changed, 23 insertions(+), 6 deletions(-) (limited to 'src/plugins/platforms/android/src') diff --git a/src/plugins/platforms/android/src/androidjnimenu.cpp b/src/plugins/platforms/android/src/androidjnimenu.cpp index e49af0fdac..bb180347c1 100644 --- a/src/plugins/platforms/android/src/androidjnimenu.cpp +++ b/src/plugins/platforms/android/src/androidjnimenu.cpp @@ -177,6 +177,20 @@ namespace QtAndroidMenu resetMenuBar(); } + static QString removeAmpersandEscapes(QString s) + { + int i = 0; + while (i < s.size()) { + ++i; + if (s.at(i-1) != QLatin1Char('&')) + continue; + if (i < s.size() && s.at(i) == QLatin1Char('&')) + ++i; + s.remove(i-1,1); + } + return s.trimmed(); + } + static void fillMenuItem(JNIEnv *env, jobject menuItem, bool checkable, bool checked, bool enabled, bool visible, const QIcon &icon=QIcon()) { env->CallObjectMethod(menuItem, setCheckableMenuItemMethodID, checkable); @@ -204,8 +218,9 @@ namespace QtAndroidMenu foreach (QAndroidPlatformMenuItem *item, platformMenu->menuItems()) { if (item->isSeparator()) continue; - jstring jtext = env->NewString(reinterpret_cast(item->text().data()), - item->text().length()); + QString itemText = removeAmpersandEscapes(item->text()); + jstring jtext = env->NewString(reinterpret_cast(itemText.data()), + itemText.length()); jobject menuItem = env->CallObjectMethod(menu, addMenuItemMethodID, menuNoneValue, @@ -239,8 +254,9 @@ namespace QtAndroidMenu order = addAllMenuItemsToMenu(env, menu, static_cast(menus.front())); } else { foreach (QAndroidPlatformMenu *item, menus) { - jstring jtext = env->NewString(reinterpret_cast(item->text().data()), - item->text().length()); + QString itemText = removeAmpersandEscapes(item->text()); + jstring jtext = env->NewString(reinterpret_cast(itemText.data()), + itemText.length()); jobject menuItem = env->CallObjectMethod(menu, addMenuItemMethodID, menuNoneValue, @@ -299,8 +315,9 @@ namespace QtAndroidMenu if (!visibleMenu) return; - jstring jtext = env->NewString(reinterpret_cast(visibleMenu->text().data()), - visibleMenu->text().length()); + QString menuText = removeAmpersandEscapes(visibleMenu->text()); + jstring jtext = env->NewString(reinterpret_cast(menuText.data()), + menuText.length()); env->CallObjectMethod(menu, setHeaderTitleContextMenuMethodID, jtext); env->DeleteLocalRef(jtext); addAllMenuItemsToMenu(env, menu, visibleMenu); -- cgit v1.2.3