Skip to content

Commit a5c788e

Browse files
authored
Avoid premature submit (#599)
* Avoid premature submit when entering text through composition (e.g. Japanese) * Also add compose-check for two other text fields
1 parent 33f91fe commit a5c788e

1 file changed

Lines changed: 42 additions & 0 deletions

File tree

timetagger/app/dialogs.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1687,11 +1687,23 @@ def open(self, mode, record, callback=None):
16871687
el.innerText = x
16881688
self.maindiv.appendChild(el)
16891689

1690+
# Keep track of composing state (e.g. entering JCK characters) to avoid prematurely submitting on enter (#594)
1691+
self._is_composing = False
1692+
self._ds_input.addEventListener(
1693+
"compositionstart", lambda: self._set_compose_state(True)
1694+
)
1695+
self._ds_input.addEventListener(
1696+
"compositionend", lambda: self._set_compose_state(False)
1697+
)
1698+
16901699
# Almost done. Focus on ds if this looks like desktop; it's anoying on mobile
16911700
super().open(callback)
16921701
if utils.looks_like_desktop():
16931702
self._ds_input.focus()
16941703

1704+
def _set_compose_state(self, value):
1705+
self._is_composing = value
1706+
16951707
def _autocomp_finished(self):
16961708
self._show_tags_from_ds()
16971709
self._mark_as_edited()
@@ -1854,6 +1866,8 @@ def _on_key(self, e):
18541866
if self._autocompleter.on_key(e):
18551867
e.stopPropagation()
18561868
return
1869+
elif self._is_composing:
1870+
pass
18571871
elif key == "enter" or key == "return":
18581872
self.submit_soon()
18591873
else:
@@ -2406,10 +2420,22 @@ def open(self, tags, callback=None):
24062420

24072421
self._records = []
24082422

2423+
# Keep track of composing state (e.g. entering JCK characters)
2424+
self._is_composing = False
2425+
self._tagname2.addEventListener(
2426+
"compositionstart", lambda: self._set_compose_state(True)
2427+
)
2428+
self._tagname2.addEventListener(
2429+
"compositionend", lambda: self._set_compose_state(False)
2430+
)
2431+
24092432
super().open(callback)
24102433
if utils.looks_like_desktop():
24112434
self._tagname2.focus()
24122435

2436+
def _set_compose_state(self, value):
2437+
self._is_composing = value
2438+
24132439
def close(self):
24142440
self._records = []
24152441
super().close()
@@ -2428,6 +2454,8 @@ def _on_name2_done(self):
24282454

24292455
def _on_key2(self, e):
24302456
key = e.key.lower()
2457+
if self._is_composing:
2458+
pass
24312459
if key == "enter" or key == "return":
24322460
e.stopPropagation()
24332461
e.preventDefault()
@@ -2578,6 +2606,18 @@ def open(self):
25782606
if utils.looks_like_desktop():
25792607
self._search_input.focus()
25802608

2609+
# Keep track of composing state (e.g. entering JCK characters)
2610+
self._is_composing = False
2611+
self._search_input.addEventListener(
2612+
"compositionstart", lambda: self._set_compose_state(True)
2613+
)
2614+
self._search_input.addEventListener(
2615+
"compositionend", lambda: self._set_compose_state(False)
2616+
)
2617+
2618+
def _set_compose_state(self, value):
2619+
self._is_composing = value
2620+
25812621
def close(self):
25822622
self._autocompleter.close()
25832623
self._records = []
@@ -2654,6 +2694,8 @@ def _on_key(self, e):
26542694
if self._autocompleter.on_key(e):
26552695
e.stopPropagation()
26562696
return
2697+
elif self._is_composing:
2698+
pass
26572699
elif key == "enter" or key == "return":
26582700
e.stopPropagation()
26592701
e.preventDefault()

0 commit comments

Comments
 (0)