[calligra/calligra/2.9] libs/flake: Update tooltips to include keyboard shortcut.

C. Boemann cbo at boemann.dk
Wed Aug 19 18:14:27 BST 2015


Yeah well it is used as a label in words, stage, sheets and flow, so adding 
extra text makes it spill over and possibly even becoming unreadable (depends 
on the tool obviously). Also 

and by asap I mean before the next release  - sorry if that came out a bit 
harsh.

But just because krita has a feature request doesn't mean we should 
short circuit the review process. If phabricator can't send to all of calligra 
then we must use reviewboard instead.

On Wednesday 19 August 2015 12:37:16 you wrote:
> Hi Camilla,
> 
> Before we "ASAP" revert or make it conditional, I'd like to know _what_ the
> problem is you see with this patch. And it's a bit difficult right now who
> to add individually to review request on Phabricator, but Friedrich was
> also cc'ed on the change.
> 
> Anyway, since this patch delivers a feature users have been asking for since
> 2006 or so, asking for an immediate revert without explaining what the
> problem is goes way too far.
> 
> On Wed, 19 Aug 2015, C. Boemann wrote:
> > please revert or make it conditional for krita only ASAP
> > 
> > And in the future please add the rest of calligra as reviewers on commits
> > to shared areas
> > 
> > Camilla Boemann
> > 
> > On Tuesday 18 August 2015 17:45:58 Michael Abrahams wrote:
> >> Git commit 8a450ef60839cf77486d1bb9eb25b63ffcb1e468 by Michael 
Abrahams.
> >> Committed on 18/08/2015 at 17:45.
> >> Pushed by abrahams into branch 'calligra/2.9'.
> >> 
> >> Update tooltips to include keyboard shortcut.
> >> 
> >> Summary:
> >> Tooltips will automatically change with changes to shorcuts.
> >> 
> >> Ref T199
> >> BUG: 348626
> >> 
> >> Reviewers: dkazakov, rempt
> >> 
> >> Maniphest Tasks: T199
> >> 
> >> Differential Revision: https://phabricator.kde.org/D245
> >> 
> >> M  +9    -4    libs/flake/KoToolManager.cpp
> >> M  +1    -1    libs/flake/KoToolManager.h
> >> M  +41   -9    libs/flake/KoToolManager_p.cpp
> >> M  +9    -2    libs/flake/KoToolManager_p.h
> >> 
> >> http://commits.kde.org/calligra/8a450ef60839cf77486d1bb9eb25b63ffcb1e468
> >> 
> >> diff --git a/libs/flake/KoToolManager.cpp b/libs/flake/KoToolManager.cpp
> >> index 61e194c..16f817f 100644
> >> --- a/libs/flake/KoToolManager.cpp
> >> +++ b/libs/flake/KoToolManager.cpp
> >> @@ -788,19 +788,24 @@ void KoToolManager::registerTools(KActionCollection
> >> *ac, KoCanvasController *con return;
> >> 
> >>      }
> >> 
> >> +    // Actions available during the use of individual tools
> >> 
> >>      CanvasData *cd = d->canvasses.value(controller).first();
> >>      foreach(KoToolBase *tool, cd->allTools) {
> >>      
> >>          QHash<QString, KAction*> actions = tool->actions();
> >> 
> >> -        QHash<QString, KAction*>::const_iterator
> >> it(actions.constBegin());
> >> -        for (; it != actions.constEnd(); ++it) {
> >> -            if (!ac->action(it.key()))
> >> -                ac->addAction(it.key(), it.value());
> >> +        QHash<QString, KAction*>::const_iterator
> >> action(actions.constBegin()); +        for (; action !=
> >> actions.constEnd();
> >> ++action) {
> >> +            if (!ac->action(action.key()))
> >> +                ac->addAction(action.key(), action.value());
> >> 
> >>          }
> >>      
> >>      }
> >> 
> >> +
> >> +    // Actions used to switch tools; connect slot to keep button
> >> tooltips
> >> updated foreach(ToolHelper * th, d->tools) {
> >> 
> >>          ToolAction* action = new ToolAction(this, th->id(),
> >>          th->toolTip(),
> >> 
> >> ac); action->setShortcut(th->shortcut());
> >> 
> >>          ac->addAction(th->id(), action);
> >> 
> >> +        th->setAction(action);
> >> +        connect(action, SIGNAL(changed()), th, SLOT(actionUpdated()));
> >> 
> >>      }
> >>  
> >>  }
> >> 
> >> diff --git a/libs/flake/KoToolManager.h b/libs/flake/KoToolManager.h
> >> index 6567346..fa12272 100644
> >> --- a/libs/flake/KoToolManager.h
> >> +++ b/libs/flake/KoToolManager.h
> >> @@ -44,7 +44,7 @@ class QCursor;
> >> 
> >>  /// Struct for the createToolList return type.
> >>  struct KoToolButton {
> >> 
> >> -    QToolButton *button;///< a newly created button.
> >> +    QToolButton *button;    ///< a newly created button.
> >> 
> >>      QString section;        ///< The section the button wants to be in.
> >>      int priority;           ///< Lower number (higher priority) means
> >> 
> >> coming first in the section. int buttonGroupId;      ///< An unique ID
> >> for
> >> this button as passed by changedTool() diff --git
> >> a/libs/flake/KoToolManager_p.cpp b/libs/flake/KoToolManager_p.cpp index
> >> bb0ab1a..c4d7d08 100644
> >> --- a/libs/flake/KoToolManager_p.cpp
> >> +++ b/libs/flake/KoToolManager_p.cpp
> >> @@ -25,24 +25,33 @@
> >> 
> >>  #include <KoToolFactoryBase.h>
> >>  #include <QToolButton>
> >>  #include <kicon.h>
> >> 
> >> +#include <klocale.h>
> >> 
> >>  #include <QtGlobal> // for qrand()
> >> 
> >> -//   ************ ToolHelper **********
> >> +/*    ************ ToolHelper **********
> >> + * This class wrangles the tool factory, toolbox button and switch-tool
> >> action + * for a single tool. It assumes the  will continue to live once
> >> it
> >> is created. + * (Hiding the toolbox is OK.)
> >> + */
> >> +
> >> 
> >>  ToolHelper::ToolHelper(KoToolFactoryBase *tool)
> >> 
> >> +    : m_toolFactory(tool),
> >> +      m_uniqueId((int)qrand()),
> >> +      button(0),
> >> +      action(0)
> >> 
> >>  {
> >> 
> >> -    m_toolFactory = tool;
> >> -    m_uniqueId = (int) qrand();
> >> 
> >>  }
> >>  
> >>  QToolButton* ToolHelper::createButton()
> >>  {
> >> 
> >> -    QToolButton *but = new QToolButton();
> >> -    but->setObjectName(m_toolFactory->id());
> >> -    but->setIcon(KIcon(m_toolFactory->iconName()));
> >> -    but->setToolTip(m_toolFactory->toolTip());
> >> -    connect(but, SIGNAL(clicked()), this, SLOT(buttonPressed()));
> >> -    return but;
> >> +    button = new QToolButton();
> >> +    button->setObjectName(m_toolFactory->id());
> >> +    button->setIcon(KIcon(m_toolFactory->iconName()));
> >> +    button->setToolTip(buttonToolTip());
> >> +
> >> +    connect(button, SIGNAL(clicked()), this, SLOT(buttonPressed()));
> >> +    return button;
> >> 
> >>  }
> >>  
> >>  void ToolHelper::buttonPressed()
> >> 
> >> @@ -65,6 +74,20 @@ QString ToolHelper::toolTip() const
> >> 
> >>      return m_toolFactory->toolTip();
> >>  
> >>  }
> >> 
> >> +QString ToolHelper::buttonToolTip() const
> >> +{
> >> +  return shortcut().isEmpty() ?
> >> +    i18nc("@info:tooltip", "%1", toolTip()) :
> >> +    i18nc("@info:tooltip %2 is shortcut", "%1 (%2)", toolTip(),
> >> +          shortcut().toString());
> >> +}
> >> +
> >> +void ToolHelper::actionUpdated()
> >> +{
> >> +    if (button)
> >> +        button->setToolTip(buttonToolTip());
> >> +}
> >> +
> >> 
> >>  KoToolBase *ToolHelper::createTool(KoCanvasBase *canvas) const
> >>  {
> >>  
> >>      KoToolBase *tool = m_toolFactory->createTool(canvas);
> >> 
> >> @@ -86,9 +109,18 @@ int ToolHelper::priority() const
> >> 
> >>  KShortcut ToolHelper::shortcut() const
> >>  {
> >> 
> >> +    if (action) {
> >> +        return action->shortcut();
> >> +    }
> >> +
> >> 
> >>      return m_toolFactory->shortcut();
> >>  
> >>  }
> >> 
> >> +void ToolHelper::setAction(KAction *a)
> >> +{
> >> +    action = a;
> >> +}
> >> +
> >> 
> >>  //   ************ Connector **********
> >>  Connector::Connector(KoShapeManager *parent)
> >>  
> >>          : QObject(parent),
> >> 
> >> diff --git a/libs/flake/KoToolManager_p.h b/libs/flake/KoToolManager_p.h
> >> index b8ce539..e7e1b0f 100644
> >> --- a/libs/flake/KoToolManager_p.h
> >> +++ b/libs/flake/KoToolManager_p.h
> >> 
> >> @@ -127,19 +127,26 @@ public:
> >>      int uniqueId() const {
> >>      
> >>          return m_uniqueId;
> >>      
> >>      }
> >> 
> >> -    /// wrapper around KoToolFactoryBase::shortcut()
> >> +    /// KAction->shortcut() if it exists, otherwise
> >> KoToolFactoryBase::shortcut() KShortcut shortcut() const;
> >> +    /// Writes a tooltip for a button, appending the keyboard shortcut
> >> if
> >> we have one +    QString buttonToolTip() const;
> >> +    /// Associate an action with this tool
> >> +    void setAction(KAction *a);
> >> 
> >>  Q_SIGNALS:
> >> -    /// emitted when one of the generated buttons was pressed.
> >> +    /// Emitted when the generated toolbox button is pressed.
> >> 
> >>      void toolActivated(ToolHelper *tool);
> >>  
> >>  private Q_SLOTS:
> >>      void buttonPressed();
> >> 
> >> +    void actionUpdated();
> >> 
> >>  private:
> >>      KoToolFactoryBase *m_toolFactory;
> >>      int m_uniqueId;
> >> 
> >> +    QToolButton *button;
> >> +    KAction *action;
> >> 
> >>  };
> >>  
> >>  /// \internal



More information about the calligra-devel mailing list