src/gui/widgets/qlabel.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
--- a/src/gui/widgets/qlabel.cpp	Tue Jan 26 12:42:25 2010 +0200
+++ b/src/gui/widgets/qlabel.cpp	Tue Feb 02 00:43:10 2010 +0200
@@ -1170,22 +1170,10 @@
     // But then we do want to hide the ampersands, so we can't use shortcutId.
     hasShortcut = false;
 
-    if (control) {
-        ensureTextPopulated();
-        // Underline the first character that follows an ampersand
-        shortcutCursor = control->document()->find(QLatin1String("&"));
-        if (shortcutCursor.isNull())
-            return;
-        hasShortcut = true;
-        shortcutId = q->grabShortcut(QKeySequence::mnemonic(text));
-        shortcutCursor.deleteChar(); // remove the ampersand
-        shortcutCursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor);
-    } else {
-        if (!text.contains(QLatin1Char('&')))
-            return;
-        hasShortcut = true;
-        shortcutId = q->grabShortcut(QKeySequence::mnemonic(text));
-    }
+    if (!text.contains(QLatin1Char('&')))
+        return;
+    hasShortcut = true;
+    shortcutId = q->grabShortcut(QKeySequence::mnemonic(text));
 }
 
 #endif // QT_NO_SHORTCUT
@@ -1456,6 +1444,24 @@
             doc->setPlainText(text);
 #endif
             doc->setUndoRedoEnabled(false);
+
+#ifndef QT_NO_SHORTCUT
+            if (hasShortcut) {
+                // Underline the first character that follows an ampersand (and remove the others ampersands)
+                int from = 0;
+                bool found = false;
+                QTextCursor cursor;
+                while (!(cursor = control->document()->find((QLatin1String("&")), from)).isNull()) {
+                    cursor.deleteChar(); // remove the ampersand
+                    cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor);
+                    from = cursor.position();
+                    if (!found && cursor.selectedText() != QLatin1String("&")) { //not a second &
+                        found = true;
+                        shortcutCursor = cursor;
+                    }
+                }
+            }
+#endif
         }
     }
     textDirty = false;