Skip to content

Commit 64389c6

Browse files
committed
refactor: improve entry key release handling in StackWindow
- Enhanced logic to prevent filtering when a task is being edited or selected, ensuring a smoother user experience. - Updated character input handling to differentiate between editing a selected task and starting a new filter, improving clarity in task management interactions. - Cleaned up redundant code related to selection clearing, streamlining the entry management process.
1 parent d857150 commit 64389c6

1 file changed

Lines changed: 30 additions & 21 deletions

File tree

python/src/task_stack/window.py

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -972,15 +972,15 @@ def _on_entry_escape(self, _event: tk.Event) -> str:
972972
def _on_entry_key_release(self, event: tk.Event) -> None:
973973
if event.keysym in self._FILTER_IGNORED_KEYSYMS:
974974
return
975+
# When a row is selected (explicit edit mode or implicit edit-via-
976+
# selection), the entry contents are the task's title being edited,
977+
# not a filter query — don't filter or clear the selection.
978+
if self._editing_index is not None or self._selected:
979+
return
975980
new_text = self._entry.get()
976-
if new_text == self._filter_text and self._editing_index is None:
981+
if new_text == self._filter_text:
977982
return
978983
self._filter_text = new_text
979-
if self._editing_index is None and self._selected:
980-
self._selected = set()
981-
self._anchor = None
982-
self._cursor = None
983-
self._last_selected = frozenset()
984984
self._redraw()
985985

986986
# When Shift is held, numpad navigation keys report as KP_Up/KP_Down/etc.
@@ -1011,9 +1011,8 @@ def _on_key(self, event: tk.Event) -> None:
10111011

10121012
if event.keysym in ("Return", "KP_Enter"):
10131013
if len(self._selected) == 1:
1014-
self._entry.focus_set()
1015-
self._entry.select_range(0, tk.END)
1016-
self._entry.icursor(tk.END)
1014+
(sole,) = self._selected
1015+
self._begin_edit(sole)
10171016
return
10181017

10191018
# Digit keys select a row. Try keycode first (immune to Shift on main row),
@@ -1051,19 +1050,29 @@ def _on_key(self, event: tk.Event) -> None:
10511050
self._show_help()
10521051
return
10531052

1054-
# Printable character: redirect to entry and let the user type
1053+
# Printable character: redirect to entry and let the user type.
1054+
# If a row is selected, treat this as the start of an edit: the entry
1055+
# already holds the task title pre-selected, so replace it with the
1056+
# typed char and enter edit mode. Otherwise start a fresh filter.
10551057
if event.char and event.char.isprintable():
1056-
self._cancel_edit()
1057-
self._entry.delete(0, tk.END)
1058-
self._entry.focus_set()
1059-
self._entry.insert(tk.END, event.char)
1060-
self._filter_text = self._entry.get()
1061-
if self._selected:
1062-
self._selected = set()
1063-
self._anchor = None
1064-
self._cursor = None
1065-
self._last_selected = frozenset()
1066-
self._redraw()
1058+
if len(self._selected) == 1:
1059+
(sole,) = self._selected
1060+
self._begin_edit(sole)
1061+
self._entry.delete(0, tk.END)
1062+
self._entry.insert(tk.END, event.char)
1063+
self._entry.icursor(tk.END)
1064+
else:
1065+
self._cancel_edit()
1066+
self._entry.delete(0, tk.END)
1067+
self._entry.focus_set()
1068+
self._entry.insert(tk.END, event.char)
1069+
self._filter_text = self._entry.get()
1070+
if self._selected:
1071+
self._selected = set()
1072+
self._anchor = None
1073+
self._cursor = None
1074+
self._last_selected = frozenset()
1075+
self._redraw()
10671076
return
10681077

10691078
if event.keysym in ("Up", "Down"):

0 commit comments

Comments
 (0)