diff --git a/cypress/integration/ui/issues/issue-407.js b/cypress/integration/ui/issues/issue-407.js
new file mode 100644
index 00000000..101727d9
--- /dev/null
+++ b/cypress/integration/ui/issues/issue-407.js
@@ -0,0 +1,30 @@
+import {
+ visitAndApproveStorage
+} from '../../../support/ui-test-helper.js';
+
+// See https://github.com/SVG-Edit/svgedit/issues/407
+describe('Fix issue 407', function () {
+ beforeEach(() => {
+ visitAndApproveStorage();
+ });
+
+ it('can enter edit on text child', function () {
+ cy.get('#tool_source').click();
+ cy.get('#svg_source_textarea')
+ .type('{selectall}')
+ .type(``, {parseSpecialCharSequences: false});
+ cy.get('#tool_source_save').click();
+ cy.get('#svg_1').click().dblclick();
+ cy.get('#a_text').should('exist');
+ cy.get('#a_text').trigger('mousedown', {which: 1}).trigger('mouseup').dblclick().type('1234');
+ cy.get('#a_text').should('have.text', 'he1234llo');
+ });
+});
diff --git a/cypress/integration/ui/issues/issue-408.js b/cypress/integration/ui/issues/issue-408.js
new file mode 100644
index 00000000..66dd222c
--- /dev/null
+++ b/cypress/integration/ui/issues/issue-408.js
@@ -0,0 +1,29 @@
+import {
+ visitAndApproveStorage
+} from '../../../support/ui-test-helper.js';
+
+// See https://github.com/SVG-Edit/svgedit/issues/408
+describe('Fix issue 408', function () {
+ beforeEach(() => {
+ visitAndApproveStorage();
+ });
+
+ it('should not throw when showing/saving svg content', function () {
+ cy.get('#tool_source').click();
+ cy.get('#svg_source_textarea')
+ .type('{selectall}')
+ .type(``, {parseSpecialCharSequences: false});
+ cy.get('#tool_source_save').click();
+ cy.get('#svg_6').click().dblclick(); // change context
+ cy.get('#tool_source').click(); // reopen tool_source
+ cy.get('#tool_source_save').should('exist'); // The save button should be here if it does not throw
+ });
+});
diff --git a/editor/svgcanvas.js b/editor/svgcanvas.js
index d190a168..4c9d7804 100644
--- a/editor/svgcanvas.js
+++ b/editor/svgcanvas.js
@@ -692,10 +692,8 @@ const addToSelection = this.addToSelection = function (elemsToAdd, showGrips) {
}
call('selected', selectedElements);
- if (showGrips || selectedElements.length === 1) {
- selectorManager.requestSelector(selectedElements[0]).showGrips(true);
- } else {
- selectorManager.requestSelector(selectedElements[0]).showGrips(false);
+ if (selectedElements.length === 1) {
+ selectorManager.requestSelector(selectedElements[0]).showGrips(showGrips);
}
// make sure the elements are in the correct order
@@ -2889,9 +2887,6 @@ const dblClick = function (evt) {
const evtTarget = evt.target;
const parent = evtTarget.parentNode;
- // Do nothing if already in current group
- if (parent === currentGroup) { return; }
-
let mouseTarget = getMouseTarget(evt);
const {tagName} = mouseTarget;
@@ -2900,6 +2895,9 @@ const dblClick = function (evt) {
textActions.select(mouseTarget, pt.x, pt.y);
}
+ // Do nothing if already in current group
+ if (parent === currentGroup) { return; }
+
if ((tagName === 'g' || tagName === 'a') &&
getRotationAngle(mouseTarget)
) {