From 3cb59e3cf9208b1a9192c77ea16f1cb40630b0b0 Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Mon, 1 Jun 2026 17:51:42 +0200 Subject: [PATCH 1/2] fix(web): fix race displaying active keyboard in menu Fixes: #16041 Build-bot: skip release:web Test-bot: skip --- web/src/app/ui/kmwuitoggle.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/web/src/app/ui/kmwuitoggle.ts b/web/src/app/ui/kmwuitoggle.ts index 1aa4561465..3f48c26197 100644 --- a/web/src/app/ui/kmwuitoggle.ts +++ b/web/src/app/ui/kmwuitoggle.ts @@ -542,8 +542,18 @@ if(!keymanweb) { } // Highlight the last active keyboard - const sk=keymanweb.getSavedKeyboard().split(':'); - this.updateMenu(sk[0],sk[1]); + let activeKeyboard = keymanweb.getActiveKeyboard(); + let activeLanguage = ''; + if (activeKeyboard) { + activeLanguage = keymanweb.getActiveLanguage(); + } else { + // savedKeyboard is only correct if we use global keyboard settings, + // otherwise it's set to the first keyboard in the list + const savedKeyboard = keymanweb.getSavedKeyboard().split(':'); + activeKeyboard = savedKeyboard[0]; + activeLanguage = savedKeyboard[1]; + } + this.updateMenu(activeKeyboard, activeLanguage); } /* ---------------------------------------- From f82793636223119eb3a5416a6c59f31bf6c75637 Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Tue, 2 Jun 2026 12:15:12 +0200 Subject: [PATCH 2/2] fix(web): fix race in `kmwuifloat.ts` as well --- web/src/app/ui/kmwuifloat.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/web/src/app/ui/kmwuifloat.ts b/web/src/app/ui/kmwuifloat.ts index f67463cf48..add9b4f600 100644 --- a/web/src/app/ui/kmwuifloat.ts +++ b/web/src/app/ui/kmwuifloat.ts @@ -261,12 +261,19 @@ if(!keymanweb) { } this.updateList = false; - // Set the menu selector to the currently saved keyboard - const sk = keymanweb.getSavedKeyboard().split(':'); - if(sk.length < 2) { - sk[1] = ''; + // Set the menu selector to the last active keyboard + let activeKeyboard = keymanweb.getActiveKeyboard(); + let activeLanguage = ''; + if (activeKeyboard) { + activeLanguage = keymanweb.getActiveLanguage(); + } else { + // savedKeyboard is only correct if we use global keyboard settings, + // otherwise it's set to the first keyboard in the list + const savedKeyboard = keymanweb.getSavedKeyboard().split(':'); + activeKeyboard = savedKeyboard[0]; + activeLanguage = savedKeyboard.length < 2 ? '' : savedKeyboard[1]; } - this.updateMenu(sk[0],sk[1]); + this.updateMenu(activeKeyboard, activeLanguage); // Redisplay the UI to correct width for any new language entries if(keymanweb.getLastActiveElement()) {