> On Jan. 29, 2017, 7:32 p.m., David Faure wrote: > > Actually, Alt+letter for actions in toolbars doesn't work anymore. I > > *think* it worked long ago, when e.g. konqueror's toolbars had > > &Location: [URL LineEdit] > > > > But re-reading the comment, that is exactly the point: no accel feature in > > toolbars so Qt *strips* '&' from action texts in toolbars, that's the > > "default removal of ampersand" the comment is talking about. The same > > action might have a working accelerator for the case where it's used in a > > menu, and that accelerator needs to be stripped. > > The (broken) code extends that to CJK style accelerators. > > > > Testcase: > > m_paPrint->setText("Print... (&P)"); > > in konqmainwindow.cpp:3467 > > > > Err, interesting, this feature (the CJK accel removal) is broken (maybe > > since the KAction=>QAction port), because act->iconText() calls > > qt_strippedText(text()) internally which strips '&' before > > KLocalizedString::removeAcceleratorMarker can see it. > > > > With QAction defaulting to iconText in text and defaulting to text in > > iconText, it seems to be pretty hard to inject our own accelerator-removal > > code... > > > > I tried to improve this code to look at both text and iconText and find out > > if iconText was generated, but even getting this right doesn't help. The > > code works the first time, then as you say KAcceleratorManager comes in an > > sets a '&' elsewhere, breaking the (&P) detection logic. > > KAcceleratorManager::setNoAccel(tb) does not help because it finds the > > action from the menu and updates the action text and then this affects the > > QToolButton via QEvent::ActionChanged. We could filter that out but what > > about when the application really wants to change the text... > > > > This is all quite complicated. Ideally qt_strippedText would be taught > > about the "(&P)" case and then none of this would be necessary. > > > > The second best solution I can think of is for KAcceleratorManager to take > > care of this, that way it won't conflict with itself. > > KWidgetAddons is a tier 1 though so I can't call KLocalizedString from > > there, I have to duplicate the whole function. > > Apart from that, it appears to work. > > http://www.davidfaure.fr/2017/0001-KAcceleratorManager-set-icon-text-on-actions-to-remo.patch > > (in addition to the patch in this review, obviously). > > Thoughts? > > > > (why do I let myself get into full debugging and fixing of the issue when I > > just wanted to post a comment initially? :-)
> But re-reading the comment, that is exactly the point: no accel feature in > toolbars so Qt *strips* '&' from action texts in toolbars, But my point is that Qt doesn't do this, and accelerators work just fine in toolbars here with this patch. I like accelerators in toolbars, especially in Dolphin where the Control button in the toolbar already has an accelerator so without this patch it is just very inconsistent. - Martin Tobias Holmedahl ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://git.reviewboard.kde.org/r/129663/#review102317 ----------------------------------------------------------- On Dec. 17, 2016, 12:23 p.m., Martin Tobias Holmedahl Sandsmark wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://git.reviewboard.kde.org/r/129663/ > ----------------------------------------------------------- > > (Updated Dec. 17, 2016, 12:23 p.m.) > > > Review request for KDE Frameworks, David Faure and Chusslove Illich. > > > Repository: kxmlgui > > > Description > ------- > > Don't try to strip out accelerators in the KToolBar event handler. It makes > no sense to me, potentially creates an endless repaint loop and fights with > KAcceleratorManager which will constantly re-add accelerators. > > > Diffs > ----- > > src/ktoolbar.cpp 31be9b0 > > Diff: https://git.reviewboard.kde.org/r/129663/diff/ > > > Testing > ------- > > With this patch not only the control button in Dolphin has an accelerator. > > > Thanks, > > Martin Tobias Holmedahl Sandsmark > >