From 0930a866c28c9b3e2d14c3ced140e06fce7aef69 Mon Sep 17 00:00:00 2001 From: r-zakarya <82443831+r-zakarya@users.noreply.github.com> Date: Fri, 28 Aug 2026 17:40:19 +0100 Subject: [PATCH] fix(android): le premier appui n'est plus mange par le clavier Un bouton touche pendant qu'un champ a le focus recevait d'abord le blur : le clavier se repliait, la reserve de body.typing disparaissait, la page remontait - et le bouton n'etait plus sous le doigt quand le clic partait. Il fallait appuyer deux fois, la premiere ne servant qu'a fermer le clavier. Empecher le defaut du mousedown empeche le TRANSFERT DE FOCUS, pas le clic : le champ garde le curseur, rien ne bouge, et l'appui atteint sa cible du premier coup. Pose sur toute la page - le piege n'a aucune raison d'etre propre aux reglages. Co-Authored-By: Claude Opus 5 --- android-client/web/app.html | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/android-client/web/app.html b/android-client/web/app.html index 42a09c4..3c2d50a 100644 --- a/android-client/web/app.html +++ b/android-client/web/app.html @@ -764,6 +764,25 @@ function showLog(on) { } document.getElementById('btnCfg').addEventListener('click', openSettings); +// LE PREMIER APPUI NE DOIT PAS ETRE MANGE PAR LE CLAVIER. +// +// Un bouton touche pendant qu'un champ a le focus recevait d'abord le blur : +// le clavier se repliait, la reserve de body.typing disparaissait, la page +// remontait - et le bouton n'etait plus sous le doigt quand le clic partait. Il +// fallait donc appuyer deux fois, la premiere ne servant qu'a fermer le +// clavier. C'est ce qui se voyait sur "Set this code". +// +// Empecher le defaut du mousedown empeche le TRANSFERT DE FOCUS, pas le clic : +// le champ garde le curseur, rien ne bouge, et l'appui atteint sa cible du +// premier coup. Pose une fois pour toute la page - le piege n'a aucune raison +// d'etre propre aux reglages. +document.addEventListener('mousedown', function (ev) { + var b = ev.target.closest('button'); + if (!b) return; + var a = document.activeElement; + if (a && (a.tagName === 'INPUT' || a.tagName === 'TEXTAREA')) ev.preventDefault(); +}, true); + function esc(s) { return String(s == null ? '' : s).replace(/[&<>"]/g, function (c) { return { '&': '&', '<': '<', '>': '>', '"': '"' }[c];