diff --git a/src/vaadin-rich-text-editor.html b/src/vaadin-rich-text-editor.html
index 2f64d00..7066801 100644
--- a/src/vaadin-rich-text-editor.html
+++ b/src/vaadin-rich-text-editor.html
@@ -675,9 +675,14 @@
}
__emitChangeEvent() {
- this.__debounceSetValue && this.__debounceSetValue.flush();
+ let lastCommittedChange = this.__lastCommittedChange;
- if (this.__lastCommittedChange !== this.value) {
+ if (this.__debounceSetValue && this.__debounceSetValue.isActive()) {
+ lastCommittedChange = this.value;
+ this.__debounceSetValue.flush();
+ }
+
+ if (lastCommittedChange !== this.value) {
this.dispatchEvent(new CustomEvent('change', {bubbles: true, cancelable: false}));
this.__lastCommittedChange = this.value;
}
diff --git a/test/basic.html b/test/basic.html
index 4172e07..d219874 100644
--- a/test/basic.html
+++ b/test/basic.html
@@ -443,6 +443,9 @@
// Emulate setting the value from keyboard
editor.focus();
setContent('Foo');
+ // Setting selection range to null in Quill
+ // Needed for proper hasFocus() check
+ content.blur();
content.dispatchEvent(new CustomEvent('focusout'));
expect(spy).to.be.calledOnce;
@@ -454,6 +457,7 @@
rte.value = JSON.stringify([{insert: 'Foo\n'}]);
editor.focus();
+ content.blur();
content.dispatchEvent(new CustomEvent('focusout'));
expect(spy).to.not.be.called;
@@ -475,6 +479,7 @@
btn.dispatchEvent(new MouseEvent('mousedown', {bubbles: true}));
const evt = new CustomEvent('focusout');
evt.relatedTarget = btn;
+ content.blur();
content.dispatchEvent(evt);
btn.click();
@@ -533,6 +538,7 @@
btn.dispatchEvent(new MouseEvent('mousedown', {bubbles: true}));
btn.click();
+ content.blur();
content.dispatchEvent(new CustomEvent('focusout'));
expect(spy).to.not.be.called;