Review Request 123508: Shortcuts broken when user sets secondary shortcut

Lindsay Roberts linds.r at gmail.com
Sat May 2 09:04:57 UTC 2015


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/123508/
-----------------------------------------------------------

(Updated May 2, 2015, 9:04 a.m.)


Status
------

This change has been marked as submitted.


Review request for KDE Frameworks and David Faure.


Changes
-------

Submitted with commit c7b1b1b89e388779356a5dcde291d6e6eac7705b by Lindsay Roberts to branch master.


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
-----

  autotests/kxmlgui_unittest.cpp 404d304 
  src/kxmlguifactory.cpp aeeb242 
  autotests/kxmlgui_unittest.h fa2d7fb 

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/20150502/f2b57114/attachment.html>


More information about the Kde-frameworks-devel mailing list