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


_______________________________________________
calligra-devel mailing list
calligra-devel@kde.org
https://mail.kde.org/mailman/listinfo/calligra-devel

Reply via email to