From 443858cf831763618a27521b95b67ce94bb613fa Mon Sep 17 00:00:00 2001 From: Samuel Mannehed Date: Fri, 25 Oct 2019 17:44:20 +0200 Subject: [PATCH] Move focus to the screen when using extra keys A regression from 2afda54 and friends was that you couldn't use the extra keys and then directly use the keyboard, you would have to click in the session first. This commit restores the correct behavior and also adds a visual queue to the fact that the screen got the focus by fading the controlbar. --- kasmweb/app/ui.js | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/kasmweb/app/ui.js b/kasmweb/app/ui.js index 0b1102c..60c952b 100644 --- a/kasmweb/app/ui.js +++ b/kasmweb/app/ui.js @@ -1874,20 +1874,20 @@ const UI = { }, sendEsc() { - UI.rfb.sendKey(KeyTable.XK_Escape, "Escape"); + UI.sendKey(KeyTable.XK_Escape, "Escape"); }, sendTab() { - UI.rfb.sendKey(KeyTable.XK_Tab, "Tab"); + UI.sendKey(KeyTable.XK_Tab, "Tab"); }, toggleCtrl() { const btn = document.getElementById('noVNC_toggle_ctrl_button'); if (btn.classList.contains("noVNC_selected")) { - UI.rfb.sendKey(KeyTable.XK_Control_L, "ControlLeft", false); + UI.sendKey(KeyTable.XK_Control_L, "ControlLeft", false); btn.classList.remove("noVNC_selected"); } else { - UI.rfb.sendKey(KeyTable.XK_Control_L, "ControlLeft", true); + UI.sendKey(KeyTable.XK_Control_L, "ControlLeft", true); btn.classList.add("noVNC_selected"); } }, @@ -1895,10 +1895,10 @@ const UI = { toggleWindows() { const btn = document.getElementById('noVNC_toggle_windows_button'); if (btn.classList.contains("noVNC_selected")) { - UI.rfb.sendKey(KeyTable.XK_Super_L, "MetaLeft", false); + UI.sendKey(KeyTable.XK_Super_L, "MetaLeft", false); btn.classList.remove("noVNC_selected"); } else { - UI.rfb.sendKey(KeyTable.XK_Super_L, "MetaLeft", true); + UI.sendKey(KeyTable.XK_Super_L, "MetaLeft", true); btn.classList.add("noVNC_selected"); } }, @@ -1906,16 +1906,29 @@ const UI = { toggleAlt() { const btn = document.getElementById('noVNC_toggle_alt_button'); if (btn.classList.contains("noVNC_selected")) { - UI.rfb.sendKey(KeyTable.XK_Alt_L, "AltLeft", false); + UI.sendKey(KeyTable.XK_Alt_L, "AltLeft", false); btn.classList.remove("noVNC_selected"); } else { - UI.rfb.sendKey(KeyTable.XK_Alt_L, "AltLeft", true); + UI.sendKey(KeyTable.XK_Alt_L, "AltLeft", true); btn.classList.add("noVNC_selected"); } }, sendCtrlAltDel() { UI.rfb.sendCtrlAltDel(); + // See below + UI.rfb.focus(); + UI.idleControlbar(); + }, + + sendKey(keysym, code, down) { + UI.rfb.sendKey(keysym, code, down); + // move focus to the screen in order to be able to + // use the keyboard right after these extra keys + UI.rfb.focus(); + // fade out the controlbar to highlight that + // the focus has been moved to the screen + UI.idleControlbar(); }, /* ------^-------