Keeps keyboard focus in the answer dialog. After a wrong answer the reopened dialog had no focus (Tk focus_get() was None), so the player had to click it. The dialog is lifted and focus is forced onto it and its entry each time it opens.
Adds task 8 to MIL-003, with RC-014 (code) and RC-015 (milestone re-review). Both are Go, with the AI as stand-in for S01 at S01's instruction; not independent.
Checks run locally and in CI: ruff, mypy --strict, 38 pytest tests, doxygen. ask_state_name needs a display and is verified only by a throwaway focus script.
Keeps keyboard focus in the answer dialog. After a wrong answer the reopened dialog had no focus (Tk `focus_get()` was `None`), so the player had to click it. The dialog is lifted and focus is forced onto it and its entry each time it opens.
Adds task 8 to MIL-003, with RC-014 (code) and RC-015 (milestone re-review). Both are Go, with the AI as stand-in for S01 at S01's instruction; not independent.
Checks run locally and in CI: ruff, mypy --strict, 38 pytest tests, doxygen. `ask_state_name` needs a display and is verified only by a throwaway focus script.
Closes #32
After a wrong answer the reopened dialog had no keyboard focus. The dialog is
lifted and focus is forced onto it and its entry each time it opens.
Task: MIL-003#8
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Keeps keyboard focus in the answer dialog. After a wrong answer the reopened dialog had no focus (Tk
focus_get()wasNone), so the player had to click it. The dialog is lifted and focus is forced onto it and its entry each time it opens.Adds task 8 to MIL-003, with RC-014 (code) and RC-015 (milestone re-review). Both are Go, with the AI as stand-in for S01 at S01's instruction; not independent.
Checks run locally and in CI: ruff, mypy --strict, 38 pytest tests, doxygen.
ask_state_nameneeds a display and is verified only by a throwaway focus script.Closes #32