diff --git a/client/js/editor/sidebar/json.js b/client/js/editor/sidebar/json.js index 95f1c364..3ede286e 100644 --- a/client/js/editor/sidebar/json.js +++ b/client/js/editor/sidebar/json.js @@ -35,7 +35,8 @@ class JsonModule extends SidebarModule { } else { jeEmpty(); } - $('#jeText').blur(); + if(!jeDeltaIsOurs) + $('#jeText').blur(); } renderModule(target) { @@ -70,7 +71,8 @@ class TreeModule extends SidebarModule { jeEmpty(); jeCenterSelection(); } - $('#jeText').blur(); + if(!jeDeltaIsOurs) + $('#jeText').blur(); } onStateReceivedWhileActive() { diff --git a/client/js/jsonedit.js b/client/js/jsonedit.js index fee58ade..4bf69c98 100644 --- a/client/js/jsonedit.js +++ b/client/js/jsonedit.js @@ -1483,12 +1483,15 @@ async function jeApplyChanges() { const currentState = JSON.stringify(jePostProcessObject(completeState)); if(currentStateRaw != jeStateBeforeRaw || jeKeyIsDownDeltas.length) { + const idChanged = JSON.parse(currentState).id != JSON.parse(jeStateBefore).id; jeDeltaIsOurs = true; await jeApplyExternalChanges(completeState); jeStateBeforeRaw = currentStateRaw; const oldState = jeStateBefore; jeStateBefore = currentState; await updateWidget(currentState, oldState); // in editmode.js + if(idChanged) + setSelection([ widgets.get(JSON.parse(currentState).id) ]); jeDeltaIsOurs = false; } } diff --git a/tests/testcafe/functions.js b/tests/testcafe/functions.js index 0834f88d..0924a7d2 100644 --- a/tests/testcafe/functions.js +++ b/tests/testcafe/functions.js @@ -150,11 +150,9 @@ test('Dynamic expressions', async t => { .click('#editButton') .click('#editorToolbar > div > [icon=add]') .click('#addBasicWidget') - .click('#room',{offsetX: 1, offsetY: 1, modifiers:{ctrl:true}}) .click(Selector('button').withAttribute('icon', 'data_object')) .typeText('#jeText', button, { replace: true, paste: true }) .rightClick('#w_jyo6') - .rightClick('#w_jyo6') .click(Selector('button').withAttribute('icon', 'pest_control')) const log = await Selector('#jeLog').textContent for (let i=0; i