KMenu weirdness with accelerator char

Albert Astals Cid aacid at kde.org
Sun Aug 30 21:57:06 BST 2009


A Dissabte, 29 d'agost de 2009, Martin Koller va escriure:
> Hi,
>
> I've got a problem with KMenu (in kmail) in trunk:
> It inserts a list of strings for some actions (in this case each string is
> an email address). Whenever the result of menu.exec() is asked for its
> text(), the text contains an "&" accelerator character.
>
> Using the same code but just QMenu instead, does not show this behavior.
> I looked through KMenu's code but couldn't find the problem (as
> setKeyboardShortcutsEnabled is OFF by default)
>
> Code:
>
>   KMenu menu( this );
>   menu.setObjectName( "Addresschooser" );
>   for ( QStringList::const_iterator it = emails.begin(), end = emails.end()
> ; it != end; ++it ) {
>     kDebug() << *it;
>     menu.addAction( *it );
>   }
>   const QAction *result = menu.exec( QCursor::pos() );
>   if ( !result )
>     return;
>     kDebug() << "result:" << result->text();
>
>
> The debug output:
> kmail(7045) KMLineEdit::insertEmails: "martin.koller at etm.at"
> kmail(7045) KMLineEdit::insertEmails: "koller at etm.at"
> kmail(7045) KMLineEdit::insertEmails: "martin.b.koller at siemens.com"
> kmail(7045) KMLineEdit::insertEmails: result: "&koller at etm.at"

Yes, that is correct, menu entries for KDE have accelerator to make them 
easier to use to the end user, you should not expect the text you enter is the 
same you will get, as Michael says you can use 
KLocale::removeAcceleratorMarker to get a string without accelators, if you 
REALLY don't want your widget do be autoaccelerated, use 
KAcceleratorManager::setNoAccel

Albert




More information about the kde-core-devel mailing list