<div dir="ltr"><div><br><div class="gmail_extra"><br><div class="gmail_quote">On Sun, May 8, 2016 at 3:10 PM, Bhushan Shah <span dir="ltr"><<a href="mailto:bhush94@gmail.com" target="_blank">bhush94@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="">On Sunday, May 8, 2016 7:26:32 PM IST, Elvis Stansvik wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Hitting Ctrl+O would not print "clicked" as expected.<br>
<br>
<br>
But then I tested logging out and into an Openbox session, and it<br>
worked from there. The strange thing is that it works with Qt 4.8.7<br>
under the very same KDE session where it fails with Qt 5.6.0.<br>
<br>
Even stranger is that neither:<br>
<br>
    killall kwin_x11<br>
    openbox &<br>
    ./test<br>
<br>
which I would have thought would give the same result as a logout +<br>
login to Openbox, nor<br>
<br>
    kquitapp5 plasmashell<br>
    ./test<br>
<br>
works, if I do that in the running KDE session. So there must be some<br>
other KDE process I'm unaware of which intercepts the shortcut.<br>
<br>
I'm now unsure whether the problem is with Qt 5.6.0, with some<br>
KDE/Plasma component, or somehow with both.<br>
<br>
Would appreciate a lot if someone could check and see if they can reproduce.<br>
<br>
</blockquote>
<br></span>
Given I debugged this earlier and can't think of any nicer solution, would be useful for you..<br>
<br>
This comes from kde:plasma-integration/src/platformtheme/kdeplatformtheme.cpp<br>
<br>
QList<QKeySequence> KdePlatformTheme::keyBindings(QKeySequence::StandardKey key) const<br>
<br></blockquote><div><br></div><div class="h5">It's nothing to do with the KdePlatformTheme stuff or the standard keys in system settings, that only affects shortcuts using QStandardKeys. <br><br></div><div class="h5">This is caused by the KAcceleratorManager from KWidgetAddons [1]<br></div></div><br></div><div class="gmail_extra">It's the bug/feature which means we see & signs all over QtCreator.<br><br></div>We have a class that watches for widgets and makes sure they all have a valid accelerator. It's a clever manager with a complex in-built weighting system.<br><br></div>Your push button doesn't have an accelerator so we automatically add one.<br><div><div><div class="gmail_extra"><div class="gmail_extra"></div>In adding an accelerator, QPushButton changes the shortcut[2]. Hence yours doesn't work.<br><br></div><div class="gmail_extra">If you change your code to:<br></div><div class="gmail_extra"> button = new PushButton("Click &me (crtl+o))"<br></div><div class="gmail_extra"> button->setShortcut(QString("Ctrl+O"));<br><br></div><div class="gmail_extra">control+o will work<br></div><div class="gmail_extra">(but alt+m won't as it should)<br></div><div class="gmail_extra"><br></div><div class="gmail_extra">The main code of this is kwidgetaddons/kacceleratormanager . Though I think this is loaded from KXmlGui which starts tracking things with a Q_COREAPP_STARTUP_FUNCTION in kcheckaccelerators - so simply linking the library launches this tracking.<br><br></div><div class="gmail_extra">The reason this bug is newly affecting Qt apps in Qt5 but not before is because of the QPT we're now linking against this library from every Qt app. Whereas previously it only affected those that linked it explicitly.<br></div></div><br></div><div>One could argue that we shouldn't be messing with other widgets, but equally I think we can argue that Qt should use two shortcuts for setShortcut and the one from the accelerator as any translation file could introduce a mnemonic, which would also break your shortcut in exactly the same way.<br></div><div><div><div class="gmail_extra"><br></div><div class="gmail_extra">David<br></div><div class="gmail_extra"><br>[1] <a href="https://paste.kde.org/pxscewbyt">https://paste.kde.org/pxscewbyt</a><br>[2] <a href="https://paste.kde.org/pylds2vth">https://paste.kde.org/pylds2vth</a><br></div></div></div></div>