[graphics/krita] /: Add Kate's commandbar to Krita

Halla Rempt null at kde.org
Thu Feb 4 13:03:57 GMT 2021


Git commit 5c458e1250237ee864451ec804c155a889d712bc by Halla Rempt.
Committed on 04/02/2021 at 13:03.
Pushed by rempt into branch 'master'.

Add Kate's commandbar to Krita

This is a Kate's command bar copied into Krita. The default
shortcut is ctrl+enter. Layers can be activated, too.

CCMAIL:kimageshop at kde.org

M  +1098 -1150 krita/krita.action
M  +2    -0    libs/ui/CMakeLists.txt
M  +39   -1    libs/ui/KisMainWindow.cpp
M  +3    -0    libs/ui/KisMainWindow.h
A  +36   -0    libs/ui/KisNodeActivationActionCreatorVisitor.cpp     [License: GPL(v2.0+)]
A  +96   -0    libs/ui/KisNodeActivationActionCreatorVisitor.h     [License: GPL(v2.0+)]
M  +2    -1    libs/ui/kis_action_manager.cpp
M  +11   -0    libs/ui/kis_node_manager.cpp
M  +9    -0    libs/ui/kis_node_manager.h
M  +3    -0    libs/widgetutils/CMakeLists.txt
A  +67   -0    libs/widgetutils/commandmodel.cpp     [License: LGPL(v2.0+)]
A  +62   -0    libs/widgetutils/commandmodel.h     [License: LGPL(v2.0+)]
A  +409  -0    libs/widgetutils/katecommandbar.cpp     [License: LGPL(v2.0+)]
A  +41   -0    libs/widgetutils/katecommandbar.h     [License: LGPL(v2.0+)]
A  +291  -0    libs/widgetutils/kfts_fuzzy_match.h     [License: LGPL(v2.0+)]
M  +11   -15   plugins/dockers/storyboarddocker/StoryboardDockerDock.cpp

https://invent.kde.org/graphics/krita/commit/5c458e1250237ee864451ec804c155a889d712bc

diff --git a/krita/krita.action b/krita/krita.action
index 3364191466..d78182d5fd 100644
--- a/krita/krita.action
+++ b/krita/krita.action
@@ -3,3593 +3,3541 @@
   <Actions category="General">
     <text>General</text>
     <Action name="open_resources_directory">
-      <icon></icon>
+      <icon/>
       <text>Open Resources Folder</text>
       <whatsThis>Opens a file browser at the location Krita saves resources such as brushes to.</whatsThis>
       <toolTip>Opens a file browser at the location Krita saves resources such as brushes to.</toolTip>
       <iconText>Open Resources Folder</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="windows_cascade">
-      <icon></icon>
+      <icon/>
       <text>C&ascade</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Cascade</toolTip>
       <iconText>Cascade</iconText>
       <activationFlags>10</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="windows_tile">
-      <icon></icon>
+      <icon/>
       <text>&Tile</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Tile</toolTip>
       <iconText>Tile</iconText>
       <activationFlags>10</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="create_bundle">
-      <icon></icon>
+      <icon/>
       <text>Create Resource Bundle...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Create Resource Bundle</toolTip>
       <iconText>Create Resource Bundle</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="mainToolBar">
-      <icon></icon>
+      <icon/>
       <text>Show File Toolbar</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Show File Toolbar</toolTip>
       <iconText>Show File Toolbar</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="show_color_selector">
-      <icon></icon>
+      <icon/>
       <text>Show color selector</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Show color selector</toolTip>
       <iconText>Show color selector</iconText>
       <shortcut>Shift+I</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="show_mypaint_shade_selector">
-      <icon></icon>
+      <icon/>
       <text>Show MyPaint shade selector</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Show MyPaint shade selector</toolTip>
       <iconText>Show MyPaint shade selector</iconText>
       <shortcut>Shift+M</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="show_minimal_shade_selector">
-      <icon></icon>
+      <icon/>
       <text>Show minimal shade selector</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Show minimal shade selector</toolTip>
       <iconText>Show minimal shade selector</iconText>
       <shortcut>Shift+N</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="show_color_history">
-      <icon></icon>
+      <icon/>
       <text>Show color history</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Show color history</toolTip>
       <iconText>Show color history</iconText>
       <shortcut>H</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="show_common_colors">
-      <icon></icon>
+      <icon/>
       <text>Show common colors</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Show common colors</toolTip>
       <iconText>Show common colors</iconText>
       <shortcut>U</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="show_tool_options">
-      <icon></icon>
+      <icon/>
       <text>Show Tool Options</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Show Tool Options</toolTip>
       <iconText>Show Tool Options</iconText>
       <shortcut>\</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="show_brush_editor">
-      <icon></icon>
+      <icon/>
       <text>Show Brush Editor</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Show Brush Editor</toolTip>
       <iconText>Show Brush Editor</iconText>
       <shortcut>F5</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="show_brush_presets">
-      <icon></icon>
+      <icon/>
       <text>Show Brush Presets</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Show Brush Presets</toolTip>
       <iconText>Show Brush Presets</iconText>
       <shortcut>F6</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="tablet_debugger">
-      <icon></icon>
+      <icon/>
       <text>Toggle Tablet Debugger</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Toggle Tablet Debugger</toolTip>
       <iconText>Toggle Tablet Debugger</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Ctrl+Shift+T</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
-
-
     <Action name="buginfo">
-      <icon></icon>
+      <icon/>
       <text>Show Krita log for bug reports.</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Show Krita log for bug reports.</toolTip>
       <iconText>Show Krita log for bug reports.</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="sysinfo">
-      <icon></icon>
-
-
+      <icon/>
       <text>Show system information for bug reports.</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Show system information for bug reports.</toolTip>
       <iconText>Show system information for bug reports.</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
+    </Action>
+    <Action name="command_bar_open">
+      <icon/>
+      <text>Search Actions</text>
+      <whatsThis/>
+      <toolTip>Open the command bar to search through actions.</toolTip>
+      <iconText>Search Actions.</iconText>
+      <shortcut>Ctrl+Enter</shortcut>
+      <isCheckable>false</isCheckable>
+      <statusTip/>
     </Action>
-
-
     <Action name="rename_composition">
-      <icon></icon>
+      <icon/>
       <text>Rename Composition...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Rename Composition</toolTip>
       <iconText>Rename Composition</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="update_composition">
-      <icon></icon>
+      <icon/>
       <text>Update Composition</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Update Composition</toolTip>
       <iconText>Update Composition</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="ruler_pixel_multiple2">
-      <icon></icon>
+      <icon/>
       <text>Use multiple of 2 for pixel scale</text>
       <whatsThis>Use multiple of 2 for pixel scale</whatsThis>
       <toolTip>Use multiple of 2 for pixel scale</toolTip>
       <iconText>Use multiple of 2 for pixel scale</iconText>
       <activationFlags>1</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>true</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="invert_selection">
-      <icon></icon>
+      <icon/>
       <text>&Invert Selection</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Invert current selection</toolTip>
       <iconText>Invert Selection</iconText>
       <activationFlags>10000000000</activationFlags>
       <activationConditions>100</activationConditions>
       <shortcut>Ctrl+Shift+I</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="create_snapshot">
-      <icon></icon>
+      <icon/>
       <text>Create Snapshot</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Create Snapshot</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>1</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="switchto_snapshot">
-      <icon></icon>
+      <icon/>
       <text>Switch to Selected Snapshot</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Switch to selected snapshot</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>1</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="remove_snapshot">
-      <icon></icon>
+      <icon/>
       <text>Remove Selected Snapshot</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Remove Selected Snapshot</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>1</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
   </Actions>
-
   <Actions category="Painting">
     <text>Painting</text>
     <Action name="make_brush_color_lighter">
       <icon>lightness-increase</icon>
       <text>Make brush color lighter</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Make brush color lighter</toolTip>
       <iconText>Make brush color lighter</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>L</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="make_brush_color_darker">
       <icon>lightness-decrease</icon>
       <text>Make brush color darker</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Make brush color darker</toolTip>
       <iconText>Make brush color darker</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>K</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="make_brush_color_saturated">
-      <icon></icon>
+      <icon/>
       <text>Make brush color more saturated</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Make brush color more saturated</toolTip>
       <iconText>Make brush color more saturated</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="make_brush_color_desaturated">
-      <icon></icon>
+      <icon/>
       <text>Make brush color more desaturated</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Make brush color more desaturated</toolTip>
       <iconText>Make brush color more desaturated</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="shift_brush_color_clockwise">
-      <icon></icon>
+      <icon/>
       <text>Shift brush color hue clockwise</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Shift brush color hue clockwise</toolTip>
       <iconText>Shift brush color hue clockwise</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="shift_brush_color_counter_clockwise">
-      <icon></icon>
+      <icon/>
       <text>Shift brush color hue counter-clockwise</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Shift brush color hue counter-clockwise</toolTip>
       <iconText>Shift brush color hue counter-clockwise</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="make_brush_color_redder">
-      <icon></icon>
+      <icon/>
       <text>Make brush color more red</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Make brush color more red</toolTip>
       <iconText>Make brush color more red</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="make_brush_color_greener">
-      <icon></icon>
+      <icon/>
       <text>Make brush color more green</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Make brush color more green</toolTip>
       <iconText>Make brush color more green</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="make_brush_color_bluer">
-      <icon></icon>
+      <icon/>
       <text>Make brush color more blue</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Make brush color more blue</toolTip>
       <iconText>Make brush color more blue</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="make_brush_color_yellower">
-      <icon></icon>
-    <text>Make brush color more yellow</text>
-      <whatsThis></whatsThis>
+      <icon/>
+      <text>Make brush color more yellow</text>
+      <whatsThis/>
       <toolTip>Make brush color more yellow</toolTip>
       <iconText>Make brush color more yellow</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="increase_opacity">
       <icon>opacity-increase</icon>
       <text>Increase opacity</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Increase opacity</toolTip>
       <iconText>Increase opacity</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>O</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="decrease_opacity">
       <icon>opacity-decrease</icon>
       <text>Decrease opacity</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Decrease opacity</toolTip>
       <iconText>Decrease opacity</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>I</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="erase_action">
       <icon>draw-eraser</icon>
       <text>Set eraser mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Set eraser mode</toolTip>
       <iconText>Set eraser mode</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>E</shortcut>
       <isCheckable>true</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="reload_preset_action">
       <icon>view-refresh</icon>
       <text>Reload Original Preset</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Reload Original Preset</toolTip>
       <iconText>Reload Original Preset</iconText>
       <activationFlags>10000</activationFlags>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="preserve_alpha">
       <icon>transparency-unlocked</icon>
       <text>Preserve Alpha</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Preserve Alpha</toolTip>
       <iconText>Preserve Alpha</iconText>
       <activationFlags>10000</activationFlags>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>true</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="disable_pressure">
       <icon>transform_icons_penPressure</icon>
       <text>Use Pen Pressure</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Use Pen Pressure</toolTip>
       <iconText>Use Pen Pressure</iconText>
       <activationFlags>10000</activationFlags>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>true</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="hmirror_action">
       <icon>symmetry-horizontal</icon>
       <text>Horizontal Mirror Tool</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Horizontal Mirror Tool</toolTip>
       <iconText>Horizontal Mirror Tool</iconText>
       <activationFlags>0</activationFlags>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>true</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="vmirror_action">
       <icon>symmetry-vertical</icon>
       <text>Vertical Mirror Tool</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Vertical Mirror Tool</toolTip>
       <iconText>Vertical Mirror Tool</iconText>
       <activationFlags>0</activationFlags>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>true</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="mirrorX-hideDecorations">
-      <icon></icon>
+      <icon/>
       <text>Hide Mirror X Line</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Hide Mirror X Line</toolTip>
       <iconText>Hide Mirror X Line</iconText>
       <activationFlags>10000</activationFlags>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>true</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="mirrorY-hideDecorations">
-      <icon></icon>
+      <icon/>
       <text>Hide Mirror Y Line</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Hide Mirror Y Line</toolTip>
       <iconText>Hide Mirror Y Line</iconText>
       <activationFlags>10000</activationFlags>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>true</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-   <Action name="mirrorX-lock">
-      <icon></icon>
+    <Action name="mirrorX-lock">
+      <icon/>
       <text>Lock X Line</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Lock X Line</toolTip>
       <iconText>Lock X Line</iconText>
       <activationFlags>10000</activationFlags>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>true</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-   <Action name="mirrorY-lock">
-      <icon></icon>
+    <Action name="mirrorY-lock">
+      <icon/>
       <text>Lock Y Line</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Lock Y Line</toolTip>
       <iconText>Lock Y Line</iconText>
       <activationFlags>10000</activationFlags>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>true</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-   <Action name="mirrorX-moveToCenter">
-      <icon></icon>
+    <Action name="mirrorX-moveToCenter">
+      <icon/>
       <text>Move to Canvas Center X</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Move to Canvas Center X</toolTip>
       <iconText>Move to Canvas Center X</iconText>
       <activationFlags>10000</activationFlags>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="mirrorY-moveToCenter">
-      <icon></icon>
+      <icon/>
       <text>Move to Canvas Center Y</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Move to Canvas Center Y</toolTip>
       <iconText>Move to Canvas Center Y</iconText>
       <activationFlags>10000</activationFlags>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="toggle-selection-overlay-mode">
-      <icon></icon>
+      <icon/>
       <text>&Toggle Selection Display Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Toggle Selection Display Mode</toolTip>
       <iconText>Toggle Selection Display Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="next_favorite_preset">
-      <icon></icon>
+      <icon/>
       <text>Next Favourite Preset</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Next Favourite Preset</toolTip>
       <iconText>Next Favourite Preset</iconText>
       <shortcut>,</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="previous_favorite_preset">
-      <icon></icon>
+      <icon/>
       <text>Previous Favourite Preset</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Previous Favourite Preset</toolTip>
       <iconText>Previous Favourite Preset</iconText>
       <shortcut>.</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="previous_preset">
       <icon>preset-switcher</icon>
       <text>Switch to Previous Preset</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Switch to Previous Preset</toolTip>
       <iconText>Switch to Previous Preset</iconText>
       <shortcut>/</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="BrushesAndStuff">
-      <icon></icon>
+      <icon/>
       <text>Hide Brushes and Stuff Toolbar</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Hide Brushes and Stuff Toolbar</toolTip>
       <iconText>Hide Brushes and Stuff Toolbar</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>true</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="reset_fg_bg">
-      <icon></icon>
+      <icon/>
       <text>Reset Foreground and Background Color</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Reset Foreground and Background Color</toolTip>
       <iconText>Reset Foreground and Background Color</iconText>
       <shortcut>D</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="toggle_fg_bg">
-      <icon></icon>
+      <icon/>
       <text>Swap Foreground and Background Color</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Swap Foreground and Background Color</toolTip>
       <iconText>Swap Foreground and Background Color</iconText>
       <shortcut>X</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="selection_tool_mode_add">
-      <icon></icon>
+      <icon/>
       <text>Selection Mode: Add</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Selection Mode: Add</toolTip>
       <iconText>Selection Mode: Add</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="selection_tool_mode_subtract">
-      <icon></icon>
+      <icon/>
       <text>Selection Mode: Subtract</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Selection Mode: Subtract</toolTip>
       <iconText>Selection Mode: Subtract</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="selection_tool_mode_intersect">
-      <icon></icon>
+      <icon/>
       <text>Selection Mode: Intersect</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Selection Mode: Intersect</toolTip>
       <iconText>Selection Mode: Intersect</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="selection_tool_mode_replace">
-      <icon></icon>
+      <icon/>
       <text>Selection Mode: Replace</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Selection Mode: Replace</toolTip>
       <iconText>Selection Mode: Replace</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="set_weighted_brush_smoothing">
       <icon>smoothing-weighted</icon>
       <text>Brush Smoothing: Weighted</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Brush Smoothing: Weighted</toolTip>
       <iconText>Brush Smoothing: Weighted</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="set_no_brush_smoothing">
       <icon>smoothing-no</icon>
       <text>Brush Smoothing: Disabled</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Brush Smoothing: Disabled</toolTip>
       <iconText>Brush Smoothing: Disabled</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="set_stabilizer_brush_smoothing">
       <icon>smoothing-stabilizer</icon>
       <text>Brush Smoothing: Stabilizer</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Brush Smoothing: Stabilizer</toolTip>
       <iconText>Brush Smoothing: Stabilizer</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="decrease_brush_size">
       <icon>brushsize-decrease</icon>
       <text>Decrease Brush Size</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Decrease Brush Size</toolTip>
       <iconText>Decrease Brush Size</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>[</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="set_simple_brush_smoothing">
       <icon>smoothing-basic</icon>
       <text>Brush Smoothing: Basic</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Brush Smoothing: Basic</toolTip>
       <iconText>Brush Smoothing: Basic</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="increase_brush_size">
       <icon>brushsize-increase</icon>
       <text>Increase Brush Size</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Increase Brush Size</toolTip>
       <iconText>Increase Brush Size</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>]</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="toggle_assistant">
-      <icon></icon>
+      <icon/>
       <text>Toggle Snap To Assistants</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Toggle Snap to Assistants</toolTip>
       <iconText>ToggleAssistant</iconText>
       <shortcut>Ctrl+Shift+L</shortcut>
       <isCheckable>true</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="undo_polygon_selection">
-      <icon></icon>
+      <icon/>
       <text>Undo Polygon Selection Points</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Undo Polygon Selection Points</toolTip>
       <iconText>Undo Polygon Selection Points</iconText>
       <shortcut>Shift+Z</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="fill_selection_foreground_color_opacity">
-      <icon></icon>
+      <icon/>
       <text>Fill with Foreground Color (Opacity)</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Fill with Foreground Color (Opacity)</toolTip>
       <iconText>Fill with Foreground Color (Opacity)</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>1</activationConditions>
       <shortcut>Ctrl+Shift+Backspace</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="fill_selection_background_color_opacity">
-      <icon></icon>
+      <icon/>
       <text>Fill with Background Color (Opacity)</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Fill with Background Color (Opacity)</toolTip>
       <iconText>Fill with Background Color (Opacity)</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>1</activationConditions>
       <shortcut>Ctrl+Backspace</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="fill_selection_pattern_opacity">
-      <icon></icon>
+      <icon/>
       <text>Fill with Pattern (Opacity)</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Fill with Pattern (Opacity)</toolTip>
       <iconText>Fill with Pattern (Opacity)</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>1</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="convert_selection_to_shape">
-      <icon></icon>
+      <icon/>
       <text>Convert &to Shape</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Convert to Shape</toolTip>
       <iconText>Convert to Shape</iconText>
       <activationFlags>10000000000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="show-global-selection-mask">
-      <icon></icon>
+      <icon/>
       <text>&Show Global Selection Mask</text>
-      <whatsThis></whatsThis>
-      <toolTip>Shows global selection as a usual selection mask in <interface>Layers</interface> docker</toolTip>
+      <whatsThis/>
+      <toolTip>Shows global selection as a usual selection mask in <interface>Layers</interface> docker</toolTip>
       <iconText>Show Global Selection Mask</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>100</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>true</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
   </Actions>
-
   <Actions category="Filters">
     <text>Filters</text>
     <Action name="krita_filter_colortoalpha">
       <icon>color-to-alpha</icon>
       <text>&Color to Alpha...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Color to Alpha</toolTip>
       <iconText>Color to Alpha</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_top edge detections">
-      <icon></icon>
+      <icon/>
       <text>&Top Edge Detection</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Top Edge Detection</toolTip>
       <iconText>Top Edge Detection</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_indexcolors">
-      <icon></icon>
+      <icon/>
       <text>&Index Colors...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Index Colors</toolTip>
       <iconText>Index Colors</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_emboss horizontal only">
-      <icon></icon>
+      <icon/>
       <text>Emboss Horizontal &Only</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Emboss Horizontal Only</toolTip>
       <iconText>Emboss Horizontal Only</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_dodge">
-      <icon></icon>
+      <icon/>
       <text>D&odge</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Dodge</toolTip>
       <iconText>Dodge</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_sharpen">
-      <icon></icon>
+      <icon/>
       <text>&Sharpen</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Sharpen</toolTip>
       <iconText>Sharpen</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_burn">
-      <icon></icon>
+      <icon/>
       <text>B&urn</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Burn</toolTip>
       <iconText>Burn</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_mean removal">
-      <icon></icon>
+      <icon/>
       <text>&Mean Removal</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Mean Removal</toolTip>
       <iconText>Mean Removal</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_gaussian blur">
-      <icon></icon>
+      <icon/>
       <text>&Gaussian Blur...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Gaussian Blur</toolTip>
       <iconText>Gaussian Blur</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_emboss all directions">
-      <icon></icon>
+      <icon/>
       <text>Emboss &in All Directions</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Emboss in All Directions</toolTip>
       <iconText>Emboss in All Directions</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_smalltiles">
-      <icon></icon>
+      <icon/>
       <text>&Small Tiles...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Small Tiles</toolTip>
       <iconText>Small Tiles</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_levels">
-      <icon></icon>
+      <icon/>
       <text>&Levels...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Levels</toolTip>
       <iconText>Levels</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Ctrl+L</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_sobel">
-      <icon></icon>
+      <icon/>
       <text>&Sobel...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Sobel</toolTip>
       <iconText>Sobel</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_wave">
-      <icon></icon>
+      <icon/>
       <text>&Wave...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Wave</toolTip>
       <iconText>Wave</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_motion blur">
-      <icon></icon>
+      <icon/>
       <text>&Motion Blur...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Motion Blur</toolTip>
       <iconText>Motion Blur</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_invert">
-      <icon></icon>
+      <icon/>
       <text>&Invert</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Invert</toolTip>
       <iconText>Invert</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Ctrl+I</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_perchannel">
-      <icon></icon>
+      <icon/>
       <text>&Color Adjustment curves...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Color Adjustment curves</toolTip>
       <iconText>Color Adjustment curves</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Ctrl+M</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_pixelize">
-      <icon></icon>
+      <icon/>
       <text>Pi&xelize...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Pixelize</toolTip>
       <iconText>Pixelize</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_emboss laplascian">
-      <icon></icon>
+      <icon/>
       <text>Emboss (&Laplacian)</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Emboss (Laplacian)</toolTip>
       <iconText>Emboss (Laplacian)</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_left edge detections">
-      <icon></icon>
+      <icon/>
       <text>&Left Edge Detection</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Left Edge Detection</toolTip>
       <iconText>Left Edge Detection</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_blur">
-      <icon></icon>
+      <icon/>
       <text>&Blur...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Blur</toolTip>
       <iconText>Blur</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_raindrops">
-      <icon></icon>
+      <icon/>
       <text>&Raindrops...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Raindrops</toolTip>
       <iconText>Raindrops</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_bottom edge detections">
-      <icon></icon>
+      <icon/>
       <text>&Bottom Edge Detection</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Bottom Edge Detection</toolTip>
       <iconText>Bottom Edge Detection</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_noise">
-      <icon></icon>
+      <icon/>
       <text>&Random Noise...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Random Noise</toolTip>
       <iconText>Random Noise</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_brightnesscontrast">
-      <icon></icon>
+      <icon/>
       <text>&Brightness/Contrast curve...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Brightness/Contrast curve</toolTip>
       <iconText>Brightness/Contrast curve</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_colorbalance">
-      <icon></icon>
+      <icon/>
       <text>Colo&r Balance...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Color Balance</toolTip>
       <iconText>Color Balance</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Ctrl+B</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_phongbumpmap">
-      <icon></icon>
+      <icon/>
       <text>&Phong Bumpmap...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Phong Bumpmap</toolTip>
       <iconText>Phong Bumpmap</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_desaturate">
-      <icon></icon>
+      <icon/>
       <text>&Desaturate</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Desaturate</toolTip>
       <iconText>Desaturate</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Ctrl+Shift+U</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_colortransfer">
-      <icon></icon>
+      <icon/>
       <text>Color &Transfer...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Color Transfer</toolTip>
       <iconText>Color Transfer</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_emboss vertical only">
-      <icon></icon>
+      <icon/>
       <text>Emboss &Vertical Only</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Emboss Vertical Only</toolTip>
       <iconText>Emboss Vertical Only</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_lens blur">
-      <icon></icon>
+      <icon/>
       <text>&Lens Blur...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Lens Blur</toolTip>
       <iconText>Lens Blur</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_minimize">
-      <icon></icon>
+      <icon/>
       <text>M&inimize Channel</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Minimize Channel</toolTip>
       <iconText>Minimize Channel</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_maximize">
-      <icon></icon>
+      <icon/>
       <text>M&aximize Channel</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Maximize Channel</toolTip>
       <iconText>Maximize Channel</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_oilpaint">
-      <icon></icon>
+      <icon/>
       <text>&Oilpaint...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Oilpaint</toolTip>
       <iconText>Oilpaint</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_right edge detections">
-      <icon></icon>
+      <icon/>
       <text>&Right Edge Detection</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Right Edge Detection</toolTip>
       <iconText>Right Edge Detection</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_autocontrast">
-      <icon></icon>
+      <icon/>
       <text>&Auto Contrast</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Auto Contrast</toolTip>
       <iconText>Auto Contrast</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_roundcorners">
-      <icon></icon>
+      <icon/>
       <text>&Round Corners...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Round Corners</toolTip>
       <iconText>Round Corners</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_unsharp">
-      <icon></icon>
+      <icon/>
       <text>&Unsharp Mask...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Unsharp Mask</toolTip>
       <iconText>Unsharp Mask</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_emboss">
-      <icon></icon>
+      <icon/>
       <text>&Emboss with Variable Depth...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Emboss with Variable Depth</toolTip>
       <iconText>Emboss with Variable Depth</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_emboss horizontal and vertical">
-      <icon></icon>
+      <icon/>
       <text>Emboss &Horizontal && Vertical</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Emboss Horizontal & Vertical</toolTip>
       <iconText>Emboss Horizontal & Vertical</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_randompick">
-      <icon></icon>
+      <icon/>
       <text>Random &Pick...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Random Pick</toolTip>
       <iconText>Random Pick</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_gaussiannoisereducer">
-      <icon></icon>
+      <icon/>
       <text>&Gaussian Noise Reduction...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Gaussian Noise Reduction</toolTip>
       <iconText>Gaussian Noise Reduction</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_posterize">
-      <icon></icon>
+      <icon/>
       <text>&Posterize...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Posterize</toolTip>
       <iconText>Posterize</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_waveletnoisereducer">
-      <icon></icon>
+      <icon/>
       <text>&Wavelet Noise Reducer...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Wavelet Noise Reducer</toolTip>
       <iconText>Wavelet Noise Reducer</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="krita_filter_hsvadjustment">
-      <icon></icon>
+      <icon/>
       <text>&HSV Adjustment...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>HSV Adjustment</toolTip>
       <iconText>HSV Adjustment</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Ctrl+U</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
   </Actions>
-
   <Actions category="tool-shortcuts">
     <text>Tool Shortcuts</text>
     <Action name="KritaShape/KisToolDyna">
       <icon>krita_tool_dyna</icon>
       <text>Dynamic Brush Tool</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Dynamic Brush Tool</toolTip>
       <iconText>Dynamic Brush Tool</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="KritaShape/KisToolRectangle">
       <icon>krita_tool_rectangle</icon>
       <text>Rectangle Tool</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Rectangle Tool</toolTip>
       <iconText>Rectangle Tool</iconText>
       <shortcut>Shift+R</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="KritaShape/KisToolMultiBrush">
       <icon>krita_tool_multihand</icon>
       <text>Multibrush Tool</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Multibrush Tool</toolTip>
       <iconText>Multibrush Tool</iconText>
       <shortcut>Q</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="KritaShape/KisToolLazyBrush">
       <icon>krita_tool_lazybrush</icon>
       <text>Colorize Mask Tool</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Colorize Mask Tool</toolTip>
       <iconText>Colorize Mask Tool</iconText>
-      <shortcut></shortcut>
-      <statusTip></statusTip>
+      <shortcut/>
+      <statusTip/>
     </Action>
     <Action name="KritaShape/KisToolSmartPatch">
       <icon>krita_tool_smart_patch</icon>
       <text>Smart Patch Tool</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Smart Patch Tool</toolTip>
       <iconText>Smart Patch Tool</iconText>
-      <shortcut></shortcut>
-      <statusTip></statusTip>
+      <shortcut/>
+      <statusTip/>
     </Action>
     <Action name="PanTool">
       <icon>tool_pan</icon>
       <text>Pan Tool</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Pan Tool</toolTip>
       <iconText>Pan Tool</iconText>
-      <shortcut></shortcut>
-      <statusTip></statusTip>
+      <shortcut/>
+      <statusTip/>
     </Action>
     <Action name="InteractionTool">
       <icon>select</icon>
       <text>Select Shapes Tool</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Shapes Tool</toolTip>
       <iconText>Select Shapes Tool</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="KritaSelected/KisToolColorSampler">
       <icon>krita_tool_color_sampler</icon>
       <text>Color Sampler</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Sample a color from the image or current layer</toolTip>
       <iconText>Color Sampler</iconText>
       <shortcut>P</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="KritaFill/KisToolFill">
       <icon>krita_tool_color_fill</icon>
       <text>Fill Tool</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Fill a contiguous area of color with a color, or fill a selection.</toolTip>
       <iconText>Fill</iconText>
       <shortcut>F</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="KritaShape/KisToolLine">
       <icon>krita_tool_line</icon>
       <text>Line Tool</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Line Tool</toolTip>
       <iconText>Line Tool</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="KritaShape/KisToolEllipse">
       <icon>krita_tool_ellipse</icon>
       <text>Ellipse Tool</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Ellipse Tool</toolTip>
       <iconText>Ellipse Tool</iconText>
       <shortcut>Shift+J</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="KritaShape/KisToolBrush">
       <icon>krita_tool_freehand</icon>
       <text>Freehand Brush Tool</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Freehand Brush Tool</toolTip>
       <iconText>Freehand Brush Tool</iconText>
       <shortcut>B</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="KritaFill/KisToolGradient">
       <icon>krita_tool_gradient</icon>
       <text>Gradient Tool</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Draw a gradient.</toolTip>
       <iconText>Gradient Tool</iconText>
       <shortcut>G</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="KritaShape/KisToolMeasure">
       <icon>krita_tool_measure</icon>
       <text>Measurement Tool</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Measure the distance between two points</toolTip>
       <iconText>Measurement Tool</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="KritaTransform/KisToolMove">
       <icon>krita_tool_move</icon>
       <text>Move Tool</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Move a layer</toolTip>
       <iconText>Move Tool</iconText>
       <shortcut>T</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="KarbonCalligraphyTool">
       <icon>calligraphy</icon>
       <text>Calligraphy</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Calligraphy</toolTip>
       <iconText>Calligraphy</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="PathTool">
       <icon>krita_draw_path</icon>
       <text>Edit Shapes Tool</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Edit Shapes Tool</toolTip>
       <iconText>Edit Shapes Tool</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="ZoomTool">
       <icon>tool_zoom</icon>
       <text>Zoom Tool</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Zoom Tool</toolTip>
       <iconText>Zoom Tool</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="ToolReferenceImages">
       <icon>krita_tool_reference_images</icon>
       <text>Reference Images Tool</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Reference Images Tool</toolTip>
       <iconText>Reference Images Tool</iconText>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
   </Actions>
-
   <Actions category="Blending Modes">
     <text>Blending Modes</text>
-
     <Action name="Next Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Next Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Next Blending Mode</toolTip>
       <iconText>Next Blending Mode</iconText>
       <shortcut>Alt+Shift++</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="Previous Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Previous Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Previous Blending Mode</toolTip>
       <iconText>Previous Blending Mode</iconText>
       <shortcut>Alt+Shift+-</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="Select Normal Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Normal Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Normal Blending Mode</toolTip>
       <iconText>Select Normal Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+N</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="Select Dissolve Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Dissolve Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Dissolve Blending Mode</toolTip>
       <iconText>Select Dissolve Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+I</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="Select Behind Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Behind Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Behind Blending Mode</toolTip>
       <iconText>Select Behind Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+Q</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="Select Clear Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Clear Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Clear Blending Mode</toolTip>
       <iconText>Select Clear Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+R</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="Select Darken Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Darken Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Darken Blending Mode</toolTip>
       <iconText>Select Darken Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+K</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="Select Multiply Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Multiply Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Multiply Blending Mode</toolTip>
       <iconText>Select Multiply Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+M</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="Select Color Burn Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Color Burn Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Color Burn Blending Mode</toolTip>
       <iconText>Select Color Burn Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+B</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="Select Linear Burn Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Linear Burn Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Linear Burn Blending Mode</toolTip>
       <iconText>Select Linear Burn Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+A</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="Select Lighten Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Lighten Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Lighten Blending Mode</toolTip>
       <iconText>Select Lighten Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+G</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="Select Screen Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Screen Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Screen Blending Mode</toolTip>
       <iconText>Select Screen Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+S</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="Select Color Dodge Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Color Dodge Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Color Dodge Blending Mode</toolTip>
       <iconText>Select Color Dodge Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+D</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="Select Linear Dodge Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Linear Dodge Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Linear Dodge Blending Mode</toolTip>
       <iconText>Select Linear Dodge Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+W</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="Select Overlay Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Overlay Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Overlay Blending Mode</toolTip>
       <iconText>Select Overlay Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+O</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="Select Hard Overlay Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Hard Overlay Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Hard Overlay Blending Mode</toolTip>
       <iconText>Select Hard Overlay Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+P</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="Select Soft Light Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Soft Light Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Soft Light Blending Mode</toolTip>
       <iconText>Select Soft Light Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+F</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="Select Hard Light Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Hard Light Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Hard Light Blending Mode</toolTip>
       <iconText>Select Hard Light Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+H</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="Select Vivid Light Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Vivid Light Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Vivid Light Blending Mode</toolTip>
       <iconText>Select Vivid Light Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+V</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="Select Linear Light Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Linear Light Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Linear Light Blending Mode</toolTip>
       <iconText>Select Linear Light Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+J</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="Select Pin Light Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Pin Light Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Pin Light Blending Mode</toolTip>
       <iconText>Select Pin Light Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+Z</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="Select Hard Mix Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Hard Mix Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Hard Mix Blending Mode</toolTip>
       <iconText>Select Hard Mix Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+L</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="Select Difference Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Difference Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Difference Blending Mode</toolTip>
       <iconText>Select Difference Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+E</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="Select Exclusion Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Exclusion Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Exclusion Blending Mode</toolTip>
       <iconText>Select Exclusion Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+X</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="Select Hue Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Hue Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Hue Blending Mode</toolTip>
       <iconText>Select Hue Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+U</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="Select Saturation Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Saturation Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Saturation Blending Mode</toolTip>
       <iconText>Select Saturation Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+T</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="Select Color Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Color Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Color Blending Mode</toolTip>
       <iconText>Select Color Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+C</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="Select Luminosity Blending Mode">
-      <icon></icon>
+      <icon/>
       <text>Select Luminosity Blending Mode</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select Luminosity Blending Mode</toolTip>
       <iconText>Select Luminosity Blending Mode</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Alt+Shift+Y</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
   </Actions>
-
   <Actions category="Animation">
     <text>Animation</text>
     <Action name="previous_frame">
       <icon>prevframe</icon>
       <text>Previous Frame</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Move selection to previous frame</toolTip>
       <iconText>Move selection to previous frame</iconText>
       <activationFlags>1</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="next_frame">
       <icon>nextframe</icon>
       <text>Next Frame</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Move selection to next frame</toolTip>
       <iconText>Move selection to next frame</iconText>
       <activationFlags>1</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="previous_keyframe">
       <icon>prevkeyframe</icon>
       <text>Previous Keyframe</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Move selection to previous keyframe</toolTip>
       <iconText>Move selection to previous keyframe</iconText>
       <activationFlags>1</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="next_keyframe">
       <icon>nextkeyframe</icon>
       <text>Next Keyframe</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Move selection to next keyframe</toolTip>
       <iconText>Move selection to next keyframe</iconText>
       <activationFlags>1</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="previous_matching_keyframe">
       <icon>prevkeyframe</icon>
       <text>Previous Matching Keyframe</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Move selection to previous keyframe of the same color</toolTip>
       <iconText>Move selection to previous matching keyframe</iconText>
       <activationFlags>1</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="next_matching_keyframe">
       <icon>nextkeyframe</icon>
       <text>Next Matching Keyframe</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Move selection to next keyframe of the same color</toolTip>
       <iconText>Move selection to next matching keyframe</iconText>
       <activationFlags>1</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="toggle_playback">
       <icon>animation_play</icon>
       <text>Play / pause animation</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Play / pause animation</toolTip>
       <iconText>Play / pause animation</iconText>
       <activationFlags>1</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="stop_playback">
       <icon>animation_stop</icon>
       <text>Stop animation</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Stop animation</toolTip>
       <iconText>Stop animation</iconText>
       <activationFlags>1</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-       <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="add_blank_frame">
       <icon>addblankframe</icon>
       <text>Create Blank Frame</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Add blank frame</toolTip>
       <iconText>Add blank frame</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="add_duplicate_frame">
       <icon>addduplicateframe</icon>
       <text>Create Duplicate Frame</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Add duplicate frame</toolTip>
       <iconText>Add duplicate frame</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="toggle_onion_skin">
-      <icon></icon>
+      <icon/>
       <text>Toggle onion skin</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Toggle onion skin</toolTip>
       <iconText>Toggle onion skin</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="first_frame">
-      <icon></icon>
+      <icon/>
       <text>First Frame</text>
-      <whatsThis></whatsThis>
-      <toolTip></toolTip>
-      <iconText></iconText>
-      <shortcut></shortcut>
+      <whatsThis/>
+      <toolTip/>
+      <iconText/>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="last_frame">
-      <icon></icon>
+      <icon/>
       <text>Last Frame</text>
-      <whatsThis></whatsThis>
-      <toolTip></toolTip>
-      <iconText></iconText>
-      <shortcut></shortcut>
+      <whatsThis/>
+      <toolTip/>
+      <iconText/>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="auto_key">
-      <icon></icon>
+      <icon/>
       <text>Auto Frame Mode</text>
-      <whatsThis></whatsThis>
-      <toolTip></toolTip>
-      <iconText></iconText>
-      <shortcut></shortcut>
+      <whatsThis/>
+      <toolTip/>
+      <iconText/>
+      <shortcut/>
       <isCheckable>true</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="drop_frames">
       <icon>dropframe</icon>
       <text>Drop Frames
 Enable to preserve playback timing.</text>
-      <whatsThis></whatsThis>
-      <toolTip></toolTip>
-      <iconText></iconText>
-      <shortcut></shortcut>
+      <whatsThis/>
+      <toolTip/>
+      <iconText/>
+      <shortcut/>
       <isCheckable>true</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="pin_to_timeline">
-      <icon></icon>
+      <icon/>
       <text>Pin to Timeline</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>If checked, layer becomes pinned to the timeline, making it visible even when inactive.</toolTip>
-      <iconText></iconText>
-      <shortcut></shortcut>
+      <iconText/>
+      <shortcut/>
       <isCheckable>true</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="insert_keyframe_left">
-      <icon></icon>
+      <icon/>
       <text>Insert Keyframe Left</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Insert keyframes to the left of selection, moving the tail of animation to the right.</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="insert_keyframe_right">
-      <icon></icon>
+      <icon/>
       <text>Insert Keyframe Right</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Insert keyframes to the right of selection, moving the tail of animation to the right.</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="insert_multiple_keyframes">
-      <icon></icon>
+      <icon/>
       <text>Insert Multiple Keyframes</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Insert several keyframes based on user parameters.</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="remove_frames_and_pull">
-      <icon></icon>
+      <icon/>
       <text>Remove Frame and Pull</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Remove keyframes moving the tail of animation to the left</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="remove_frames">
       <icon>deletekeyframe</icon>
       <text>Remove Keyframe</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Remove keyframes without moving anything around</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="insert_column_left">
-      <icon></icon>
+      <icon/>
       <text>Insert Column Left</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Insert column to the left of selection, moving the tail of animation to the right</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="insert_column_right">
-      <icon></icon>
+      <icon/>
       <text>Insert Column Right</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Insert column to the right of selection, moving the tail of animation to the right</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="insert_multiple_columns">
-      <icon></icon>
+      <icon/>
       <text>Insert Multiple Columns</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Insert several columns based on user parameters.</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="remove_columns_and_pull">
-      <icon></icon>
+      <icon/>
       <text>Remove Column and Pull</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Remove columns moving the tail of animation to the left</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="remove_columns">
-      <icon></icon>
+      <icon/>
       <text>Remove Column</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Remove columns without moving anything around</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="insert_hold_frame">
-      <icon></icon>
+      <icon/>
       <text>Insert Hold Frame</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Insert a hold frame after every keyframe</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="insert_multiple_hold_frames">
-      <icon></icon>
+      <icon/>
       <text>Insert Multiple Hold Frames</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Insert N hold frames after every keyframe</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="remove_hold_frame">
-      <icon></icon>
+      <icon/>
       <text>Remove Hold Frame</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Remove a hold frame after every keyframe</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="remove_multiple_hold_frames">
-      <icon></icon>
+      <icon/>
       <text>Remove Multiple Hold Frames</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Remove N hold frames after every keyframe</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="insert_hold_column">
-      <icon></icon>
+      <icon/>
       <text>Insert Hold Column</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Insert a hold column into the frame at the current position</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="insert_multiple_hold_columns">
-      <icon></icon>
+      <icon/>
       <text>Insert Multiple Hold Columns</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Insert N hold columns into the frame at the current position</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="remove_hold_column">
-      <icon></icon>
+      <icon/>
       <text>Remove Hold Column</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Remove a hold column from the frame at the current position</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="remove_multiple_hold_columns">
-      <icon></icon>
+      <icon/>
       <text>Remove Multiple Hold Columns</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Remove N hold columns from the frame at the current position</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
-
     <Action name="insert_opacity_keyframe">
-      <icon></icon>
+      <icon/>
       <text>Add opacity keyframe</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Adds keyframe to control layer opacity</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
-
     <Action name="remove_opacity_keyframe">
-      <icon></icon>
+      <icon/>
       <text>Remove opacity keyframe</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Removes keyframe to control layer opacity</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
-
     <Action name="mirror_frames">
-      <icon></icon>
+      <icon/>
       <text>Mirror Frames</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Mirror frames' position</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="mirror_columns">
-      <icon></icon>
+      <icon/>
       <text>Mirror Columns</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Mirror columns' position</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="copy_frames">
-      <icon></icon>
+      <icon/>
       <text>Copy Keyframes</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Copy frames to clipboard</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="copy_frames_as_clones">
-      <icon></icon>
+      <icon/>
       <text>Clone Keyframes</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Clone frames to clipboard</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="make_clones_unique">
-      <icon></icon>
+      <icon/>
       <text>Make Unique</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Convert clones to unique keyframe instances.</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="cut_frames">
-      <icon></icon>
+      <icon/>
       <text>Cut Keyframes</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Cut frames to clipboard</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="paste_frames">
-      <icon></icon>
+      <icon/>
       <text>Paste Keyframes</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Paste frames from clipboard</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="copy_columns">
-      <icon></icon>
+      <icon/>
       <text>Copy Columns</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Copy columns to clipboard</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="cut_columns">
-      <icon></icon>
+      <icon/>
       <text>Cut Columns</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Cut columns to clipboard</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
     <Action name="paste_columns_from_clipboard">
-      <icon></icon>
+      <icon/>
       <text>Paste Columns</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Paste columns from clipboard</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
-
-
     <Action name="set_start_time">
-      <icon></icon>
+      <icon/>
       <text>Set Start Time</text>
-      <whatsThis></whatsThis>
-      <toolTip></toolTip>
-      <iconText></iconText>
+      <whatsThis/>
+      <toolTip/>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
-
     <Action name="set_end_time">
-      <icon></icon>
+      <icon/>
       <text>Set End Time</text>
-      <whatsThis></whatsThis>
-      <toolTip></toolTip>
-      <iconText></iconText>
+      <whatsThis/>
+      <toolTip/>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
-
     <Action name="update_playback_range">
-      <icon></icon>
+      <icon/>
       <text>Update Playback Range</text>
-      <whatsThis></whatsThis>
-      <toolTip></toolTip>
-      <iconText></iconText>
+      <whatsThis/>
+      <toolTip/>
+      <iconText/>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-
-
   </Actions>
-
   <Actions category="Layers">
     <text>Layers</text>
-
     <Action name="activateNextLayer">
-      <icon></icon>
+      <icon/>
       <text>Activate next layer</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Activate next layer</toolTip>
       <iconText>Activate next layer</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>PgUp</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="activateNextSiblingLayer">
-      <icon></icon>
+      <icon/>
       <text>Activate next sibling layer, skipping over groups.</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Activate next sibling layer</toolTip>
       <iconText>Activate next sibling layer</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="activatePreviousLayer">
-      <icon></icon>
+      <icon/>
       <text>Activate previous layer</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Activate previous layer</toolTip>
       <iconText>Activate previous layer</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>PgDown</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="activatePreviousSiblingLayer">
-      <icon></icon>
+      <icon/>
       <text>Activate previous sibling layer, skipping over groups.</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Activate previous sibling layer</toolTip>
       <iconText>Activate previous sibling layer</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="switchToPreviouslyActiveNode">
-      <icon></icon>
+      <icon/>
       <text>Activate previously selected layer</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Activate previously selected layer</toolTip>
       <iconText>Activate previously selected layer</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>;</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="add_new_group_layer">
       <icon>groupLayer</icon>
       <text>&Group Layer</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Group Layer</toolTip>
       <iconText>Group Layer</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="add_new_clone_layer">
       <icon>cloneLayer</icon>
       <text>&Clone Layer</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Clone Layer</toolTip>
       <iconText>Clone Layer</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="add_new_shape_layer">
       <icon>vectorLayer</icon>
       <text>&Vector Layer</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Vector Layer</toolTip>
       <iconText>Vector Layer</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="add_new_adjustment_layer">
       <icon>filterLayer</icon>
       <text>&Filter Layer...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Filter Layer</toolTip>
       <iconText>Filter Layer</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="add_new_fill_layer">
       <icon>fillLayer</icon>
       <text>&Fill Layer...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Fill Layer</toolTip>
       <iconText>Fill Layer</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="add_new_file_layer">
       <icon>fileLayer</icon>
       <text>&File Layer...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>File Layer</toolTip>
       <iconText>File Layer</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="add_new_transparency_mask">
       <icon>transparencyMask</icon>
       <text>&Transparency Mask</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Transparency Mask</toolTip>
       <iconText>Transparency Mask</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="add_new_filter_mask">
       <icon>filterMask</icon>
       <text>&Filter Mask...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Filter Mask</toolTip>
       <iconText>Filter Mask</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="add_new_colorize_mask">
       <icon>filterMask</icon>
       <text>&Colorize Mask</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Colorize Mask</toolTip>
       <iconText>Colorize Mask</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="add_new_transform_mask">
       <icon>transformMask</icon>
       <text>&Transform Mask</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Transform Mask</toolTip>
       <iconText>Transform Mask</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="add_new_selection_mask">
       <icon>selectionMask</icon>
       <text>&Local Selection</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Local Selection</toolTip>
       <iconText>Local Selection</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="isolate_active_layer">
       <icon>view-filter</icon>
       <text>&Isolate Active Layer</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Isolate Active Layer</toolTip>
       <iconText>Isolate Active Layer</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>true</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="isolate_active_group">
       <icon>view-filter</icon>
       <text>&Isolate Active Group</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Isolate Active Group</toolTip>
       <iconText>Isolate Active Group</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>true</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="toggle_layer_lock">
       <icon>layer-locked</icon>
       <text>&Toggle layer lock</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Toggle layer lock</toolTip>
       <iconText>Toggle layer lock</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="toggle_layer_visibility">
       <icon>visible</icon>
       <text>Toggle layer &visibility</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Toggle layer visibility</toolTip>
       <iconText>Toggle layer visibility</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="toggle_layer_soloing">
       <icon>visible</icon>
       <text>Toggle Layer Soloing</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Toggle layer soloing, temporarily disabling visibility of all non-child layers.</toolTip>
       <iconText>Toggle layer soloing</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="toggle_layer_alpha_lock">
       <icon>transparency-locked</icon>
       <text>Toggle layer &alpha</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Toggle layer alpha</toolTip>
       <iconText>Toggle layer alpha</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="toggle_layer_inherit_alpha">
       <icon>transparency-enabled</icon>
       <text>Toggle layer alpha &inheritance</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Toggle layer alpha inheritance</toolTip>
       <iconText>Toggle layer alpha inheritance</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="add_new_paint_layer">
       <icon>paintLayer</icon>
       <text>&Paint Layer</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Paint Layer</toolTip>
       <iconText>Paint Layer</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Insert</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="new_from_visible">
-      <icon></icon>
+      <icon/>
       <text>&New Layer From Visible</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>New layer from visible</toolTip>
       <iconText>New layer from visible</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="duplicatelayer">
       <icon>duplicatelayer</icon>
       <text>&Duplicate Layer or Mask</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Duplicate Layer or Mask</toolTip>
       <iconText>Duplicate Layer or Mask</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Ctrl+J</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="cut_selection_to_new_layer">
-      <icon></icon>
+      <icon/>
       <text>&Cut Selection to New Layer</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Cut Selection to New Layer</toolTip>
       <iconText>Cut Selection to New Layer</iconText>
       <activationFlags>100000000</activationFlags>
       <activationConditions>1</activationConditions>
       <shortcut>Ctrl+Shift+J</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="copy_selection_to_new_layer">
-      <icon></icon>
+      <icon/>
       <text>Copy &Selection to New Layer</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Copy Selection to New Layer</toolTip>
       <iconText>Copy Selection to New Layer</iconText>
       <activationFlags>100000000</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Ctrl+Alt+J</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="copy_layer_clipboard">
-      <icon></icon>
+      <icon/>
       <text>Copy Layer</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Copy layer to clipboard</toolTip>
       <iconText>Copy layer to clipboard</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="cut_layer_clipboard">
-      <icon></icon>
+      <icon/>
       <text>Cut Layer</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Cut layer to clipboard</toolTip>
       <iconText>Cut layer to clipboard</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="paste_layer_from_clipboard">
-      <icon></icon>
+      <icon/>
       <text>Paste Layer</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Paste layer from clipboard</toolTip>
       <iconText>Paste layer from clipboard</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="create_quick_group">
-      <icon></icon>
+      <icon/>
       <text>Quick Group</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Create a group layer containing selected layers</toolTip>
       <iconText>Quick Group</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Ctrl+G</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="quick_ungroup">
-      <icon></icon>
+      <icon/>
       <text>Quick Ungroup</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Remove grouping of the layers or remove one layer out of the group</toolTip>
       <iconText>Quick Ungroup</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Ctrl+Alt+G</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="create_quick_clipping_group">
-      <icon></icon>
+      <icon/>
       <text>Quick Clipping Group</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Group selected layers and add a layer with clipped alpha channel</toolTip>
       <iconText>Quick Clipping Group</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Ctrl+Shift+G</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="select_all_layers">
-      <icon></icon>
+      <icon/>
       <text>All Layers</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select all layers</toolTip>
       <iconText>Select all layers</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="select_visible_layers">
-      <icon></icon>
+      <icon/>
       <text>Visible Layers</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select all visible layers</toolTip>
       <iconText>Select all visible layers</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="select_locked_layers">
-      <icon></icon>
+      <icon/>
       <text>Locked Layers</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select all locked layers</toolTip>
       <iconText>Select all locked layers</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="select_invisible_layers">
-      <icon></icon>
+      <icon/>
       <text>Invisible Layers</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select all invisible layers</toolTip>
       <iconText>Select all invisible layers</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="select_unlocked_layers">
-      <icon></icon>
+      <icon/>
       <text>Unlocked Layers</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Select all unlocked layers</toolTip>
       <iconText>Select all unlocked layers</iconText>
       <activationFlags>10000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="save_node_as_image">
       <icon>document-save</icon>
       <text>&Save Layer/Mask...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Save Layer/Mask</toolTip>
       <iconText>Save Layer/Mask</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-        <Action name="save_vector_node_to_svg">
+    <Action name="save_vector_node_to_svg">
       <icon>document-save</icon>
       <text>Save Vector Layer as SVG...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Save Vector Layer as SVG</toolTip>
       <iconText>Save Vector Layer as SVG</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="save_groups_as_images">
       <icon>document-save</icon>
       <text>Save &Group Layers...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Save Group Layers</toolTip>
       <iconText>Save Group Layers</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="convert_group_to_animated">
-      <icon></icon>
+      <icon/>
       <text>Convert group to &animated layer</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Convert child layers into animation frames</toolTip>
       <iconText>Convert child layers into animation frames</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
-        <Action name="convert_to_animated">
-      <icon></icon>
+    <Action name="convert_to_animated">
+      <icon/>
       <text>Convert to &animated layer</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Convert layer into animation frames</toolTip>
       <iconText>Convert layer into animation frames</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="convert_to_file_layer">
       <icon>fileLayer</icon>
       <text>to &File Layer...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Saves out the layers into a new image and then references that image.</toolTip>
       <iconText>Convert to File Layer</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="import_layer_from_file">
-      <icon></icon>
+      <icon/>
       <text>I&mport Layer...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Import Layer</toolTip>
       <iconText>Import Layer</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="import_layer_as_paint_layer">
       <icon>paintLayer</icon>
       <text>&as Paint Layer...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>as Paint Layer</toolTip>
       <iconText>as Paint Layer</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="import_layer_as_transparency_mask">
       <icon>transparencyMask</icon>
       <text>as &Transparency Mask...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>as Transparency Mask</toolTip>
       <iconText>as Transparency Mask</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="import_layer_as_filter_mask">
       <icon>filterMask</icon>
       <text>as &Filter Mask...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>as Filter Mask</toolTip>
       <iconText>as Filter Mask</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="import_layer_as_selection_mask">
       <icon>selectionMask</icon>
       <text>as &Selection Mask...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>as Selection Mask</toolTip>
       <iconText>as Selection Mask</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="convert_to_paint_layer">
       <icon>paintLayer</icon>
       <text>to &Paint Layer</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>to Paint Layer</toolTip>
       <iconText>to Paint Layer</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="convert_to_transparency_mask">
       <icon>transparencyMask</icon>
       <text>to &Transparency Mask</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>to Transparency Mask</toolTip>
       <iconText>to Transparency Mask</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="convert_to_filter_mask">
       <icon>filterMask</icon>
       <text>to &Filter Mask...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>to Filter Mask</toolTip>
       <iconText>to Filter Mask</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="convert_to_selection_mask">
       <icon>selectionMask</icon>
       <text>to &Selection Mask</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>to Selection Mask</toolTip>
       <iconText>to Selection Mask</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="split_alpha_into_mask">
       <icon>transparencyMask</icon>
       <text>&Alpha into Mask</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Alpha into Mask</toolTip>
       <iconText>Alpha into Mask</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>10</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="split_alpha_write">
       <icon>transparency-enabled</icon>
       <text>&Write as Alpha</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Write as Alpha</toolTip>
       <iconText>Write as Alpha</iconText>
       <activationFlags>1000000</activationFlags>
       <activationConditions>1</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="split_alpha_save_merged">
       <icon>document-save</icon>
       <text>&Save Merged...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Save Merged</toolTip>
       <iconText>Save Merged</iconText>
       <activationFlags>1000000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="layersplit">
       <icon>split-layer</icon>
       <text>Split Layer...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Split Layer</toolTip>
       <iconText>Split Layer</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="waveletdecompose">
-      <icon></icon>
+      <icon/>
       <text>Wavelet Decompose ...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Wavelet Decompose</toolTip>
       <iconText>Wavelet Decompose</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>1</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="mirrorNodeX">
       <icon>symmetry-horizontal</icon>
       <text>Mirror Layer Hori&zontally</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Mirror Layer Horizontally</toolTip>
       <iconText>Mirror Layer Horizontally</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>1</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="mirrorNodeY">
       <icon>symmetry-vertical</icon>
       <text>Mirror Layer &Vertically</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Mirror Layer Vertically</toolTip>
       <iconText>Mirror Layer Vertically</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>1</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="rotatelayer">
-      <icon></icon>
+      <icon/>
       <text>&Rotate Layer...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Rotate Layer</toolTip>
       <iconText>Rotate Layer</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>1</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="rotateLayerCW90">
       <icon>object-rotate-right</icon>
       <text>Rotate &Layer 90° to the Right</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Rotate Layer 90° to the Right</toolTip>
       <iconText>Rotate Layer 90° to the Right</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>1</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="rotateLayerCCW90">
       <icon>object-rotate-left</icon>
       <text>Rotate Layer &90° to the Left</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Rotate Layer 90° to the Left</toolTip>
       <iconText>Rotate Layer 90° to the Left</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>1</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="rotateLayer180">
-      <icon></icon>
+      <icon/>
       <text>Rotate Layer &180°</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Rotate Layer 180°</toolTip>
       <iconText>Rotate Layer 180°</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>1</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="layersize">
-      <icon></icon>
+      <icon/>
       <text>Scale &Layer to new Size...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Scale Layer to new Size</toolTip>
       <iconText>Scale Layer to new Size</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>1</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="shearlayer">
-      <icon></icon>
+      <icon/>
       <text>&Shear Layer...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Shear Layer</toolTip>
       <iconText>Shear Layer</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>1</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="mirrorAllNodesX">
       <icon>symmetry-horizontal</icon>
       <text>Mirror All Layers Hori&zontally</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Mirror All Layers Horizontally</toolTip>
       <iconText>Mirror All Layers Horizontally</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>1</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="mirrorAllNodesY">
       <icon>symmetry-vertical</icon>
       <text>Mirror All Layers &Vertically</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Mirror All Layers Vertically</toolTip>
       <iconText>Mirror All Layers Vertically</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>1</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="rotateAllLayers">
-      <icon></icon>
+      <icon/>
       <text>&Rotate All Layers...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Rotate All Layers</toolTip>
       <iconText>Rotate All Layers</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>1</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="rotateAllLayersCW90">
       <icon>object-rotate-right</icon>
       <text>Rotate All &Layers 90° to the Right</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Rotate All Layers 90° to the Right</toolTip>
       <iconText>Rotate All Layers 90° to the Right</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>1</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="rotateAllLayersCCW90">
       <icon>object-rotate-left</icon>
       <text>Rotate All Layers &90° to the Left</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Rotate All Layers 90° to the Left</toolTip>
       <iconText>Rotate All Layers 90° to the Left</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>1</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="rotateAllLayers180">
-      <icon></icon>
+      <icon/>
       <text>Rotate All Layers &180°</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Rotate All Layers 180°</toolTip>
       <iconText>Rotate All Layers 180°</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>1</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="scaleAllLayers">
-      <icon></icon>
+      <icon/>
       <text>Scale All &Layers to new Size...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Scale All Layers to new Size</toolTip>
       <iconText>Scale All Layers to new Size</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>1</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="shearAllLayers">
-      <icon></icon>
+      <icon/>
       <text>&Shear All Layers...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Shear All Layers</toolTip>
       <iconText>Shear All Layers</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>1</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="offsetlayer">
-      <icon></icon>
+      <icon/>
       <text>&Offset Layer...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Offset Layer</toolTip>
       <iconText>Offset Layer</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>1</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="clones_array">
-      <icon></icon>
+      <icon/>
       <text>Clones &Array...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Clones Array</toolTip>
       <iconText>Clones Array</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="EditLayerMetaData">
-      <icon></icon>
+      <icon/>
       <text>&Edit metadata...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Edit metadata</toolTip>
       <iconText>Edit metadata</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>1</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="histogram">
-      <icon></icon>
+      <icon/>
       <text>&Histogram...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Histogram</toolTip>
       <iconText>Histogram</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="layercolorspaceconversion">
-      <icon></icon>
+      <icon/>
       <text>&Convert Layer Color Space...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Convert Layer Color Space</toolTip>
       <iconText>Convert Layer Color Space</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>1</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="merge_layer">
       <icon>merge-layer-below</icon>
       <text>&Merge with Layer Below</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Merge with Layer Below</toolTip>
       <iconText>Merge with Layer Below</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Ctrl+E</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="flatten_layer">
-      <icon></icon>
+      <icon/>
       <text>&Flatten Layer</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Flatten Layer</toolTip>
       <iconText>Flatten Layer</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="flatten_image">
-      <icon></icon>
+      <icon/>
       <text>Flatten ima&ge</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Flatten image</toolTip>
       <iconText>Flatten image</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>Ctrl+Shift+E</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="layer_style">
-      <icon></icon>
+      <icon/>
       <text>La&yer Style...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Layer Style</toolTip>
       <iconText>Layer Style</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>1</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="LayerGroupSwitcher/previous">
-      <icon></icon>
+      <icon/>
       <text>Move into previous group</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Move into previous group</toolTip>
       <iconText>Move into previous group</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="LayerGroupSwitcher/next">
-      <icon></icon>
+      <icon/>
       <text>Move into next group</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Move into next group</toolTip>
       <iconText>Move into next group</iconText>
       <activationFlags>0</activationFlags>
       <activationConditions>0</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="RenameCurrentLayer">
-      <icon></icon>
+      <icon/>
       <text>Rename current layer</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Rename current layer</toolTip>
       <iconText>Rename current layer</iconText>
       <activationFlags>100000</activationFlags>
       <activationConditions>0</activationConditions>
       <shortcut>F2</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="remove_layer">
       <icon>deletelayer</icon>
       <text>&Remove Layer</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Remove Layer</toolTip>
       <iconText>Remove Layer</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>1</activationConditions>
       <shortcut>Shift+Delete</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="move_layer_up">
       <icon>arrowupblr</icon>
       <text>Move Layer or Mask Up</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Move Layer or Mask Up</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <shortcut>Ctrl+PgUp</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="move_layer_down">
       <icon>arrowdown</icon>
       <text>Move Layer or Mask Down</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Move Layer or Mask Down</toolTip>
-      <iconText></iconText>
+      <iconText/>
       <shortcut>Ctrl+PgDown</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="layer_properties">
       <icon>properties</icon>
       <text>&Properties...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip comment="Layer Properties">Properties</toolTip>
       <iconText comment="Layer Properties">Properties</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>1</activationConditions>
       <shortcut>F3</shortcut>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
     <Action name="set-copy-from">
-      <icon></icon>
+      <icon/>
       <text>Set Copy F&rom...</text>
-      <whatsThis></whatsThis>
+      <whatsThis/>
       <toolTip>Set the source for the selected clone layer(s).</toolTip>
       <iconText>Set Copy From</iconText>
       <activationFlags>1000</activationFlags>
       <activationConditions>1</activationConditions>
-      <shortcut></shortcut>
+      <shortcut/>
       <isCheckable>false</isCheckable>
-      <statusTip></statusTip>
+      <statusTip/>
     </Action>
   </Actions>
 </ActionCollection>
diff --git a/libs/ui/CMakeLists.txt b/libs/ui/CMakeLists.txt
index db30c081be..1dd227e432 100644
--- a/libs/ui/CMakeLists.txt
+++ b/libs/ui/CMakeLists.txt
@@ -418,6 +418,8 @@ set(kritaui_LIB_SRCS
     KoDocumentInfo.cpp
 
     StoryboardItem.cpp
+
+    KisNodeActivationActionCreatorVisitor.cpp
 )
 
 if (KSeExpr_FOUND)
diff --git a/libs/ui/KisMainWindow.cpp b/libs/ui/KisMainWindow.cpp
index 0e02e62d8c..4b1f8f6b1e 100644
--- a/libs/ui/KisMainWindow.cpp
+++ b/libs/ui/KisMainWindow.cpp
@@ -142,6 +142,8 @@
 #include <kritaversion.h>
 #include "KisCanvasWindow.h"
 #include "kis_action.h"
+#include <katecommandbar.h>
+#include "KisNodeActivationActionCreatorVisitor.h"
 
 #include <mutex>
 
@@ -198,6 +200,8 @@ public:
         mdiArea->setTabsMovable(true);
         mdiArea->setActivationOrder(QMdiArea::ActivationHistoryOrder);
         mdiArea->setDocumentMode(true);
+
+        commandBar = new KateCommandBar(parent);
     }
 
     ~Private() {
@@ -240,7 +244,7 @@ public:
     KisAction *toggleDetachCanvas {0};
     KisAction *fullScreenMode {0};
     KisAction *showSessionManager {0};
-
+    KisAction *commandBarAction {0};
     KisAction *expandingSpacers[2];
 
     KActionMenu *styleMenu;
@@ -290,6 +294,8 @@ public:
     QUuid workspaceBorrowedBy;
     KisSignalAutoConnectionsStore screenConnectionsStore;
 
+    KateCommandBar *commandBar {0};
+
 #ifdef Q_OS_ANDROID
     KisAndroidFileManager *fileManager;
 #endif
@@ -1803,6 +1809,35 @@ void KisMainWindow::restoreWorkspace()
     restoreWorkspace(resourceId);
 }
 
+void KisMainWindow::openCommandBar()
+{
+    QList<KActionCollection *> actionCollections;
+
+    auto clients = guiFactory()->clients();
+    int actionsCount = 0;
+    for (const KXMLGUIClient *c : clients) {
+        if (!c) {
+            continue;
+        }
+        if (auto collection = c->actionCollection()) {
+            actionCollections.append(collection);
+            actionsCount += collection->count();
+        }
+    }
+
+    if (activeKisView()) {
+        KActionCollection *layerActionCollection = new KActionCollection(0, "layeractions");
+        layerActionCollection->setComponentDisplayName(i18n("Layers/Masks"));
+        KisNodeActivationActionCreatorVisitor v(layerActionCollection, viewManager()->nodeManager());
+        activeKisView()->image()->rootLayer()->accept(v);
+        actionCollections.append(layerActionCollection);
+        actionsCount += layerActionCollection->count();
+    }
+
+    d->commandBar->updateBar(actionCollections, actionsCount);
+    centralWidget()->setFocusProxy(d->commandBar);
+}
+
 bool KisMainWindow::restoreWorkspace(int workspaceId)
 {
     KisWorkspaceResourceSP workspace =
@@ -2765,6 +2800,9 @@ void KisMainWindow::createActions()
     d->showSessionManager = actionManager->createAction("file_sessions");
     connect(d->showSessionManager, SIGNAL(triggered(bool)), this, SLOT(slotShowSessionManager()));
 
+    d->commandBarAction = actionManager->createAction("command_bar_open");
+    connect(d->commandBarAction, SIGNAL(triggered(bool)), this, SLOT(openCommandBar()));
+
     actionManager->createStandardAction(KStandardAction::Preferences, this, SLOT(slotPreferences()));
 
     for (int i = 0; i < 2; i++) {
diff --git a/libs/ui/KisMainWindow.h b/libs/ui/KisMainWindow.h
index de119cd1b1..12bf4ae442 100644
--- a/libs/ui/KisMainWindow.h
+++ b/libs/ui/KisMainWindow.h
@@ -450,6 +450,9 @@ private Q_SLOTS:
     void orientationChanged();
 
     void restoreWorkspace();
+
+    void openCommandBar();
+
 protected:
 
     void closeEvent(QCloseEvent * e) override;
diff --git a/libs/ui/KisNodeActivationActionCreatorVisitor.cpp b/libs/ui/KisNodeActivationActionCreatorVisitor.cpp
new file mode 100644
index 0000000000..8e889188f5
--- /dev/null
+++ b/libs/ui/KisNodeActivationActionCreatorVisitor.cpp
@@ -0,0 +1,36 @@
+/*
+ *  SPDX-FileCopyrightText: 2021 Halla Rempt <halla at valdyas.org>
+ *
+ *  SPDX-License-Identifier: GPL-2.0-or-later
+ */
+#include "KisNodeActivationActionCreatorVisitor.h"
+
+#include <kis_node_manager.h>
+#include <klocalizedstring.h>
+#include <kactioncollection.h>
+#include <QObject>
+
+KisNodeActivationActionCreatorVisitor::KisNodeActivationActionCreatorVisitor(KActionCollection *actionCollection, KisNodeManager *nodeManager)
+    : m_nodeManager(nodeManager)
+    , m_actionCollection(actionCollection)
+{
+}
+
+
+bool KisNodeActivationActionCreatorVisitor::createAction(KisNode *node)
+{
+    if (node->name() != i18n("root")) {
+
+        QAction *action = new QAction(i18nc("A temporary action that actives a layer or mask",
+                                            "Activate %1", node->name()),
+                                      m_actionCollection);
+        action->setObjectName(QString("select_%1").arg(node->name()));
+        action->setProperty("node", node->name());
+        QObject::connect(action, SIGNAL(triggered()), m_nodeManager, SLOT(slotUiActivateNode()));
+        m_actionCollection->addAction(action->objectName(), action);
+    }
+
+    visitAll(node);
+
+    return true;
+}
diff --git a/libs/ui/KisNodeActivationActionCreatorVisitor.h b/libs/ui/KisNodeActivationActionCreatorVisitor.h
new file mode 100644
index 0000000000..12a4ac51f0
--- /dev/null
+++ b/libs/ui/KisNodeActivationActionCreatorVisitor.h
@@ -0,0 +1,96 @@
+/*
+ *  SPDX-FileCopyrightText: 2021 Halla Rempt <halla at valdyas.org>
+ *
+ *  SPDX-License-Identifier: GPL-2.0-or-later
+ */
+#ifndef KISNODEACTIVATIONACTIONCREATORVISITOR_H
+#define KISNODEACTIVATIONACTIONCREATORVISITOR_H
+
+#include <kis_node_visitor.h>
+
+#include "kis_node.h"
+#include "kis_paint_layer.h"
+#include "kis_group_layer.h"
+#include "kis_adjustment_layer.h"
+#include "kis_external_layer_iface.h"
+#include "kis_clone_layer.h"
+#include "kis_filter_mask.h"
+#include "kis_transform_mask.h"
+#include "kis_transparency_mask.h"
+#include "kis_selection_mask.h"
+#include "lazybrush/kis_colorize_mask.h"
+#include "generator/kis_generator_layer.h"
+
+#include <QList>
+#include <QAction>
+
+class KActionCollection;
+class KisNodeManager;
+
+class KisNodeActivationActionCreatorVisitor : public KisNodeVisitor
+{
+public:
+
+    using KisNodeVisitor::visit;
+
+    KisNodeActivationActionCreatorVisitor(KActionCollection *actionCollection, KisNodeManager *nodeManager);
+    ~KisNodeActivationActionCreatorVisitor() {}
+
+    bool visit(KisNode* node) override {
+        return createAction(node);
+    }
+
+    bool visit(KisPaintLayer *layer) override {
+        return createAction(layer);
+    }
+
+    bool visit(KisGroupLayer *layer) override {
+        return createAction(layer);
+    }
+
+    bool visit(KisAdjustmentLayer *layer) override {
+        return createAction(layer);
+    }
+
+    bool visit(KisExternalLayer *layer) override {
+        return createAction(layer);
+    }
+
+    bool visit(KisCloneLayer *layer) override {
+        return createAction(layer);
+    }
+
+    bool visit(KisFilterMask *mask) override {
+        return createAction(mask);
+    }
+
+    bool visit(KisTransformMask *mask) override {
+        return createAction(mask);
+    }
+
+    bool visit(KisTransparencyMask *mask) override {
+        return createAction(mask);
+    }
+
+    bool visit(KisGeneratorLayer * layer) override {
+        return createAction(layer);
+    }
+
+    bool visit(KisSelectionMask* mask) override {
+        return createAction(mask);
+    }
+
+    bool visit(KisColorizeMask* mask) override {
+        return createAction(mask);
+    }
+
+private:
+
+    bool createAction(KisNode *node);
+
+    KisNodeManager *m_nodeManager {0};
+    KActionCollection *m_actionCollection {0};
+
+};
+
+#endif // KISNODEACTIVATIONACTIONCREATORVISITOR_H
diff --git a/libs/ui/kis_action_manager.cpp b/libs/ui/kis_action_manager.cpp
index bf18bf64db..b5b056111b 100644
--- a/libs/ui/kis_action_manager.cpp
+++ b/libs/ui/kis_action_manager.cpp
@@ -159,6 +159,7 @@ KisAction *KisActionManager::actionByName(const QString &name) const
 KisAction *KisActionManager::createAction(const QString &name)
 {
     KisAction *a = actionByName(name); // Check if the action already exists
+
     if (a) {
         dbgAction << name << "already exists";
         return a;
@@ -169,6 +170,7 @@ KisAction *KisActionManager::createAction(const QString &name)
     // will add them to the KisActionRegistry for the time being so we can get
     // properly categorized shortcuts.
     a = new KisAction();
+
     KisActionRegistry *actionRegistry = KisActionRegistry::instance();
 
     // Add extra properties
@@ -180,7 +182,6 @@ KisAction *KisActionManager::createAction(const QString &name)
     a->setActivationConditions((KisAction::ActivationConditions) activationConditions);
 
     addAction(name, a);
-
     return a;
 }
 
diff --git a/libs/ui/kis_node_manager.cpp b/libs/ui/kis_node_manager.cpp
index b737717c2b..7d285aed42 100644
--- a/libs/ui/kis_node_manager.cpp
+++ b/libs/ui/kis_node_manager.cpp
@@ -1652,3 +1652,14 @@ void KisNodeManager::selectUnlockedNodes()
 
     selectLayersImpl(props, invertedProps);
 }
+
+void KisNodeManager::slotUiActivateNode()
+{
+    if (!sender()->property("node").isNull()) {
+        QString name = sender()->property("node").toString();
+        KisNodeSP node = m_d->imageView->image()->rootLayer()->findChildByName(name);
+        if (node) {
+            slotUiActivatedNode(node);
+        }
+    }
+}
diff --git a/libs/ui/kis_node_manager.h b/libs/ui/kis_node_manager.h
index 22c181714d..78ad8934d1 100644
--- a/libs/ui/kis_node_manager.h
+++ b/libs/ui/kis_node_manager.h
@@ -251,6 +251,15 @@ public Q_SLOTS:
     void selectInvisibleNodes();
     void selectUnlockedNodes();
 
+private Q_SLOTS:
+
+    friend class KisNodeActivationActionCreatorVisitor;
+    /**
+     * @brief slotUiActivateNode inspects the sender to see which node needs to be activated.
+     */
+    void slotUiActivateNode();
+
+
 public:
     void removeSingleNode(KisNodeSP node);
     KisLayerSP createPaintLayer();
diff --git a/libs/widgetutils/CMakeLists.txt b/libs/widgetutils/CMakeLists.txt
index f4f40a4110..e2d95a49bf 100644
--- a/libs/widgetutils/CMakeLists.txt
+++ b/libs/widgetutils/CMakeLists.txt
@@ -81,6 +81,9 @@ set(kritawidgetutils_LIB_SRCS
     xmlgui/kxmlguifactory_p.cpp
     xmlgui/kxmlguiversionhandler.cpp
     xmlgui/kxmlguiwindow.cpp
+
+    katecommandbar.cpp
+    commandmodel.cpp
 )
 
 if (HAVE_DBUS)
diff --git a/libs/widgetutils/commandmodel.cpp b/libs/widgetutils/commandmodel.cpp
new file mode 100644
index 0000000000..3a0bbb3fce
--- /dev/null
+++ b/libs/widgetutils/commandmodel.cpp
@@ -0,0 +1,67 @@
+/*
+    SPDX-FileCopyrightText: 2021 Waqar Ahmed <waqar.17a at gmail.com>
+
+    SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+#include "commandmodel.h"
+
+#include <KLocalizedString>
+#include <QAction>
+#include <QDebug>
+
+CommandModel::CommandModel(QObject *parent)
+    : QAbstractTableModel(parent)
+{
+}
+
+void CommandModel::refresh(QVector<QPair<QString, QAction *>> actionList)
+{
+    QVector<Item> temp;
+    temp.reserve(actionList.size());
+    for (auto action : actionList) {
+        temp.push_back({action.first, action.second, 0});
+    }
+
+    beginResetModel();
+    m_rows = std::move(temp);
+    endResetModel();
+}
+
+QVariant CommandModel::data(const QModelIndex &index, int role) const
+{
+    if (!index.isValid()) {
+        return {};
+    };
+
+    auto entry = m_rows[index.row()];
+    int col = index.column();
+
+    switch (role) {
+    case Qt::DisplayRole:
+        if (col == 0) {
+            return QString(entry.component + QStringLiteral(": ") + KLocalizedString::removeAcceleratorMarker(entry.action->text()));
+        } else {
+            return entry.action->shortcut().toString();
+        }
+    case Qt::DecorationRole:
+        if (col == 0) {
+            return entry.action->icon();
+        }
+        break;
+    case Qt::TextAlignmentRole:
+        if (col == 0) {
+            return Qt::AlignLeft;
+        } else {
+            return Qt::AlignRight;
+        }
+    case Qt::UserRole: {
+        QVariant v;
+        v.setValue(entry.action);
+        return v;
+    }
+    case Role::Score:
+        return entry.score;
+    }
+
+    return {};
+}
diff --git a/libs/widgetutils/commandmodel.h b/libs/widgetutils/commandmodel.h
new file mode 100644
index 0000000000..00b4a68f92
--- /dev/null
+++ b/libs/widgetutils/commandmodel.h
@@ -0,0 +1,62 @@
+/*
+    SPDX-FileCopyrightText: 2021 Waqar Ahmed <waqar.17a at gmail.com>
+
+    SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+#ifndef COMMANDMODEL_H
+#define COMMANDMODEL_H
+
+#include <QAbstractTableModel>
+#include <QVector>
+
+class QAction;
+
+class CommandModel : public QAbstractTableModel
+{
+    struct Item {
+        QString component;
+        QAction *action;
+        int score;
+    };
+
+    Q_OBJECT
+public:
+    CommandModel(QObject *parent = nullptr);
+
+    enum Role { Score = Qt::UserRole + 1 };
+
+    void refresh(QVector<QPair<QString, QAction *>> actionList);
+
+    int rowCount(const QModelIndex &parent = QModelIndex()) const override
+    {
+        if (parent.isValid()) {
+            return 0;
+        }
+        return m_rows.size();
+    }
+
+    int columnCount(const QModelIndex &parent = QModelIndex()) const override
+    {
+        Q_UNUSED(parent);
+        return 2;
+    }
+
+    bool setData(const QModelIndex &index, const QVariant &value, int role) override
+    {
+        if (!index.isValid()) {
+            return false;
+        }
+        if (role == Role::Score) {
+            auto row = index.row();
+            m_rows[row].score = value.toInt();
+        }
+        return QAbstractTableModel::setData(index, value, role);
+    }
+
+    QVariant data(const QModelIndex &index, int role) const override;
+
+private:
+    QVector<Item> m_rows;
+};
+
+#endif // COMMANDMODEL_H
diff --git a/libs/widgetutils/katecommandbar.cpp b/libs/widgetutils/katecommandbar.cpp
new file mode 100644
index 0000000000..aa382e2ce9
--- /dev/null
+++ b/libs/widgetutils/katecommandbar.cpp
@@ -0,0 +1,409 @@
+/*
+    SPDX-FileCopyrightText: 2021 Waqar Ahmed <waqar.17a at gmail.com>
+
+    SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+#include "katecommandbar.h"
+#include "commandmodel.h"
+
+#include <QAction>
+#include <QCoreApplication>
+#include <QKeyEvent>
+#include <QLineEdit>
+#include <QPainter>
+#include <QPointer>
+#include <QPushButton>
+#include <QSortFilterProxyModel>
+#include <QStyledItemDelegate>
+#include <QTextDocument>
+#include <QTreeView>
+#include <QVBoxLayout>
+#include <QDebug>
+
+#include <kactioncollection.h>
+#include <KLocalizedString>
+
+#include <kfts_fuzzy_match.h>
+
+class CommandBarFilterModel : public QSortFilterProxyModel
+{
+public:
+    CommandBarFilterModel(QObject *parent = nullptr)
+        : QSortFilterProxyModel(parent)
+    {
+    }
+
+    Q_SLOT void setFilterString(const QString &string)
+    {
+        beginResetModel();
+        m_pattern = string;
+        endResetModel();
+    }
+
+protected:
+    bool lessThan(const QModelIndex &sourceLeft, const QModelIndex &sourceRight) const override
+    {
+        const int l = sourceLeft.data(CommandModel::Score).toInt();
+        const int r = sourceRight.data(CommandModel::Score).toInt();
+        return l < r;
+    }
+
+    bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override
+    {
+        if (m_pattern.isEmpty()) {
+            return true;
+        }
+
+        int score = 0;
+        const auto idx = sourceModel()->index(sourceRow, 0, sourceParent);
+        const auto actionName = idx.data().toString().splitRef(QLatin1Char(':')).at(1);
+        const bool res = kfts::fuzzy_match_sequential(m_pattern, actionName, score);
+        sourceModel()->setData(idx, score, CommandModel::Score);
+        return res;
+    }
+
+private:
+    QString m_pattern;
+};
+
+class CommandBarStyleDelegate : public QStyledItemDelegate
+{
+public:
+    CommandBarStyleDelegate(QObject *parent = nullptr)
+        : QStyledItemDelegate(parent)
+    {
+    }
+
+    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
+    {
+        QStyleOptionViewItem options = option;
+        initStyleOption(&options, index);
+
+        QTextDocument doc;
+
+        const auto original = index.data().toString();
+
+        const auto strs = index.data().toString().split(QLatin1Char(':'));
+        QString str = strs.at(1);
+        const QString nameColor = option.palette.color(QPalette::Link).name();
+        kfts::to_fuzzy_matched_display_string(m_filterString, str, QStringLiteral("<b style=\"color:%1;\">").arg(nameColor), QStringLiteral("</b>"));
+
+        const QString component = QStringLiteral("<span style=\"color: gray;\">") + strs.at(0) + QStringLiteral(": </span>");
+
+        doc.setHtml(component + str);
+        doc.setDocumentMargin(2);
+
+        painter->save();
+
+        // paint background
+        if (option.state & QStyle::State_Selected) {
+            painter->fillRect(option.rect, option.palette.highlight());
+        } else {
+            painter->fillRect(option.rect, option.palette.base());
+        }
+
+        options.text = QString(); // clear old text
+        options.widget->style()->drawControl(QStyle::CE_ItemViewItem, &options, painter, options.widget);
+
+        // fix stuff for rtl
+        // QTextDocument doesn't work with RTL text out of the box so we give it a hand here by increasing
+        // the text width to our rect size. Icon displacement is also calculated here because 'translate()'
+        // later will not work.
+        const bool rtl = original.isRightToLeft();
+        if (rtl) {
+            auto r = options.widget->style()->subElementRect(QStyle::SE_ItemViewItemText, &options, options.widget);
+            auto hasIcon = index.data(Qt::DecorationRole).value<QIcon>().isNull();
+            if (hasIcon) {
+                doc.setTextWidth(r.width() - 25);
+            } else {
+                doc.setTextWidth(r.width());
+            }
+        }
+
+        // draw text
+        painter->translate(option.rect.x(), option.rect.y());
+        // leave space for icon
+
+        if (!rtl) {
+            painter->translate(25, 0);
+        }
+
+        doc.drawContents(painter);
+
+        painter->restore();
+    }
+
+public Q_SLOTS:
+    void setFilterString(const QString &text)
+    {
+        m_filterString = text;
+    }
+
+private:
+    QString m_filterString;
+};
+
+class ShortcutStyleDelegate : public QStyledItemDelegate
+{
+public:
+    ShortcutStyleDelegate(QObject *parent = nullptr)
+        : QStyledItemDelegate(parent)
+    {
+    }
+
+    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
+    {
+        QStyleOptionViewItem options = option;
+        initStyleOption(&options, index);
+        painter->save();
+
+        const auto shortcutString = index.data().toString();
+
+        // paint background
+        if (option.state & QStyle::State_Selected) {
+            painter->fillRect(option.rect, option.palette.highlight());
+        } else {
+            painter->fillRect(option.rect, option.palette.base());
+        }
+
+        options.text = QString(); // clear old text
+        options.widget->style()->drawControl(QStyle::CE_ItemViewItem, &options, painter, options.widget);
+
+        if (!shortcutString.isEmpty()) {
+            // collect rects for each word
+            QVector<QPair<QRect, QString>> btns;
+            const auto list = shortcutString.split(QLatin1Char('+'));
+            btns.reserve(list.size());
+            for (const QString &text : list) {
+                QRect r = option.fontMetrics.boundingRect(text);
+                r.setWidth(r.width() + 8);
+                r.setHeight(r.height() + 4);
+                btns.append({r, text});
+            }
+
+            const auto plusRect = option.fontMetrics.boundingRect(QLatin1Char('+'));
+
+            // draw them
+            int x = option.rect.x();
+            const int y = option.rect.y();
+            const int plusY = option.rect.y() + plusRect.height() / 2;
+            const int total = btns.size();
+            int i = 0;
+            painter->setRenderHint(QPainter::Antialiasing);
+            for (const auto &btn : btns) {
+                painter->setPen(Qt::NoPen);
+                const QRect &rect = btn.first;
+
+                QRect buttonRect(x, y, rect.width(), rect.height());
+
+                // draw rounded rect shadow
+                auto shadowRect = buttonRect.translated(0, 1);
+                painter->setBrush(option.palette.shadow());
+                painter->drawRoundedRect(shadowRect, 3, 3);
+
+                // draw rounded rect itself
+                painter->setBrush(option.palette.button());
+                painter->drawRoundedRect(buttonRect, 3, 3);
+
+                // draw text inside rounded rect
+                painter->setPen(option.palette.buttonText().color());
+                painter->drawText(buttonRect, Qt::AlignCenter, btn.second);
+
+                // draw '+'
+                if (i + 1 < total) {
+                    x += rect.width() + 8;
+                    painter->drawText(QPoint(x, plusY + (rect.height() / 2)), QStringLiteral("+"));
+                    x += plusRect.width() + 8;
+                }
+                i++;
+            }
+        }
+
+        painter->restore();
+    }
+};
+
+KateCommandBar::KateCommandBar(QWidget *parent)
+    : QMenu(parent)
+{
+    QVBoxLayout *layout = new QVBoxLayout();
+    layout->setSpacing(0);
+    layout->setContentsMargins(4, 4, 4, 4);
+    setLayout(layout);
+
+    m_lineEdit = new QLineEdit(this);
+    setFocusProxy(m_lineEdit);
+
+    layout->addWidget(m_lineEdit);
+
+    m_treeView = new QTreeView();
+    layout->addWidget(m_treeView, 1);
+    m_treeView->setTextElideMode(Qt::ElideLeft);
+    m_treeView->setUniformRowHeights(true);
+
+    m_model = new CommandModel(this);
+
+    CommandBarStyleDelegate *delegate = new CommandBarStyleDelegate(this);
+    ShortcutStyleDelegate *del = new ShortcutStyleDelegate(this);
+    m_treeView->setItemDelegateForColumn(0, delegate);
+    m_treeView->setItemDelegateForColumn(1, del);
+
+    m_proxyModel = new CommandBarFilterModel(this);
+    m_proxyModel->setFilterRole(Qt::DisplayRole);
+    m_proxyModel->setSortRole(CommandModel::Score);
+    m_proxyModel->setFilterKeyColumn(0);
+
+    connect(m_lineEdit, &QLineEdit::returnPressed, this, &KateCommandBar::slotReturnPressed);
+    connect(m_lineEdit, &QLineEdit::textChanged, m_proxyModel, &CommandBarFilterModel::setFilterString);
+    connect(m_lineEdit, &QLineEdit::textChanged, delegate, &CommandBarStyleDelegate::setFilterString);
+    connect(m_lineEdit, &QLineEdit::textChanged, this, [this]() {
+        m_treeView->viewport()->update();
+        reselectFirst();
+    });
+    connect(m_treeView, &QTreeView::clicked, this, &KateCommandBar::slotReturnPressed);
+
+    m_proxyModel->setSourceModel(m_model);
+    m_treeView->setSortingEnabled(true);
+    m_treeView->setModel(m_proxyModel);
+
+    m_treeView->installEventFilter(this);
+    m_lineEdit->installEventFilter(this);
+
+    m_treeView->setHeaderHidden(true);
+    m_treeView->setRootIsDecorated(false);
+    m_treeView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+    m_treeView->setSelectionMode(QTreeView::SingleSelection);
+
+    setHidden(true);
+}
+
+void KateCommandBar::updateBar(const QList<KActionCollection *> &actionCollections, int totalActions)
+{
+    delete m_layerActions;
+
+    QVector<QPair<QString, QAction *>> actionList;
+    actionList.reserve(totalActions);
+
+    for (const auto collection : actionCollections) {
+
+        if (collection->componentName() == "layeractions") {
+            m_layerActions = collection;
+        }
+
+        const QList<QAction *> collectionActions = collection->actions();
+        const QString componentName = collection->componentDisplayName();
+        for (const auto action : collectionActions) {
+            // sanity + empty check ensures displayable actions and removes ourself
+            // from the action list
+            if (action && !action->text().isEmpty()) {
+                actionList.append({componentName, action});
+            }
+        }
+    }
+
+    m_model->refresh(std::move(actionList));
+    reselectFirst();
+
+    updateViewGeometry();
+    show();
+    setFocus();
+}
+
+bool KateCommandBar::eventFilter(QObject *obj, QEvent *event)
+{
+    // catch key presses + shortcut overrides to allow to have ESC as application wide shortcut, too, see bug 409856
+    if (event->type() == QEvent::KeyPress || event->type() == QEvent::ShortcutOverride) {
+        QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
+        if (obj == m_lineEdit) {
+            const bool forward2list = (keyEvent->key() == Qt::Key_Up) || (keyEvent->key() == Qt::Key_Down) || (keyEvent->key() == Qt::Key_PageUp)
+                || (keyEvent->key() == Qt::Key_PageDown);
+            if (forward2list) {
+                QCoreApplication::sendEvent(m_treeView, event);
+                return true;
+            }
+
+            if (keyEvent->key() == Qt::Key_Escape) {
+                m_lineEdit->clear();
+                keyEvent->accept();
+                hide();
+                return true;
+            }
+        } else {
+            const bool forward2input = (keyEvent->key() != Qt::Key_Up) && (keyEvent->key() != Qt::Key_Down) && (keyEvent->key() != Qt::Key_PageUp)
+                && (keyEvent->key() != Qt::Key_PageDown) && (keyEvent->key() != Qt::Key_Tab) && (keyEvent->key() != Qt::Key_Backtab);
+            if (forward2input) {
+                QCoreApplication::sendEvent(m_lineEdit, event);
+                return true;
+            }
+        }
+    }
+
+    // hide on focus out, if neither input field nor list have focus!
+    else if (event->type() == QEvent::FocusOut && !(m_lineEdit->hasFocus() || m_treeView->hasFocus())) {
+        m_lineEdit->clear();
+        hide();
+        return true;
+    }
+
+    return QWidget::eventFilter(obj, event);
+}
+
+void KateCommandBar::slotReturnPressed()
+{
+    auto act = m_proxyModel->data(m_treeView->currentIndex(), Qt::UserRole).value<QAction *>();
+    if (act) {
+        // if the action is a menu, we take all its actions
+        // and reload our dialog with these instead.
+        if (auto menu = act->menu()) {
+            auto menuActions = menu->actions();
+            QVector<QPair<QString, QAction *>> list;
+            list.reserve(menuActions.size());
+
+            // if there are no actions, trigger load actions
+            // this happens with some menus that are loaded on demand
+            if (menuActions.size() == 0) {
+                Q_EMIT menu->aboutToShow();
+                menuActions = menu->actions();
+            }
+
+            for (auto menuAction : qAsConst(menuActions)) {
+                if (menuAction) {
+                    list.append({KLocalizedString::removeAcceleratorMarker(act->text()), menuAction});
+                }
+            }
+            m_model->refresh(list);
+            m_lineEdit->clear();
+            return;
+        } else {
+            act->trigger();
+        }
+    }
+    m_lineEdit->clear();
+    hide();
+}
+
+void KateCommandBar::reselectFirst()
+{
+    QModelIndex index = m_proxyModel->index(0, 0);
+    m_treeView->setCurrentIndex(index);
+}
+
+void KateCommandBar::updateViewGeometry()
+{
+    m_treeView->resizeColumnToContents(0);
+    m_treeView->resizeColumnToContents(1);
+
+    const QSize centralSize = parentWidget()->size();
+
+    // width: 2.4 of editor, height: 1/2 of editor
+    const QSize viewMaxSize(centralSize.width() / 2.4, centralSize.height() / 2);
+
+    // Position should be central over window
+    const int xPos = std::max(0, (centralSize.width() - viewMaxSize.width()) / 2);
+    const int yPos = std::max(0, (centralSize.height() - viewMaxSize.height()) * 1 / 4);
+
+    const QPoint p(xPos, yPos);
+    move(p + parentWidget()->pos());
+
+    this->setFixedSize(viewMaxSize);
+}
diff --git a/libs/widgetutils/katecommandbar.h b/libs/widgetutils/katecommandbar.h
new file mode 100644
index 0000000000..5d96042c19
--- /dev/null
+++ b/libs/widgetutils/katecommandbar.h
@@ -0,0 +1,41 @@
+/*
+    SPDX-FileCopyrightText: 2021 Waqar Ahmed <waqar.17a at gmail.com>
+
+    SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+#include <QList>
+#include <QMenu>
+
+class QTreeView;
+class QLineEdit;
+class CommandModel;
+class QAction;
+class CommandBarFilterModel;
+class KActionCollection;
+
+#include <kritawidgetutils_export.h>
+
+class KRITAWIDGETUTILS_EXPORT KateCommandBar : public QMenu
+{
+    Q_OBJECT
+public:
+    KateCommandBar(QWidget *parent = nullptr);
+
+    void updateBar(const QList<KActionCollection *> &actions, int totalActions);
+
+    void updateViewGeometry();
+
+protected:
+    bool eventFilter(QObject *obj, QEvent *event) override;
+
+private Q_SLOTS:
+    void slotReturnPressed();
+    void reselectFirst();
+
+private:
+    QTreeView *m_treeView;
+    QLineEdit *m_lineEdit;
+    CommandModel *m_model;
+    CommandBarFilterModel *m_proxyModel;
+    KActionCollection *m_layerActions {0};
+};
diff --git a/libs/widgetutils/kfts_fuzzy_match.h b/libs/widgetutils/kfts_fuzzy_match.h
new file mode 100644
index 0000000000..f4e60051af
--- /dev/null
+++ b/libs/widgetutils/kfts_fuzzy_match.h
@@ -0,0 +1,291 @@
+/*
+    SPDX-FileCopyrightText: 2017 Forrest Smith
+    SPDX-FileCopyrightText: 2020 Waqar Ahmed
+
+    SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#ifndef KFTS_FUZZY_MATCH_H
+#define KFTS_FUZZY_MATCH_H
+
+#include <QString>
+
+/**
+ * This is based on https://github.com/forrestthewoods/lib_fts/blob/master/code/fts_fuzzy_match.h
+ * with modifications for Qt
+ *
+ * Dont include this file in a header file, please :)
+ */
+
+namespace kfts
+{
+/**
+ * @brief simple fuzzy matching of chars in @a pattern with chars in @a str sequentially
+ */
+Q_DECL_UNUSED static bool fuzzy_match_simple(const QStringView pattern, const QStringView str);
+
+/**
+ * @brief This should be the main function you should use. @a outscore is the score
+ * of this match and should be used to sort the results later. Without sorting of the
+ * results this function won't be as effective.
+ */
+Q_DECL_UNUSED static bool fuzzy_match(const QStringView pattern, const QStringView str, int &outScore);
+Q_DECL_UNUSED static bool fuzzy_match(const QStringView pattern, const QStringView str, int &outScore, uint8_t *matches, int maxMatches);
+
+/**
+ * @brief This is a special case function which doesn't score separator matches higher than sequential matches.
+ * This is currently used in Kate's command bar where the string items are usually space separated names.
+ */
+Q_DECL_UNUSED static bool fuzzy_match_sequential(const QStringView pattern, const QStringView str, int &outScore);
+/**
+ * @brief get string for display in treeview / listview. This should be used from style delegate.
+ * For example: with @a pattern = "kate", @a str = "kateapp" and @htmlTag = "<b>
+ * the output will be <b>k</b><b>a</b><b>t</b><b>e</b>app which will be visible to user as
+ * <b>kate</b>app.
+ *
+ * TODO: improve this so that we don't have to put html tags on every char probably using some kind
+ * of interval container
+ */
+Q_DECL_UNUSED static QString to_fuzzy_matched_display_string(const QStringView pattern, QString &str, const QString &htmlTag, const QString &htmlTagClose);
+}
+
+namespace kfts
+{
+// Forward declarations for "private" implementation
+namespace fuzzy_internal
+{
+static bool fuzzy_match_recursive(QStringView::const_iterator pattern,
+                                  QStringView::const_iterator str,
+                                  int &outScore,
+                                  const QStringView::const_iterator strBegin,
+                                  const QStringView::const_iterator strEnd,
+                                  const QStringView::const_iterator patternEnd,
+                                  uint8_t const *srcMatches,
+                                  uint8_t *newMatches,
+                                  int maxMatches,
+                                  int nextMatch,
+                                  int &recursionCount,
+                                  int seqBonus = 15);
+}
+
+// Public interface
+static bool fuzzy_match_simple(const QStringView pattern, const QStringView str)
+{
+    auto patternIt = pattern.cbegin();
+    for (auto strIt = str.cbegin(); strIt != str.cend() && patternIt != pattern.cend(); ++strIt) {
+        if (strIt->toLower() == patternIt->toLower()) {
+            ++patternIt;
+        }
+    }
+    return patternIt == pattern.cend();
+}
+
+static bool fuzzy_match(const QStringView pattern, const QStringView str, int &outScore)
+{
+    uint8_t matches[256];
+    return fuzzy_match(pattern, str, outScore, matches, sizeof(matches));
+}
+
+static bool fuzzy_match(const QStringView pattern, const QStringView str, int &outScore, uint8_t *matches, int maxMatches)
+{
+    int recursionCount = 0;
+
+    auto strIt = str.cbegin();
+    auto patternIt = pattern.cbegin();
+    const auto patternEnd = pattern.cend();
+    const auto strEnd = str.cend();
+
+    return fuzzy_internal::fuzzy_match_recursive(patternIt, strIt, outScore, strIt, strEnd, patternEnd, nullptr, matches, maxMatches, 0, recursionCount);
+}
+
+static bool fuzzy_match_sequential(const QStringView pattern, const QStringView str, int &outScore)
+{
+    int recursionCount = 0;
+    uint8_t matches[256];
+    auto maxMatches = sizeof(matches);
+    auto strIt = str.cbegin();
+    auto patternIt = pattern.cbegin();
+    const auto patternEnd = pattern.cend();
+    const auto strEnd = str.cend();
+
+    return fuzzy_internal::fuzzy_match_recursive(patternIt, strIt, outScore, strIt, strEnd, patternEnd, nullptr, matches, maxMatches, 0, recursionCount, 40);
+}
+
+// Private implementation
+static bool fuzzy_internal::fuzzy_match_recursive(QStringView::const_iterator pattern,
+                                                  QStringView::const_iterator str,
+                                                  int &outScore,
+                                                  const QStringView::const_iterator strBegin,
+                                                  const QStringView::const_iterator strEnd,
+                                                  const QStringView::const_iterator patternEnd,
+                                                  const uint8_t *srcMatches,
+                                                  uint8_t *matches,
+                                                  int maxMatches,
+                                                  int nextMatch,
+                                                  int &recursionCount,
+                                                  int seqBonus)
+{
+    // Count recursions
+    static constexpr int recursionLimit = 10;
+    ++recursionCount;
+    if (recursionCount >= recursionLimit) {
+        return false;
+    }
+
+    // Detect end of strings
+    if (pattern == patternEnd || str == strEnd) {
+        return false;
+    }
+
+    // Recursion params
+    bool recursiveMatch = false;
+    uint8_t bestRecursiveMatches[256];
+    int bestRecursiveScore = 0;
+
+    // Loop through pattern and str looking for a match
+    bool first_match = true;
+    while (pattern != patternEnd && str != strEnd) {
+        // Found match
+        if (pattern->toLower() == str->toLower()) {
+            // Supplied matches buffer was too short
+            if (nextMatch >= maxMatches) {
+                return false;
+            }
+
+            // "Copy-on-Write" srcMatches into matches
+            if (first_match && srcMatches) {
+                memcpy(matches, srcMatches, nextMatch);
+                first_match = false;
+            }
+
+            // Recursive call that "skips" this match
+            uint8_t recursiveMatches[256];
+            int recursiveScore;
+            auto strNextChar = std::next(str);
+            if (fuzzy_match_recursive(pattern,
+                                      strNextChar,
+                                      recursiveScore,
+                                      strBegin,
+                                      strEnd,
+                                      patternEnd,
+                                      matches,
+                                      recursiveMatches,
+                                      sizeof(recursiveMatches),
+                                      nextMatch,
+                                      recursionCount)) {
+                // Pick best recursive score
+                if (!recursiveMatch || recursiveScore > bestRecursiveScore) {
+                    memcpy(bestRecursiveMatches, recursiveMatches, 256);
+                    bestRecursiveScore = recursiveScore;
+                }
+                recursiveMatch = true;
+            }
+
+            // Advance
+            matches[nextMatch++] = (uint8_t)(std::distance(strBegin, str));
+            ++pattern;
+        }
+        ++str;
+    }
+
+    // Determine if full pattern was matched
+    bool matched = pattern == patternEnd ? true : false;
+
+    // Calculate score
+    if (matched) {
+        int sequential_bonus = seqBonus; // bonus for adjacent matches
+        static constexpr int separator_bonus = 30; // bonus if match occurs after a separator
+        static constexpr int camel_bonus = 30; // bonus if match is uppercase and prev is lower
+        static constexpr int first_letter_bonus = 15; // bonus if the first letter is matched
+
+        static constexpr int leading_letter_penalty = -5; // penalty applied for every letter in str before the first match
+        static constexpr int max_leading_letter_penalty = -15; // maximum penalty for leading letters
+        static constexpr int unmatched_letter_penalty = -1; // penalty for every letter that doesn't matter
+
+        // Iterate str to end
+        while (str != strEnd) {
+            ++str;
+        }
+
+        // Initialize score
+        outScore = 100;
+
+        // Apply leading letter penalty
+        int penalty = leading_letter_penalty * matches[0];
+        if (penalty < max_leading_letter_penalty) {
+            penalty = max_leading_letter_penalty;
+        }
+        outScore += penalty;
+
+        // Apply unmatched penalty
+        const int unmatched = (int)(std::distance(strBegin, str)) - nextMatch;
+        outScore += unmatched_letter_penalty * unmatched;
+
+        // Apply ordering bonuses
+        for (int i = 0; i < nextMatch; ++i) {
+            uint8_t currIdx = matches[i];
+
+            if (i > 0) {
+                uint8_t prevIdx = matches[i - 1];
+
+                // Sequential
+                if (currIdx == (prevIdx + 1)) {
+                    outScore += sequential_bonus;
+                }
+            }
+
+            // Check for bonuses based on neighbor character value
+            if (currIdx > 0) {
+                // Camel case
+                QChar neighbor = *(strBegin + currIdx - 1);
+                QChar curr = *(strBegin + currIdx);
+                if (neighbor.isLower() && curr.isUpper()) {
+                    outScore += camel_bonus;
+                }
+
+                // Separator
+                bool neighborSeparator = neighbor == QLatin1Char('_') || neighbor == QLatin1Char(' ');
+                if (neighborSeparator) {
+                    outScore += separator_bonus;
+                }
+            } else {
+                // First letter
+                outScore += first_letter_bonus;
+            }
+        }
+    }
+
+    // Return best result
+    if (recursiveMatch && (!matched || bestRecursiveScore > outScore)) {
+        // Recursive score is better than "this"
+        memcpy(matches, bestRecursiveMatches, maxMatches);
+        outScore = bestRecursiveScore;
+        return true;
+    } else if (matched) {
+        // "this" score is better than recursive
+        return true;
+    } else {
+        // no match
+        return false;
+    }
+}
+
+static QString to_fuzzy_matched_display_string(const QStringView pattern, QString &str, const QString &htmlTag, const QString &htmlTagClose)
+{
+    /**
+     * FIXME Don't do so many appends. Instead consider using some interval based solution to wrap a range
+     * of text with the html <tag></tag>
+     */
+    int j = 0;
+    for (int i = 0; i < str.size() && j < pattern.size(); ++i) {
+        if (str.at(i).toLower() == pattern.at(j).toLower()) {
+            str.replace(i, 1, htmlTag + str.at(i) + htmlTagClose);
+            i += htmlTag.size() + htmlTagClose.size();
+            ++j;
+        }
+    }
+    return str;
+}
+} // namespace kfts
+
+#endif // KFTS_FUZZY_MATCH_H
diff --git a/plugins/dockers/storyboarddocker/StoryboardDockerDock.cpp b/plugins/dockers/storyboarddocker/StoryboardDockerDock.cpp
index 61d5cf8947..031cc7bac5 100644
--- a/plugins/dockers/storyboarddocker/StoryboardDockerDock.cpp
+++ b/plugins/dockers/storyboarddocker/StoryboardDockerDock.cpp
@@ -375,17 +375,16 @@ void StoryboardDockerDock::slotExport(ExportFormat format)
         }
         else {
             QPainter p;
-            QSvgGenerator *generator;
+            QSvgGenerator generator;
 
             if (dlg.format() == ExportFormat::SVG) {
-                generator = new QSvgGenerator();
-                generator->setFileName(dlg.saveFileName() + "/" + dlg.svgFileBaseName() + "0.svg");
+                generator.setFileName(dlg.saveFileName() + "/" + dlg.svgFileBaseName() + "0.svg");
                 QSize sz = printer.pageRect().size();
-                generator->setSize(sz);
-                generator->setViewBox(QRect(0, 0, sz.width(), sz.height()));
-                generator->setResolution(printer.resolution());
+                generator.setSize(sz);
+                generator.setViewBox(QRect(0, 0, sz.width(), sz.height()));
+                generator.setResolution(printer.resolution());
 
-                p.begin(generator);
+                p.begin(&generator);
             }
             else {
                 printer.setOutputFileName(dlg.saveFileName());
@@ -404,15 +403,12 @@ void StoryboardDockerDock::slotExport(ExportFormat format)
                     if (dlg.format() == ExportFormat::SVG) {
                         p.end();
                         p.eraseRect(printer.pageRect());
-                        delete generator;
-
-                        generator = new QSvgGenerator();
-                        generator->setFileName(dlg.saveFileName() + "/" + dlg.svgFileBaseName() + QString::number(i / layoutCellRects.size()) + ".svg");
+                        generator.setFileName(dlg.saveFileName() + "/" + dlg.svgFileBaseName() + QString::number(i / layoutCellRects.size()) + ".svg");
                         QSize sz = printer.pageRect().size();
-                        generator->setSize(sz);
-                        generator->setViewBox(QRect(0, 0, sz.width(), sz.height()));
-                        generator->setResolution(printer.resolution());
-                        p.begin(generator);
+                        generator.setSize(sz);
+                        generator.setViewBox(QRect(0, 0, sz.width(), sz.height()));
+                        generator.setResolution(printer.resolution());
+                        p.begin(&generator);
                     }
                     else {
                         printer.newPage();


More information about the kimageshop mailing list