Review Request 123508: Shortcuts broken when user sets secondary shortcut
Lindsay Roberts
linds.r at gmail.com
Mon Apr 27 18:01:40 UTC 2015
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/123508/
-----------------------------------------------------------
(Updated April 27, 2015, 6:01 p.m.)
Review request for KDE Frameworks.
Changes
-------
Clarified summary.
Summary (updated)
-----------------
Shortcuts broken when user sets secondary shortcut
Bugs: 337131, 339243, 340803, and 345411
https://bugs.kde.org/show_bug.cgi?id=337131
https://bugs.kde.org/show_bug.cgi?id=339243
https://bugs.kde.org/show_bug.cgi?id=340803
https://bugs.kde.org/show_bug.cgi?id=345411
Repository: kxmlgui
Description
-------
When a user configures both a primary and alternate shortcut for an action, they were lost on subsequent load of the app/part .rc file.
These values are persisted in the .rc file as two key sequence strings separated by "; " -- the format understood by `QKeySequence::listFromString`. When these files are reparsed, the current execution flow simply calls `QObject::setProperty("shortcut", semicolonSeparatedString)`, which is `Q_PROPERTY` bound in QAction to `setShortcut(QKeySequence)` -- invoking the (single) QKeySequence constructor. The embedded semicolon and secondary shortcut seem to break this constructor.
There is another specific flow in `KXMLGUIFactoryPrivate::configureAction`; one that specifically calls
action->setShortcuts(QKeySequence::listFromString(attribute.value()));
but it was conditionalised by:
propertyType == QVariant::UserType && action->property(attrName.toLatin1().constData()).userType() == qMetaTypeId<QList<QKeySequence> >()
I have not been able to track down in history when that conditional would've run true for the QAction property `"shortcut"`, QVariant::KeySequence was added Nov 2011, and the conditional has been there since at least the monolithic git split Dec 2013.
Nor have I been able to track down any recent changes on the Qt side that would've implied the QKeySequence string constructor would've worked for multiple shortcuts in the recent past.
In any case, the fix is simply to add a second conditional - matching on QVariant::KeySequence.
Diffs
-----
src/kxmlguifactory.cpp aeeb242
Diff: https://git.reviewboard.kde.org/r/123508/diff/
Testing
-------
Primarily using trunk Konsole - saving/loading/using multiple/single shortcuts.
Thanks,
Lindsay Roberts
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-frameworks-devel/attachments/20150427/318b627a/attachment-0001.html>
More information about the Kde-frameworks-devel
mailing list