diff --git a/timetagger/app/dialogs.py b/timetagger/app/dialogs.py index 6a69dd8..147189e 100644 --- a/timetagger/app/dialogs.py +++ b/timetagger/app/dialogs.py @@ -1687,11 +1687,23 @@ def open(self, mode, record, callback=None): el.innerText = x self.maindiv.appendChild(el) + # Keep track of composing state (e.g. entering JCK characters) to avoid prematurely submitting on enter (#594) + self._is_composing = False + self._ds_input.addEventListener( + "compositionstart", lambda: self._set_compose_state(True) + ) + self._ds_input.addEventListener( + "compositionend", lambda: self._set_compose_state(False) + ) + # Almost done. Focus on ds if this looks like desktop; it's anoying on mobile super().open(callback) if utils.looks_like_desktop(): self._ds_input.focus() + def _set_compose_state(self, value): + self._is_composing = value + def _autocomp_finished(self): self._show_tags_from_ds() self._mark_as_edited() @@ -1854,6 +1866,8 @@ def _on_key(self, e): if self._autocompleter.on_key(e): e.stopPropagation() return + elif self._is_composing: + pass elif key == "enter" or key == "return": self.submit_soon() else: @@ -2406,10 +2420,22 @@ def open(self, tags, callback=None): self._records = [] + # Keep track of composing state (e.g. entering JCK characters) + self._is_composing = False + self._tagname2.addEventListener( + "compositionstart", lambda: self._set_compose_state(True) + ) + self._tagname2.addEventListener( + "compositionend", lambda: self._set_compose_state(False) + ) + super().open(callback) if utils.looks_like_desktop(): self._tagname2.focus() + def _set_compose_state(self, value): + self._is_composing = value + def close(self): self._records = [] super().close() @@ -2428,6 +2454,8 @@ def _on_name2_done(self): def _on_key2(self, e): key = e.key.lower() + if self._is_composing: + pass if key == "enter" or key == "return": e.stopPropagation() e.preventDefault() @@ -2578,6 +2606,18 @@ def open(self): if utils.looks_like_desktop(): self._search_input.focus() + # Keep track of composing state (e.g. entering JCK characters) + self._is_composing = False + self._search_input.addEventListener( + "compositionstart", lambda: self._set_compose_state(True) + ) + self._search_input.addEventListener( + "compositionend", lambda: self._set_compose_state(False) + ) + + def _set_compose_state(self, value): + self._is_composing = value + def close(self): self._autocompleter.close() self._records = [] @@ -2654,6 +2694,8 @@ def _on_key(self, e): if self._autocompleter.on_key(e): e.stopPropagation() return + elif self._is_composing: + pass elif key == "enter" or key == "return": e.stopPropagation() e.preventDefault()