From aa90547519558304b24888a33f35b049b703340b Mon Sep 17 00:00:00 2001 From: Samuel Mannehed Date: Mon, 23 Jan 2017 12:15:09 +0100 Subject: [PATCH 1/7] Add UI wrapper for Webutil.init_logging --- app/ui.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/ui.js b/app/ui.js index 284b940f..7269bc3e 100644 --- a/app/ui.js +++ b/app/ui.js @@ -191,7 +191,7 @@ var UI; // Settings with immediate effects UI.initSetting('logging', 'warn'); - WebUtil.init_logging(UI.getSetting('logging')); + UI.updateLogging(); // if port == 80 (or 443) then it won't be present and should be // set manually @@ -868,7 +868,7 @@ var UI; UI.saveSetting('reconnect_delay'); // Settings with immediate (non-connected related) effect - WebUtil.init_logging(UI.getSetting('logging')); + UI.updateLogging(); UI.updateViewClip(); UI.updateViewDrag(); //Util.Debug("<< settingsApply"); @@ -1701,6 +1701,10 @@ var UI; } }, + updateLogging: function() { + WebUtil.init_logging(UI.getSetting('logging')); + }, + updateSessionSize: function(rfb, width, height) { UI.updateViewClip(); UI.updateViewDrag(); From 0b09e9cb6f1730fd506a072586bc8a952095ccac Mon Sep 17 00:00:00 2001 From: Samuel Mannehed Date: Mon, 23 Jan 2017 12:16:01 +0100 Subject: [PATCH 2/7] Remove unused toggleConnectPanel function --- app/ui.js | 9 --------- 1 file changed, 9 deletions(-) diff --git a/app/ui.js b/app/ui.js index 7269bc3e..7212a751 100644 --- a/app/ui.js +++ b/app/ui.js @@ -1052,15 +1052,6 @@ var UI; .classList.remove("noVNC_open"); }, - toggleConnectPanel: function() { - if (document.getElementById('noVNC_connect_dlg') - .classList.contains("noVNC_open")) { - UI.closeConnectPanel(); - } else { - UI.openConnectPanel(); - } - }, - connect: function(event, password) { var host = document.getElementById('noVNC_setting_host').value; var port = document.getElementById('noVNC_setting_port').value; From dceda58642a72384d9afaf46c79a4dd59bb5cf11 Mon Sep 17 00:00:00 2001 From: Samuel Mannehed Date: Mon, 23 Jan 2017 12:20:45 +0100 Subject: [PATCH 3/7] Save settings immediately Retire the old settingsApply. This also allows UI logic to check the state of things using the settings instead of having to look at the values of HTML elements (we couldn't be sure if the changes were applied yet or not). --- app/ui.js | 78 +++++++++++++++++++++++-------------------------------- vnc.html | 4 --- 2 files changed, 32 insertions(+), 50 deletions(-) diff --git a/app/ui.js b/app/ui.js index 7212a751..5fda992b 100644 --- a/app/ui.js +++ b/app/ui.js @@ -375,14 +375,35 @@ var UI; .addEventListener('click', UI.clipboardClear); }, + // Add a call to save settings when the element changes, + // unless the optional parameter changeFunc is used instead. + addSettingChangeHandler: function(name, changeFunc) { + var settingElem = document.getElementById("noVNC_setting_" + name); + if (changeFunc === undefined) { + changeFunc = function () { UI.saveSetting(name); }; + } + settingElem.addEventListener('change', changeFunc); + }, + addSettingsHandlers: function() { document.getElementById("noVNC_settings_button") .addEventListener('click', UI.toggleSettingsPanel); - document.getElementById("noVNC_settings_apply") - .addEventListener('click', UI.settingsApply); - document.getElementById("noVNC_setting_resize") - .addEventListener('change', UI.enableDisableViewClip); + UI.addSettingChangeHandler('encrypt'); + UI.addSettingChangeHandler('true_color'); + UI.addSettingChangeHandler('cursor'); + UI.addSettingChangeHandler('resize'); + UI.addSettingChangeHandler('clip'); + UI.addSettingChangeHandler('shared'); + UI.addSettingChangeHandler('view_only'); + UI.addSettingChangeHandler('host'); + UI.addSettingChangeHandler('port'); + UI.addSettingChangeHandler('path'); + UI.addSettingChangeHandler('repeaterID'); + UI.addSettingChangeHandler('logging'); + UI.addSettingChangeHandler('logging', UI.updateLogging); + UI.addSettingChangeHandler('reconnect'); + UI.addSettingChangeHandler('reconnect_delay'); }, addFullscreenHandlers: function() { @@ -841,39 +862,6 @@ var UI; return val; }, - // Save/apply settings when 'Apply' button is pressed - settingsApply: function() { - //Util.Debug(">> settingsApply"); - UI.saveSetting('encrypt'); - UI.saveSetting('true_color'); - if (Util.browserSupportsCursorURIs()) { - UI.saveSetting('cursor'); - } - - UI.saveSetting('resize'); - - if (UI.getSetting('resize') === 'downscale' || UI.getSetting('resize') === 'scale') { - UI.forceSetting('clip', false); - } - - UI.saveSetting('clip'); - UI.saveSetting('shared'); - UI.saveSetting('view_only'); - UI.saveSetting('host'); - UI.saveSetting('port'); - UI.saveSetting('path'); - UI.saveSetting('repeaterID'); - UI.saveSetting('logging'); - UI.saveSetting('reconnect'); - UI.saveSetting('reconnect_delay'); - - // Settings with immediate (non-connected related) effect - UI.updateLogging(); - UI.updateViewClip(); - UI.updateViewDrag(); - //Util.Debug("<< settingsApply"); - }, - /* ------^------- * /SETTINGS * ============== @@ -897,6 +885,7 @@ var UI; UI.closeAllPanels(); UI.openControlbar(); + // Refresh UI elements from saved cookies UI.updateSetting('encrypt'); UI.updateSetting('true_color'); if (Util.browserSupportsCursorURIs()) { @@ -928,13 +917,9 @@ var UI; .classList.remove("noVNC_selected"); }, - // Toggle the settings menu: - // On open, settings are refreshed from saved cookies. - // On close, settings are applied toggleSettingsPanel: function() { if (document.getElementById('noVNC_settings') .classList.contains("noVNC_open")) { - UI.settingsApply(); UI.closeSettingsPanel(); } else { UI.openSettingsPanel(); @@ -1053,9 +1038,9 @@ var UI; }, connect: function(event, password) { - var host = document.getElementById('noVNC_setting_host').value; - var port = document.getElementById('noVNC_setting_port').value; - var path = document.getElementById('noVNC_setting_path').value; + var host = UI.getSetting('host'); + var port = UI.getSetting('port'); + var path = UI.getSetting('path'); if (typeof password === 'undefined') { password = WebUtil.getConfigVar('password'); @@ -1329,15 +1314,16 @@ var UI; // Handle special cases where clipping is forced on/off or locked enableDisableViewClip: function() { - var resizeSetting = document.getElementById('noVNC_setting_resize'); + var resizeSetting = UI.getSetting('resize'); if (UI.isSafari) { // Safari auto-hides the scrollbars which makes them // impossible to use in most cases UI.setViewClip(true); document.getElementById('noVNC_setting_clip').disabled = true; - } else if (resizeSetting.value === 'downscale' || resizeSetting.value === 'scale') { + } else if (resizeSetting === 'downscale' || resizeSetting === 'scale') { // Disable clipping if we are scaling + UI.forceSetting('clip', false); UI.setViewClip(false); document.getElementById('noVNC_setting_clip').disabled = true; } else if (document.msFullscreenElement) { diff --git a/vnc.html b/vnc.html index 5943aeed..0048046d 100644 --- a/vnc.html +++ b/vnc.html @@ -248,10 +248,6 @@ -

  • -
  • - -
  • From b3d91b78e132494fcfa2fdafa1c85caff8788bd0 Mon Sep 17 00:00:00 2001 From: Samuel Mannehed Date: Mon, 23 Jan 2017 13:25:55 +0100 Subject: [PATCH 4/7] Rename and move init function for fullscreen --- app/ui.js | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/app/ui.js b/app/ui.js index 5fda992b..8c208eb8 100644 --- a/app/ui.js +++ b/app/ui.js @@ -143,9 +143,10 @@ var UI; UI.toggleControlbarSide(); } - // Setup and initialize event handlers + UI.initFullscreen(); + + // Setup event handlers UI.setupWindowEvents(); - UI.setupFullscreen(); UI.addControlbarHandlers(); UI.addTouchSpecificHandlers(); UI.addExtraKeysHandlers(); @@ -180,6 +181,20 @@ var UI; } }, + initFullscreen: function() { + // Only show the button if fullscreen is properly supported + // * Safari doesn't support alphanumerical input while in fullscreen + if (!UI.isSafari && + (document.documentElement.requestFullscreen || + document.documentElement.mozRequestFullScreen || + document.documentElement.webkitRequestFullscreen || + document.body.msRequestFullscreen)) { + document.getElementById('noVNC_fullscreen_button') + .classList.remove("noVNC_hidden"); + UI.addFullscreenHandlers(); + } + }, + initSettings: function() { var i; @@ -229,20 +244,6 @@ var UI; .addEventListener('click', UI.hideStatus); }, - setupFullscreen: function() { - // Only show the button if fullscreen is properly supported - // * Safari doesn't support alphanumerical input while in fullscreen - if (!UI.isSafari && - (document.documentElement.requestFullscreen || - document.documentElement.mozRequestFullScreen || - document.documentElement.webkitRequestFullscreen || - document.body.msRequestFullscreen)) { - document.getElementById('noVNC_fullscreen_button') - .classList.remove("noVNC_hidden"); - UI.addFullscreenHandlers(); - } - }, - addControlbarHandlers: function() { document.getElementById("noVNC_control_bar") .addEventListener('mousemove', UI.activateControlbar); From 3fdc69ceda028d68ce6b828b71f512a8c2d83928 Mon Sep 17 00:00:00 2001 From: Samuel Mannehed Date: Mon, 23 Jan 2017 14:53:12 +0100 Subject: [PATCH 5/7] Rename function for adding resize handlers Moves the one handler for the status out of the function as well. It didn't fit in with the function's old name either. --- app/ui.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/ui.js b/app/ui.js index 8c208eb8..4b9b27d4 100644 --- a/app/ui.js +++ b/app/ui.js @@ -146,7 +146,7 @@ var UI; UI.initFullscreen(); // Setup event handlers - UI.setupWindowEvents(); + UI.addResizeHandlers(); UI.addControlbarHandlers(); UI.addTouchSpecificHandlers(); UI.addExtraKeysHandlers(); @@ -154,6 +154,8 @@ var UI; UI.addConnectionControlHandlers(); UI.addClipboardHandlers(); UI.addSettingsHandlers(); + document.getElementById("noVNC_status") + .addEventListener('click', UI.hideStatus); UI.openControlbar(); @@ -235,13 +237,10 @@ var UI; UI.initSetting('reconnect_delay', 5000); }, - setupWindowEvents: function() { + addResizeHandlers: function() { window.addEventListener('resize', UI.applyResizeMode); window.addEventListener('resize', UI.updateViewClip); window.addEventListener('resize', UI.updateViewDrag); - - document.getElementById("noVNC_status") - .addEventListener('click', UI.hideStatus); }, addControlbarHandlers: function() { From 59387b34ea68d529f661a490b1d7f42af9772f70 Mon Sep 17 00:00:00 2001 From: Samuel Mannehed Date: Mon, 23 Jan 2017 14:54:31 +0100 Subject: [PATCH 6/7] Separate init functions from event handling setup Adds a new section for all functions that add event handlers. --- app/ui.js | 52 +++++++++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/app/ui.js b/app/ui.js index 4b9b27d4..9f0cf169 100644 --- a/app/ui.js +++ b/app/ui.js @@ -237,6 +237,34 @@ var UI; UI.initSetting('reconnect_delay', 5000); }, + initRFB: function() { + try { + UI.rfb = new RFB({'target': document.getElementById('noVNC_canvas'), + 'onNotification': UI.notification, + 'onUpdateState': UI.updateState, + 'onDisconnected': UI.disconnectFinished, + 'onPasswordRequired': UI.passwordRequired, + 'onXvpInit': UI.updateXvpButton, + 'onClipboard': UI.clipboardReceive, + 'onBell': UI.bell, + 'onFBUComplete': UI.initialResize, + 'onFBResize': UI.updateSessionSize, + 'onDesktopName': UI.updateDesktopName}); + return true; + } catch (exc) { + var msg = "Unable to create RFB client -- " + exc; + Util.Error(msg); + UI.showStatus(msg, 'error'); + return false; + } + }, + +/* ------^------- + * /INIT + * ============== + * EVENT HANDLERS + * ------v------*/ + addResizeHandlers: function() { window.addEventListener('resize', UI.applyResizeMode); window.addEventListener('resize', UI.updateViewClip); @@ -416,30 +444,8 @@ var UI; window.addEventListener('msfullscreenchange', UI.updateFullscreenButton); }, - initRFB: function() { - try { - UI.rfb = new RFB({'target': document.getElementById('noVNC_canvas'), - 'onNotification': UI.notification, - 'onUpdateState': UI.updateState, - 'onDisconnected': UI.disconnectFinished, - 'onPasswordRequired': UI.passwordRequired, - 'onXvpInit': UI.updateXvpButton, - 'onClipboard': UI.clipboardReceive, - 'onBell': UI.bell, - 'onFBUComplete': UI.initialResize, - 'onFBResize': UI.updateSessionSize, - 'onDesktopName': UI.updateDesktopName}); - return true; - } catch (exc) { - var msg = "Unable to create RFB client -- " + exc; - Util.Error(msg); - UI.showStatus(msg, 'error'); - return false; - } - }, - /* ------^------- - * /INIT + * /EVENT HANDLERS * ============== * VISUAL * ------v------*/ From 623b1b7d96f20e5021e433f635a7cfa4c2c56f9b Mon Sep 17 00:00:00 2001 From: Samuel Mannehed Date: Mon, 23 Jan 2017 15:37:04 +0100 Subject: [PATCH 7/7] Allow resize setting to be changed while connected There is no reason to why this shouldn't be possible. --- app/ui.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/ui.js b/app/ui.js index 9f0cf169..d51d9195 100644 --- a/app/ui.js +++ b/app/ui.js @@ -421,6 +421,8 @@ var UI; UI.addSettingChangeHandler('true_color'); UI.addSettingChangeHandler('cursor'); UI.addSettingChangeHandler('resize'); + UI.addSettingChangeHandler('resize', UI.enableDisableViewClip); + UI.addSettingChangeHandler('resize', UI.applyResizeMode); UI.addSettingChangeHandler('clip'); UI.addSettingChangeHandler('shared'); UI.addSettingChangeHandler('view_only'); @@ -505,7 +507,6 @@ var UI; } UI.enableDisableViewClip(); - document.getElementById('noVNC_setting_resize').disabled = UI.connected; document.getElementById('noVNC_setting_shared').disabled = UI.connected; document.getElementById('noVNC_setting_view_only').disabled = UI.connected; document.getElementById('noVNC_setting_host').disabled = UI.connected; @@ -1224,6 +1225,8 @@ var UI; var display = UI.rfb.get_display(); var resizeMode = UI.getSetting('resize'); + display.set_scale(1); + UI.rfb.get_mouse().set_scale(1); if (resizeMode === 'remote') {