Prefs, notifications and pot file

* Add a long timeout for some OSD notifications.
* Change some pref strings.
* "Stroke" -> "Outline"
* Clean pot file
This commit is contained in:
abakkk 2020-06-28 13:10:31 +02:00
parent f02d076ce2
commit be36fd4de2
5 changed files with 51 additions and 68 deletions

44
draw.js
View File

@ -130,7 +130,7 @@ const getJsonFiles = function() {
var DrawingArea = new Lang.Class({ var DrawingArea = new Lang.Class({
Name: 'DrawOnYourScreenDrawingArea', Name: 'DrawOnYourScreenDrawingArea',
Extends: St.DrawingArea, Extends: St.DrawingArea,
Signals: { 'show-osd': { param_types: [GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_DOUBLE] }, Signals: { 'show-osd': { param_types: [GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_DOUBLE, GObject.TYPE_BOOLEAN] },
'update-action-mode': {}, 'update-action-mode': {},
'leave-drawing-mode': {} }, 'leave-drawing-mode': {} },
@ -397,8 +397,8 @@ var DrawingArea = new Lang.Class({
event.get_key_symbol() == Clutter.KEY_KP_Enter || event.get_key_symbol() == Clutter.KEY_KP_Enter ||
event.get_key_symbol() == Clutter.KEY_Control_L) { event.get_key_symbol() == Clutter.KEY_Control_L) {
if (this.currentElement.points.length == 2) if (this.currentElement.points.length == 2)
this.emit('show-osd', null, _("Press <i>%s</i> to get a fourth control point") this.emit('show-osd', null, _("Press <i>%s</i> to get\na fourth control point")
.format(Gtk.accelerator_get_label(Clutter.KEY_Return, 0)), "", -1); .format(Gtk.accelerator_get_label(Clutter.KEY_Return, 0)), "", -1, true);
this.currentElement.addPoint(); this.currentElement.addPoint();
this.updatePointerCursor(true); this.updatePointerCursor(true);
this._redisplay(); this._redisplay();
@ -494,7 +494,7 @@ var DrawingArea = new Lang.Class({
if (this.grabbedElementLocked) { if (this.grabbedElementLocked) {
this.updatePointerCursor(); this.updatePointerCursor();
let label = controlPressed ? _("Mark a point of symmetry") : _("Draw a line of symmetry"); let label = controlPressed ? _("Mark a point of symmetry") : _("Draw a line of symmetry");
this.emit('show-osd', null, label, "", -1); this.emit('show-osd', null, label, "", -1, true);
return; return;
} }
} }
@ -617,7 +617,8 @@ var DrawingArea = new Lang.Class({
this.currentElement.startDrawing(startX, startY); this.currentElement.startDrawing(startX, startY);
if (this.currentTool == Shapes.POLYGON || this.currentTool == Shapes.POLYLINE) if (this.currentTool == Shapes.POLYGON || this.currentTool == Shapes.POLYLINE)
this.emit('show-osd', null, _("Press <i>%s</i> to mark vertices").format(Gtk.accelerator_get_label(Clutter.KEY_Return, 0)), "", -1); this.emit('show-osd', null, _("Press <i>%s</i> to mark vertices")
.format(Gtk.accelerator_get_label(Clutter.KEY_Return, 0)), "", -1, true);
this.motionHandler = this.connect('motion-event', (actor, event) => { this.motionHandler = this.connect('motion-event', (actor, event) => {
if (this.spaceKeyPressed) if (this.spaceKeyPressed)
@ -676,7 +677,8 @@ var DrawingArea = new Lang.Class({
_startWriting: function() { _startWriting: function() {
this.currentElement.text = ''; this.currentElement.text = '';
this.currentElement.cursorPosition = 0; this.currentElement.cursorPosition = 0;
this.emit('show-osd', null, _("Type your text and press <i>%s</i>").format(Gtk.accelerator_get_label(Clutter.KEY_Escape, 0)), "", -1); this.emit('show-osd', null, _("Type your text and press <i>%s</i>")
.format(Gtk.accelerator_get_label(Clutter.KEY_Escape, 0)), "", -1, true);
this._updateTextCursorTimeout(); this._updateTextCursorTimeout();
this.textHasCursor = true; this.textHasCursor = true;
this._redisplay(); this._redisplay();
@ -873,43 +875,43 @@ var DrawingArea = new Lang.Class({
this._redisplay(); this._redisplay();
} }
// Foreground color markup is not displayed since 3.36, use style instead but the transparency is lost. // Foreground color markup is not displayed since 3.36, use style instead but the transparency is lost.
this.emit('show-osd', null, this.currentColor.to_string(), this.currentColor.to_string().slice(0, 7), -1); this.emit('show-osd', null, this.currentColor.to_string(), this.currentColor.to_string().slice(0, 7), -1, false);
}, },
selectTool: function(tool) { selectTool: function(tool) {
this.currentTool = tool; this.currentTool = tool;
this.emit('show-osd', null, _(ToolNames[tool]), "", -1); this.emit('show-osd', null, _(ToolNames[tool]), "", -1, false);
this.updatePointerCursor(); this.updatePointerCursor();
}, },
toggleFill: function() { toggleFill: function() {
this.fill = !this.fill; this.fill = !this.fill;
this.emit('show-osd', null, this.fill ? _("Fill") : _("Stroke"), "", -1); this.emit('show-osd', null, this.fill ? _("Fill") : _("Outline"), "", -1, false);
}, },
toggleDash: function() { toggleDash: function() {
this.dashedLine = !this.dashedLine; this.dashedLine = !this.dashedLine;
this.emit('show-osd', null, this.dashedLine ? _("Dashed line") : _("Full line"), "", -1); this.emit('show-osd', null, this.dashedLine ? _("Dashed line") : _("Full line"), "", -1, false);
}, },
incrementLineWidth: function(increment) { incrementLineWidth: function(increment) {
this.currentLineWidth = Math.max(this.currentLineWidth + increment, 0); this.currentLineWidth = Math.max(this.currentLineWidth + increment, 0);
this.emit('show-osd', null, _("%d px").format(this.currentLineWidth), "", 2 * this.currentLineWidth); this.emit('show-osd', null, _("%d px").format(this.currentLineWidth), "", 2 * this.currentLineWidth, false);
}, },
toggleLineJoin: function() { toggleLineJoin: function() {
this.currentLineJoin = this.currentLineJoin == 2 ? 0 : this.currentLineJoin + 1; this.currentLineJoin = this.currentLineJoin == 2 ? 0 : this.currentLineJoin + 1;
this.emit('show-osd', null, _(LineJoinNames[this.currentLineJoin]), "", -1); this.emit('show-osd', null, _(LineJoinNames[this.currentLineJoin]), "", -1, false);
}, },
toggleLineCap: function() { toggleLineCap: function() {
this.currentLineCap = this.currentLineCap == 2 ? 0 : this.currentLineCap + 1; this.currentLineCap = this.currentLineCap == 2 ? 0 : this.currentLineCap + 1;
this.emit('show-osd', null, _(LineCapNames[this.currentLineCap]), "", -1); this.emit('show-osd', null, _(LineCapNames[this.currentLineCap]), "", -1, false);
}, },
toggleFillRule: function() { toggleFillRule: function() {
this.currentFillRule = this.currentFillRule == 1 ? 0 : this.currentFillRule + 1; this.currentFillRule = this.currentFillRule == 1 ? 0 : this.currentFillRule + 1;
this.emit('show-osd', null, _(FillRuleNames[this.currentFillRule]), "", -1); this.emit('show-osd', null, _(FillRuleNames[this.currentFillRule]), "", -1, false);
}, },
toggleFontWeight: function() { toggleFontWeight: function() {
@ -920,7 +922,8 @@ var DrawingArea = new Lang.Class({
this.currentElement.font.weight = this.currentFontWeight; this.currentElement.font.weight = this.currentFontWeight;
this._redisplay(); this._redisplay();
} }
this.emit('show-osd', null, `<span font_weight="${this.currentFontWeight}">${_(FontWeightNames[this.currentFontWeight])}</span>`, "", -1); this.emit('show-osd', null, `<span font_weight="${this.currentFontWeight}">` +
`${_(FontWeightNames[this.currentFontWeight])}</span>`, "", -1, false);
}, },
toggleFontStyle: function() { toggleFontStyle: function() {
@ -929,7 +932,8 @@ var DrawingArea = new Lang.Class({
this.currentElement.font.style = this.currentFontStyle; this.currentElement.font.style = this.currentFontStyle;
this._redisplay(); this._redisplay();
} }
this.emit('show-osd', null, `<span font_style="${FontStyleNames[this.currentFontStyle].toLowerCase()}">${_(FontStyleNames[this.currentFontStyle])}</span>`, "", -1); this.emit('show-osd', null, `<span font_style="${FontStyleNames[this.currentFontStyle].toLowerCase()}">` +
`${_(FontStyleNames[this.currentFontStyle])}</span>`, "", -1, false);
}, },
toggleFontFamily: function() { toggleFontFamily: function() {
@ -939,7 +943,7 @@ var DrawingArea = new Lang.Class({
this.currentElement.font.family = currentFontFamily; this.currentElement.font.family = currentFontFamily;
this._redisplay(); this._redisplay();
} }
this.emit('show-osd', null, `<span font_family="${currentFontFamily}">${_(currentFontFamily)}</span>`, "", -1); this.emit('show-osd', null, `<span font_family="${currentFontFamily}">${_(currentFontFamily)}</span>`, "", -1, false);
}, },
toggleTextAlignment: function() { toggleTextAlignment: function() {
@ -948,7 +952,7 @@ var DrawingArea = new Lang.Class({
this.currentElement.textRightAligned = this.currentTextRightAligned; this.currentElement.textRightAligned = this.currentTextRightAligned;
this._redisplay(); this._redisplay();
} }
this.emit('show-osd', null, this.currentTextRightAligned ? _("Right aligned") : _("Left aligned"), "", -1); this.emit('show-osd', null, this.currentTextRightAligned ? _("Right aligned") : _("Left aligned"), "", -1, false);
}, },
toggleHelp: function() { toggleHelp: function() {
@ -1119,7 +1123,7 @@ var DrawingArea = new Lang.Class({
GLib.idle_add(GLib.PRIORITY_DEFAULT_IDLE, () => { GLib.idle_add(GLib.PRIORITY_DEFAULT_IDLE, () => {
GLib.file_set_contents(path, contents); GLib.file_set_contents(path, contents);
if (notify) if (notify)
this.emit('show-osd', 'document-save-symbolic', name, "", -1); this.emit('show-osd', 'document-save-symbolic', name, "", -1, false);
if (name != Me.metadata['persistent-file-name']) { if (name != Me.metadata['persistent-file-name']) {
this.jsonName = name; this.jsonName = name;
this.lastJsonContents = contents; this.lastJsonContents = contents;
@ -1171,7 +1175,7 @@ var DrawingArea = new Lang.Class({
this.elements.push(...JSON.parse(contents).map(object => new DrawingElement(object))); this.elements.push(...JSON.parse(contents).map(object => new DrawingElement(object)));
if (notify) if (notify)
this.emit('show-osd', 'document-open-symbolic', name, "", -1); this.emit('show-osd', 'document-open-symbolic', name, "", -1, false);
if (name != Me.metadata['persistent-file-name']) { if (name != Me.metadata['persistent-file-name']) {
this.jsonName = name; this.jsonName = name;
this.lastJsonContents = contents; this.lastJsonContents = contents;

View File

@ -81,18 +81,18 @@ var AreaManager = new Lang.Class({
Shell.ActionMode.ALL, Shell.ActionMode.ALL,
this.toggleDrawing.bind(this)); this.toggleDrawing.bind(this));
Main.wm.addKeybinding('erase-drawing',
this.settings,
Meta.KeyBindingFlags.NONE,
Shell.ActionMode.ALL,
this.eraseDrawing.bind(this));
Main.wm.addKeybinding('toggle-modal', Main.wm.addKeybinding('toggle-modal',
this.settings, this.settings,
Meta.KeyBindingFlags.NONE, Meta.KeyBindingFlags.NONE,
Shell.ActionMode.ALL, Shell.ActionMode.ALL,
this.toggleModal.bind(this)); this.toggleModal.bind(this));
Main.wm.addKeybinding('erase-drawing',
this.settings,
Meta.KeyBindingFlags.NONE,
Shell.ActionMode.ALL,
this.eraseDrawing.bind(this));
this.updateAreas(); this.updateAreas();
this.monitorChangedHandler = Main.layoutManager.connect('monitors-changed', this.updateAreas.bind(this)); this.monitorChangedHandler = Main.layoutManager.connect('monitors-changed', this.updateAreas.bind(this));
@ -536,8 +536,8 @@ var AreaManager = new Lang.Class({
if (this.activeArea) if (this.activeArea)
this.toggleDrawing(); this.toggleDrawing();
Main.wm.removeKeybinding('toggle-drawing'); Main.wm.removeKeybinding('toggle-drawing');
Main.wm.removeKeybinding('erase-drawing');
Main.wm.removeKeybinding('toggle-modal'); Main.wm.removeKeybinding('toggle-modal');
Main.wm.removeKeybinding('erase-drawing');
this.removeAreas(); this.removeAreas();
if (this.indicator) if (this.indicator)
this.indicator.disable(); this.indicator.disable();

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Draw On Your Screen VERSION\n" "Project-Id-Version: Draw On Your Screen VERSION\n"
"Report-Msgid-Bugs-To: https://framagit.org/abakkk/DrawOnYourScreen/issues\n" "Report-Msgid-Bugs-To: https://framagit.org/abakkk/DrawOnYourScreen/issues\n"
"POT-Creation-Date: 2020-01-03 08:00+0100\n" "POT-Creation-Date: 2019-03-04 16:40+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -74,7 +74,9 @@ msgstr ""
msgid "Mirror" msgid "Mirror"
msgstr "" msgstr ""
msgid "Press <i>%s</i> to get a fourth control point" msgid ""
"Press <i>%s</i> to get\n"
"a fourth control point"
msgstr "" msgstr ""
msgid "Mark a point of symmetry" msgid "Mark a point of symmetry"
@ -115,7 +117,6 @@ msgid "Left aligned"
msgstr "" msgstr ""
#: helper #: helper
msgid "Screenshot" msgid "Screenshot"
msgstr "" msgstr ""
@ -132,7 +133,6 @@ msgid "System"
msgstr "" msgstr ""
#: menu #: menu
msgid "Undo" msgid "Undo"
msgstr "" msgstr ""
@ -162,7 +162,6 @@ msgid "Save drawing"
msgstr "" msgstr ""
#: prefs.js #: prefs.js
msgid "Preferences" msgid "Preferences"
msgstr "" msgstr ""
@ -170,18 +169,16 @@ msgid "About"
msgstr "" msgstr ""
#: GLOBAL_KEYBINDINGS #: GLOBAL_KEYBINDINGS
msgid "Enter/leave drawing mode" msgid "Enter/leave drawing mode"
msgstr "" msgstr ""
msgid "Erase all drawings"
msgstr ""
msgid "Toggle modeless/modal" msgid "Toggle modeless/modal"
msgstr "" msgstr ""
#: INTERNAL_KEYBINDINGS msgid "Erase all drawings"
msgstr ""
#: INTERNAL_KEYBINDINGS
msgid "Undo last brushstroke" msgid "Undo last brushstroke"
msgstr "" msgstr ""
@ -194,9 +191,6 @@ msgstr ""
msgid "Smooth last brushstroke" msgid "Smooth last brushstroke"
msgstr "" msgstr ""
msgid "Free drawing"
msgstr ""
msgid "Select line" msgid "Select line"
msgstr "" msgstr ""
@ -248,10 +242,6 @@ msgstr ""
msgid "Toggle fill rule" msgid "Toggle fill rule"
msgstr "" msgstr ""
#: already in draw.js
#:msgid "Dashed line"
#:msgstr ""
msgid "Change font family (generic name)" msgid "Change font family (generic name)"
msgstr "" msgstr ""
@ -282,10 +272,6 @@ msgstr ""
msgid "Open next drawing" msgid "Open next drawing"
msgstr "" msgstr ""
#: already in draw.js
#:msgid "Save drawing"
#:msgstr ""
msgid "Save drawing as a SVG file" msgid "Save drawing as a SVG file"
msgstr "" msgstr ""
@ -299,7 +285,6 @@ msgid "Show help"
msgstr "" msgstr ""
#: OTHER_SHORTCUTS #: OTHER_SHORTCUTS
msgid "Draw" msgid "Draw"
msgstr "" msgstr ""
@ -341,15 +326,12 @@ msgstr ""
msgid "Select eraser <span alpha=\"50%\">(while starting drawing)</span>" msgid "Select eraser <span alpha=\"50%\">(while starting drawing)</span>"
msgstr "" msgstr ""
msgid "Duplicate <span alpha=\"50%\">(while starting moving, resizing or mirroring)</span>" msgid "Duplicate <span alpha=\"50%\">(while starting handling)</span>"
msgstr "" msgstr ""
msgid "Rotate rectangle, polygon, polyline" msgid "Rotate rectangle, polygon, polyline"
msgstr "" msgstr ""
msgid "Translate text area"
msgstr ""
msgid "Extend circle to ellipse" msgid "Extend circle to ellipse"
msgstr "" msgstr ""
@ -369,7 +351,6 @@ msgid "Inverse <span alpha=\"50%\">(while mirroring)</span>"
msgstr "" msgstr ""
#: About page #: About page
# You are free to translate the extension name, that is displayed in About page, or not. # You are free to translate the extension name, that is displayed in About page, or not.
msgid "Draw On You Screen" msgid "Draw On You Screen"
msgstr "" msgstr ""
@ -381,7 +362,6 @@ msgid "Start drawing with Super+Alt+D and save your beautiful work by taking a s
msgstr "" msgstr ""
#: Prefs page #: Prefs page
msgid "Global" msgid "Global"
msgstr "" msgstr ""
@ -415,7 +395,7 @@ msgid ""
msgstr "" msgstr ""
msgid "" msgid ""
"<u>Note</u>: When you save elements made with <b>eraser</b> in a <b>SVG</b> file, " "When you save elements made with <b>eraser</b> in a <b>SVG</b> file, "
"they are colored with background color, transparent if it is disabled.\n" "they are colored with background color, transparent if it is disabled.\n"
"See <i>“%s”</i> or edit the SVG file afterwards." "See <i>“%s”</i> or edit the SVG file afterwards."
msgstr "" msgstr ""

View File

@ -37,8 +37,8 @@ const MARGIN = 10;
var GLOBAL_KEYBINDINGS = { var GLOBAL_KEYBINDINGS = {
'toggle-drawing': "Enter/leave drawing mode", 'toggle-drawing': "Enter/leave drawing mode",
'erase-drawing': "Erase all drawings", 'toggle-modal': "Toggle modeless/modal",
'toggle-modal': "Toggle modeless/modal" 'erase-drawing': "Erase all drawings"
}; };
var INTERNAL_KEYBINDINGS = { var INTERNAL_KEYBINDINGS = {
@ -58,7 +58,7 @@ var INTERNAL_KEYBINDINGS = {
'select-resize-tool': "Select resize", 'select-resize-tool': "Select resize",
'select-mirror-tool': "Select mirror", 'select-mirror-tool': "Select mirror",
'-separator-2': '', '-separator-2': '',
'toggle-fill': "Toggle fill/stroke", 'toggle-fill': "Toggle fill/outline",
'toggle-fill-rule': "Toggle fill rule", 'toggle-fill-rule': "Toggle fill rule",
'-separator-3': '', '-separator-3': '',
'increment-line-width': "Increment line width", 'increment-line-width': "Increment line width",
@ -99,16 +99,15 @@ function getKeyLabel(accel) {
var OTHER_SHORTCUTS = [ var OTHER_SHORTCUTS = [
{ desc: "Draw", get shortcut() { return _("Left click"); } }, { desc: "Draw", get shortcut() { return _("Left click"); } },
{ desc: "Menu", get shortcut() { return _("Right click"); } }, { desc: "Menu", get shortcut() { return _("Right click"); } },
{ desc: "Toggle fill/stroke", get shortcut() { return _("Center click"); } }, { desc: "Toggle fill/outline", get shortcut() { return _("Center click"); } },
{ desc: "Increment/decrement line width", get shortcut() { return _("Scroll"); } }, { desc: "Increment/decrement line width", get shortcut() { return _("Scroll"); } },
{ desc: "Select color", get shortcut() { return _("%s … %s").format(getKeyLabel('<Primary>1'), getKeyLabel('<Primary>9')); } }, { desc: "Select color", get shortcut() { return _("%s … %s").format(getKeyLabel('<Primary>1'), getKeyLabel('<Primary>9')); } },
{ desc: "Ignore pointer movement", get shortcut() { return _("%s held").format(getKeyLabel('space')); } }, { desc: "Ignore pointer movement", get shortcut() { return _("%s held").format(getKeyLabel('space')); } },
{ desc: "Leave", shortcut: getKeyLabel('Escape') }, { desc: "Leave", shortcut: getKeyLabel('Escape') },
{ desc: "-separator-1", shortcut: "" }, { desc: "-separator-1", shortcut: "" },
{ desc: "Select eraser <span alpha=\"50%\">(while starting drawing)</span>", shortcut: getKeyLabel('<Shift>') }, { desc: "Select eraser <span alpha=\"50%\">(while starting drawing)</span>", shortcut: getKeyLabel('<Shift>') },
{ desc: "Duplicate <span alpha=\"50%\">(while starting moving, resizing or mirroring)</span>", shortcut: getKeyLabel('<Shift>') }, { desc: "Duplicate <span alpha=\"50%\">(while starting handling)</span>", shortcut: getKeyLabel('<Shift>') },
{ desc: "Rotate rectangle, polygon, polyline", shortcut: getKeyLabel('<Primary>') }, { desc: "Rotate rectangle, polygon, polyline", shortcut: getKeyLabel('<Primary>') },
{ desc: "Translate text area", shortcut: getKeyLabel('<Primary>') },
{ desc: "Extend circle to ellipse", shortcut: getKeyLabel('<Primary>') }, { desc: "Extend circle to ellipse", shortcut: getKeyLabel('<Primary>') },
{ desc: "Curve line", shortcut: getKeyLabel('<Primary>') }, { desc: "Curve line", shortcut: getKeyLabel('<Primary>') },
{ desc: "Smooth free drawing stroke", shortcut: getKeyLabel('<Primary>') }, { desc: "Smooth free drawing stroke", shortcut: getKeyLabel('<Primary>') },
@ -326,7 +325,7 @@ const PrefsPage = new GObject.Class({
wrap: true, wrap: true,
xalign: 0, xalign: 0,
use_markup: true, use_markup: true,
label: _("<u>Note</u>: When you save elements made with <b>eraser</b> in a <b>SVG</b> file, " + label: _("When you save elements made with <b>eraser</b> in a <b>SVG</b> file, " +
"they are colored with background color, transparent if it is disabled.\n" + "they are colored with background color, transparent if it is disabled.\n" +
"See <i>“%s”</i> or edit the SVG file afterwards.").format(_("Add a drawing background")) "See <i>“%s”</i> or edit the SVG file afterwards.").format(_("Add a drawing background"))
}); });

View File

@ -26,16 +26,16 @@
<summary>toggle drawing</summary> <summary>toggle drawing</summary>
<description>enter or leave drawing mode</description> <description>enter or leave drawing mode</description>
</key> </key>
<key type="as" name="erase-drawing">
<default>["&lt;Alt&gt;&lt;Super&gt;e"]</default>
<summary>erase drawing</summary>
<description>erase drawing</description>
</key>
<key type="as" name="toggle-modal"> <key type="as" name="toggle-modal">
<default>["&lt;Primary&gt;&lt;Alt&gt;&lt;Super&gt;d"]</default> <default>["&lt;Primary&gt;&lt;Alt&gt;&lt;Super&gt;d"]</default>
<summary>toggle modeless/modal</summary> <summary>toggle modeless/modal</summary>
<description>toggle modeless/modal</description> <description>toggle modeless/modal</description>
</key> </key>
<key type="as" name="erase-drawing">
<default>["&lt;Alt&gt;&lt;Super&gt;e"]</default>
<summary>erase drawing</summary>
<description>erase drawing</description>
</key>
<key type="as" name="undo"> <key type="as" name="undo">
<default>["&lt;Primary&gt;z"]</default> <default>["&lt;Primary&gt;z"]</default>
<summary>undo</summary> <summary>undo</summary>