diff --git a/systemvm/agent/noVNC/app/images/shift.png b/systemvm/agent/noVNC/app/images/shift.png
new file mode 100644
index 00000000000..b79d6973c8b
Binary files /dev/null and b/systemvm/agent/noVNC/app/images/shift.png differ
diff --git a/systemvm/agent/noVNC/app/ui.js b/systemvm/agent/noVNC/app/ui.js
index 9158c33f317..1c6a00799c3 100644
--- a/systemvm/agent/noVNC/app/ui.js
+++ b/systemvm/agent/noVNC/app/ui.js
@@ -282,6 +282,8 @@ const UI = {
.addEventListener('click', UI.toggleExtraKeys);
document.getElementById("noVNC_toggle_ctrl_button")
.addEventListener('click', UI.toggleCtrl);
+ document.getElementById("noVNC_toggle_shift_button")
+ .addEventListener('click', UI.toggleShift);
document.getElementById("noVNC_toggle_windows_button")
.addEventListener('click', UI.toggleWindows);
document.getElementById("noVNC_toggle_alt_button")
@@ -1551,6 +1553,17 @@ const UI = {
}
},
+ toggleShift() {
+ const btn = document.getElementById('noVNC_toggle_shift_button');
+ if (btn.classList.contains("noVNC_selected")) {
+ UI.sendKey(KeyTable.XK_Shift_L, "ShiftLeft", false);
+ btn.classList.remove("noVNC_selected");
+ } else {
+ UI.sendKey(KeyTable.XK_Shift_L, "ShiftLeft", true);
+ btn.classList.add("noVNC_selected");
+ }
+ },
+
toggleWindows() {
const btn = document.getElementById('noVNC_toggle_windows_button');
if (btn.classList.contains("noVNC_selected")) {
diff --git a/systemvm/agent/noVNC/vnc.html b/systemvm/agent/noVNC/vnc.html
index 04c00291abb..6f1b7998fe4 100644
--- a/systemvm/agent/noVNC/vnc.html
+++ b/systemvm/agent/noVNC/vnc.html
@@ -107,6 +107,9 @@
+