Hi,<div><br></div><div>Making this quite detailed and long mail as per request from David Faure (twice) ;)</div><div><br></div><div>So, I've been patching KShortcut up to support multiple shortcuts: <a href="https://git.reviewboard.kde.org/r/104801/">https://git.reviewboard.kde.org/r/104801/</a> and it's working just fine with that patch. However, there seems to be some duplication between:</div>

<div>KAction - QAction</div><div><a href="http://api.kde.org/4.x-api/kdelibs-apidocs/kdeui/html/classKAction.html">http://api.kde.org/4.x-api/kdelibs-apidocs/kdeui/html/classKAction.html</a>
</div><div><a href="http://qt-project.org/doc/qt-4.8/qaction.html">http://qt-project.org/doc/qt-4.8/qaction.html</a>
</div><div><br></div><div>KShortcut - QShortcut</div><div><a href="http://api.kde.org/4.x-api/kdelibs-apidocs/kdeui/html/classKShortcut.html">http://api.kde.org/4.x-api/kdelibs-apidocs/kdeui/html/classKShortcut.html</a>
</div><div><a href="http://qt-project.org/doc/qt-4.8/qshortcut.html">http://qt-project.org/doc/qt-4.8/qshortcut.html</a>
</div><div><br></div><div>So lets go back to the basics here and see what is actually required (K/Q)Action in KDE.</div><div>- QAction functionality as a base</div><div>- Global shortcuts</div><div>- Reset to defaults</div>

<div><br></div><div>I don't know what setShapeGesture and setRockerGesture are supposed to be since they have 0,0 documentation. So i'm assuming (for now) that they are useless.</div><div><br></div><div>As for "reset to defaults", i don't think that should be stored in a KAction abject. That feature is only usable in the Shortcut Editor (assumption) so having this for every single KAction in all KDE applications is a bit strange. Since the KAction has a name as well (back button, forward button ... just look at Shortcut Editor) it becomes fairly easy to simply store the default shortcuts in some config (KConfig stuff) file somewhere. So we don't need "Reset to defaults" in KAction. That only leaves Global shortcuts that are not base functionality thus have to be added.</div>

<div><br></div><div>Note: i actually suggested the inclusion of global shortcuts in Qt by default. Sadly my knowledge and time was way to limited to implement that. If it had been implemented then we could have completely dropped KAction and KShortcut. Right now it's on the "radar" of the Qt devs (Thiago actually) but i don't know if this is something that will come in Qt 5.1. Not really expecting it actually.</div>

<div><br></div><div>KAction is now defined:</div><div>- QAction as base</div><div>- add functionality for global shortcuts</div><div><br></div><div>Global shortcuts are another story. There is KShortcut, but i really don't see a point in keeping the current "primary/alternate" (thus only 2 shortcuts) option alive or even supported. I above mentioned patch in reviewboard is already adding support for multiple shortcuts.For frameworks i actually want to go a step further. Or a big jump.</div>

<div><br></div><div>Completely get rid of KShortcut and introduce 2 new classes:</div><div>- KInputShortcut</div><div>- KInputSequence</div><div><br></div><div>Right now it's not possible to make shortcuts that use both your mouse keys and your keyboard keys. For example keeping control pressed and pressing the mousebutton - something that on windows is quite frequently used to select some fiels (like in excel),.</div>

<div><br></div><div><div>== KInputShortcut ==</div><div>The same as <a href="http://qt-project.org/doc/qt-4.8/qshortcut.html">http://qt-project.org/doc/qt-4.8/qshortcut.html</a> only with input from all attached devices.</div>

<div><br></div><div>== 
KInputSequence ==</div>The same as <a href="http://qt-project.org/doc/qt-4.8/qkeysequence.html">http://qt-project.org/doc/qt-4.8/qkeysequence.html</a> only with input from all attached devices.</div><div><br></div><div>Back on the global shortcuts for a second. I might be hitting a little snag there. How are we going to tell that a shortcut is global?</div>

<div>Perhaps like this:</div><div>QList<KInputShortcut></div><div>And a  getter and setter for KInputShortcut:</div><div>bool KInputShortcut::isGlobal()
</div><div>KInputShortcut::setGlobal(bool)
</div><div><br></div><div>The list would be passed in KAction::setShortcuts(const QList<KInputShortcut>& shortcuts).</div><div><br></div><div>However, doing this would be easier but you lose the option to set a global shortcut:</div>

<div>KAction::setShortcuts(const QList<KInputSequence>& shortcuts)
</div><div><br></div><div>So (for now) i would say: getters and setters for both KInputSequence and KInputShortcut. Not very sure about this part yet. If KInputShortcut is used then the user can provide the option to make it global or not. If KInputSequence is used then the shortcut is just as is and is local only. Not a fact, just my idea.</div>

<div><br></div><div>As for the current KShortcut and KAction. If you all like this idea and would include it in frameworks if implemented correctly then i would like to fully deprecate KShortcut in KDE 4.9 (removed in frameworks) and partly deprecate KAction where needed. If this idea is accepted then i'm not very sure about my earlier patch anymore. Since that seems somewhat temporary if we go by this new structure thus making my other patch(es) useless.</div>

<div><br></div><div><div>To get all of this working is quite a bit of work and certainly by no means easy for me! But i like to do this so why not :) And i have some free time the coming weeks so right now is the best time to do this.</div>

</div><div><br></div><div>I did do a bit of brainstorming in here while typing. I hope it's all clear.</div><div>Please do give your opinion/input on how we should proceed with this.</div><div><br></div><div>Cheers,</div>

<div>Mark</div>