Distributed confirmation dialog: all GUIs open on WAIT_USER, server closes all

- Browser: OK button sends Confirm without closing dialog; Escape blocked;
  dialog closes when state leaves WAIT_USER (server-driven).
- PyQt: non-blocking QDialog replaces blocking QMessageBox; OK sends Confirm
  without closing; dialog closed by server state change or on disconnect.
- ws_client.py: remove deprecated loop= params from websockets.connect() and
  asyncio.ensure_future() (same fix already applied to ws_server.py) so the
  PyQt client can actually connect with websockets >= 10.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tqxrk8uj4M3w3d3eXm3xK8
This commit is contained in:
2026-06-25 22:21:41 +02:00
co-authored by Claude Sonnet 4.6
parent dabec1fd31
commit 0215bac13e
4 changed files with 32 additions and 12 deletions
+5 -1
View File
@@ -483,6 +483,9 @@ function onSudChanged(msg) {
sudState = newState;
if (newState === WAIT_USER_STATE && prevState !== WAIT_USER_STATE && sudUserMessage) {
showUserMessage(sudUserMessage);
} else if (prevState === WAIT_USER_STATE && newState !== WAIT_USER_STATE) {
const dlg = document.getElementById('sud-message-dialog');
if (dlg.open) dlg.close();
}
updateStepPlates();
updateSudActions();
@@ -678,7 +681,8 @@ document.getElementById('btn-sud-pause').addEventListener('click', () => {
document.getElementById('btn-sud-stop').addEventListener('click', () => {
sendMsg('Sud', {Stop: true});
});
document.getElementById('sud-message-dialog').addEventListener('close', () => {
document.getElementById('sud-message-dialog').addEventListener('cancel', e => e.preventDefault());
document.getElementById('sud-message-ok').addEventListener('click', () => {
sendMsg('Sud', {Confirm: true});
});
+2 -2
View File
@@ -100,8 +100,8 @@
<dialog id="sud-message-dialog">
<p id="sud-message-text"></p>
<form method="dialog">
<button value="ok">OK</button>
<form>
<button id="sud-message-ok" type="button">OK</button>
</form>
</dialog>