diff options
author | Samuel Mannehed <samuel@cendio.se> | 2017-01-30 13:02:49 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-30 13:02:49 +0100 |
commit | 93c4b5caaa1445c49efaccbad5b761ab1c88dc9d (patch) | |
tree | 665f8953e244c71679202c3dd4e1442ca81f2ffb | |
parent | 394ad22be91f7769e47b741b035f0fd51017e10d (diff) | |
parent | 623b1b7d96f20e5021e433f635a7cfa4c2c56f9b (diff) | |
download | novnc-93c4b5caaa1445c49efaccbad5b761ab1c88dc9d.tar.gz |
Merge pull request #762 from novnc/saveimmediately
Save settings immediately
-rw-r--r-- | app/ui.js | 192 | ||||
-rw-r--r-- | vnc.html | 4 |
2 files changed, 91 insertions, 105 deletions
@@ -143,9 +143,10 @@ var UI; UI.toggleControlbarSide(); } - // Setup and initialize event handlers - UI.setupWindowEvents(); - UI.setupFullscreen(); + UI.initFullscreen(); + + // Setup event handlers + UI.addResizeHandlers(); UI.addControlbarHandlers(); UI.addTouchSpecificHandlers(); UI.addExtraKeysHandlers(); @@ -153,6 +154,8 @@ var UI; UI.addConnectionControlHandlers(); UI.addClipboardHandlers(); UI.addSettingsHandlers(); + document.getElementById("noVNC_status") + .addEventListener('click', UI.hideStatus); UI.openControlbar(); @@ -180,6 +183,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; @@ -191,7 +208,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 @@ -220,27 +237,38 @@ var UI; UI.initSetting('reconnect_delay', 5000); }, - setupWindowEvents: function() { + 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); window.addEventListener('resize', UI.updateViewDrag); - - document.getElementById("noVNC_status") - .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() { @@ -375,14 +403,37 @@ 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('resize', UI.enableDisableViewClip); + UI.addSettingChangeHandler('resize', UI.applyResizeMode); + 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() { @@ -395,30 +446,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------*/ @@ -478,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; @@ -841,39 +869,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 - WebUtil.init_logging(UI.getSetting('logging')); - UI.updateViewClip(); - UI.updateViewDrag(); - //Util.Debug("<< settingsApply"); - }, - /* ------^------- * /SETTINGS * ============== @@ -897,6 +892,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 +924,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(); @@ -1052,19 +1044,10 @@ 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; - 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'); @@ -1242,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') { @@ -1338,15 +1323,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) { @@ -1701,6 +1687,10 @@ var UI; } }, + updateLogging: function() { + WebUtil.init_logging(UI.getSetting('logging')); + }, + updateSessionSize: function(rfb, width, height) { UI.updateViewClip(); UI.updateViewDrag(); @@ -248,10 +248,6 @@ </li> </ul></div> </li> - <li><hr></li> - <li> - <input type="button" id="noVNC_settings_apply" value="Apply" class="noVNC_submit" /> - </li> </ul> </div> </div> |