diff --git a/app/ui.js b/app/ui.js index 53e2b4346..786c84bf8 100644 --- a/app/ui.js +++ b/app/ui.js @@ -25,6 +25,9 @@ window.updateSetting = (name, value) => { } } +import '@interactjs/pointer-events' +import '@interactjs/actions/drag' +import interact from '@interactjs/interact'; import "core-js/stable"; import "regenerator-runtime/runtime"; import * as Log from '../core/util/logging.js'; @@ -67,6 +70,7 @@ const UI = { selectedMonitor: null, refreshRotation: 0, currentDisplay: null, + displayWindows: ['primary'], supportsBroadcastChannel: (typeof BroadcastChannel !== "undefined"), @@ -84,7 +88,13 @@ const UI = { // Render default UI and initialize settings menu start() { - //initialize settings then apply quality presents + + // If secondary monitor skip init + if (window.location.href.includes("screen.html")) { + return; + } + + // Initialize settings then apply quality presents UI.initSettings(); UI.updateQuality(); @@ -265,6 +275,7 @@ const UI = { UI.initSetting('prefer_local_cursor', true); UI.initSetting('toggle_control_panel', false); UI.initSetting('enable_perf_stats', false); + UI.initSetting('enable_threading', true); UI.initSetting('virtual_keyboard_visible', false); UI.initSetting('enable_ime', false); UI.initSetting('enable_webrtc', false); @@ -529,6 +540,7 @@ const UI = { UI.addClickHandle('noVNC_settings_button', UI.toggleSettingsPanel); document.getElementById("noVNC_setting_enable_perf_stats").addEventListener('click', UI.showStats); + document.getElementById("noVNC_setting_enable_threading").addEventListener('click', UI.threading); document.getElementById("noVNC_auto_placement").addEventListener('change', UI.setAutoPlacement); UI.addSettingChangeHandler('encrypt'); @@ -597,6 +609,8 @@ const UI = { UI.addSettingChangeHandler('enable_webrtc', UI.toggleWebRTC); UI.addSettingChangeHandler('enable_hidpi'); UI.addSettingChangeHandler('enable_hidpi', UI.enableHiDpi); + UI.addSettingChangeHandler('enable_threading'); + UI.addSettingChangeHandler('enable_threading', UI.threading); }, addFullscreenHandlers() { @@ -742,6 +756,17 @@ const UI = { }, + threading() { + if (UI.rfb) { + if (UI.getSetting('enable_threading')) { + UI.rfb.threading = true; + } else { + UI.rfb.threading = false; + } + } + UI.saveSetting('enable_threading'); + }, + showStatus(text, statusType, time, kasm = false) { // If inside the full Kasm CDI framework, don't show messages unless explicitly told to if (WebUtil.isInsideKasmVDI() && !kasm) { @@ -1482,6 +1507,7 @@ const UI = { UI.rfb.clipboardBinary = supportsBinaryClipboard() && UI.rfb.clipboardSeamless; UI.rfb.enableWebRTC = UI.getSetting('enable_webrtc'); UI.rfb.enableHiDpi = UI.getSetting('enable_hidpi'); + UI.rfb.threading = UI.getSetting('enable_threading'); UI.rfb.mouseButtonMapper = UI.initMouseButtonMapper(); if (UI.rfb.videoQuality === 5) { UI.rfb.enableQOI = true; @@ -1792,6 +1818,10 @@ const UI = { case 'control_displays': parent.postMessage({ action: 'can_control_displays', value: true}, '*' ); break; + case 'enable_threading': + UI.forceSetting('enable_threading', event.data.value, false); + UI.threading(); + break; case 'terminate': //terminate a session, different then disconnect in that it is assumed KasmVNC will be shutdown if (UI.rfb) { @@ -1892,6 +1922,7 @@ const UI = { UI.rfb.videoQuality = UI.getSetting('video_quality'); UI.rfb.enableWebP = UI.getSetting('enable_webp'); UI.rfb.enableHiDpi = UI.getSetting('enable_hidpi'); + UI.rfb.threading = UI.getSetting('enable_threading'); if (UI.rfb.resizeSession) { UI.rfb.forcedResolutionX = null; @@ -1982,8 +2013,9 @@ const UI = { const current = UI.increaseCurrentDisplay(details) let screen = details.screens[current] const options = 'left='+screen.availLeft+',top='+screen.availTop+',width='+screen.availWidth+',height='+screen.availHeight+',fullscreen' - window.open(new_display_url, '_blank', options); - return + let newdisplay = window.open(new_display_url, '_blank', options); + UI.displayWindows.push(newdisplay); + return; } } catch (e) { console.log(e) @@ -1992,7 +2024,8 @@ const UI = { } Log.Debug(`Opening a secondary display ${new_display_url}`) - window.open(new_display_url, '_blank', 'toolbar=0,location=0,menubar=0'); + let newdisplay = window.open(new_display_url, '_blank', 'toolbar=0,location=0,menubar=0'); + UI.displayWindows.push(newdisplay); }, initMonitors(screenPlan) { @@ -2545,6 +2578,7 @@ const UI = { UI.rfb.videoQuality = parseInt(UI.getSetting('video_quality')); UI.rfb.enableQOI = enable_qoi; UI.rfb.enableHiDpi = UI.getSetting('enable_hidpi'); + UI.rfb.threading = UI.getSetting('enable_threading'); // Gracefully update settings server side UI.rfb.updateConnectionSettings(); diff --git a/vnc.html b/index.html similarity index 98% rename from vnc.html rename to index.html index e5b517753..24956467a 100644 --- a/vnc.html +++ b/index.html @@ -47,12 +47,9 @@ - + - - + @@ -275,6 +272,13 @@

Enable Performance Stats +
  • + +