Merge pull request #762 from novnc/saveimmediately

Save settings immediately
This commit is contained in:
Samuel Mannehed 2017-01-30 13:02:49 +01:00 committed by GitHub
commit 93c4b5caaa
2 changed files with 91 additions and 105 deletions

192
app/ui.js
View File

@ -143,9 +143,10 @@ var UI;
UI.toggleControlbarSide(); UI.toggleControlbarSide();
} }
// Setup and initialize event handlers UI.initFullscreen();
UI.setupWindowEvents();
UI.setupFullscreen(); // Setup event handlers
UI.addResizeHandlers();
UI.addControlbarHandlers(); UI.addControlbarHandlers();
UI.addTouchSpecificHandlers(); UI.addTouchSpecificHandlers();
UI.addExtraKeysHandlers(); UI.addExtraKeysHandlers();
@ -153,6 +154,8 @@ var UI;
UI.addConnectionControlHandlers(); UI.addConnectionControlHandlers();
UI.addClipboardHandlers(); UI.addClipboardHandlers();
UI.addSettingsHandlers(); UI.addSettingsHandlers();
document.getElementById("noVNC_status")
.addEventListener('click', UI.hideStatus);
UI.openControlbar(); 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() { initSettings: function() {
var i; var i;
@ -191,7 +208,7 @@ var UI;
// Settings with immediate effects // Settings with immediate effects
UI.initSetting('logging', 'warn'); 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 // if port == 80 (or 443) then it won't be present and should be
// set manually // set manually
@ -220,27 +237,38 @@ var UI;
UI.initSetting('reconnect_delay', 5000); 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.applyResizeMode);
window.addEventListener('resize', UI.updateViewClip); window.addEventListener('resize', UI.updateViewClip);
window.addEventListener('resize', UI.updateViewDrag); 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() { addControlbarHandlers: function() {
@ -375,14 +403,37 @@ var UI;
.addEventListener('click', UI.clipboardClear); .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() { addSettingsHandlers: function() {
document.getElementById("noVNC_settings_button") document.getElementById("noVNC_settings_button")
.addEventListener('click', UI.toggleSettingsPanel); .addEventListener('click', UI.toggleSettingsPanel);
document.getElementById("noVNC_settings_apply")
.addEventListener('click', UI.settingsApply);
document.getElementById("noVNC_setting_resize") UI.addSettingChangeHandler('encrypt');
.addEventListener('change', UI.enableDisableViewClip); 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() { addFullscreenHandlers: function() {
@ -395,30 +446,8 @@ var UI;
window.addEventListener('msfullscreenchange', UI.updateFullscreenButton); 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 * VISUAL
* ------v------*/ * ------v------*/
@ -478,7 +507,6 @@ var UI;
} }
UI.enableDisableViewClip(); UI.enableDisableViewClip();
document.getElementById('noVNC_setting_resize').disabled = UI.connected;
document.getElementById('noVNC_setting_shared').disabled = UI.connected; document.getElementById('noVNC_setting_shared').disabled = UI.connected;
document.getElementById('noVNC_setting_view_only').disabled = UI.connected; document.getElementById('noVNC_setting_view_only').disabled = UI.connected;
document.getElementById('noVNC_setting_host').disabled = UI.connected; document.getElementById('noVNC_setting_host').disabled = UI.connected;
@ -841,39 +869,6 @@ var UI;
return val; 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 * /SETTINGS
* ============== * ==============
@ -897,6 +892,7 @@ var UI;
UI.closeAllPanels(); UI.closeAllPanels();
UI.openControlbar(); UI.openControlbar();
// Refresh UI elements from saved cookies
UI.updateSetting('encrypt'); UI.updateSetting('encrypt');
UI.updateSetting('true_color'); UI.updateSetting('true_color');
if (Util.browserSupportsCursorURIs()) { if (Util.browserSupportsCursorURIs()) {
@ -928,13 +924,9 @@ var UI;
.classList.remove("noVNC_selected"); .classList.remove("noVNC_selected");
}, },
// Toggle the settings menu:
// On open, settings are refreshed from saved cookies.
// On close, settings are applied
toggleSettingsPanel: function() { toggleSettingsPanel: function() {
if (document.getElementById('noVNC_settings') if (document.getElementById('noVNC_settings')
.classList.contains("noVNC_open")) { .classList.contains("noVNC_open")) {
UI.settingsApply();
UI.closeSettingsPanel(); UI.closeSettingsPanel();
} else { } else {
UI.openSettingsPanel(); UI.openSettingsPanel();
@ -1052,19 +1044,10 @@ var UI;
.classList.remove("noVNC_open"); .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) { connect: function(event, password) {
var host = document.getElementById('noVNC_setting_host').value; var host = UI.getSetting('host');
var port = document.getElementById('noVNC_setting_port').value; var port = UI.getSetting('port');
var path = document.getElementById('noVNC_setting_path').value; var path = UI.getSetting('path');
if (typeof password === 'undefined') { if (typeof password === 'undefined') {
password = WebUtil.getConfigVar('password'); password = WebUtil.getConfigVar('password');
@ -1242,6 +1225,8 @@ var UI;
var display = UI.rfb.get_display(); var display = UI.rfb.get_display();
var resizeMode = UI.getSetting('resize'); var resizeMode = UI.getSetting('resize');
display.set_scale(1);
UI.rfb.get_mouse().set_scale(1);
if (resizeMode === 'remote') { if (resizeMode === 'remote') {
@ -1338,15 +1323,16 @@ var UI;
// Handle special cases where clipping is forced on/off or locked // Handle special cases where clipping is forced on/off or locked
enableDisableViewClip: function() { enableDisableViewClip: function() {
var resizeSetting = document.getElementById('noVNC_setting_resize'); var resizeSetting = UI.getSetting('resize');
if (UI.isSafari) { if (UI.isSafari) {
// Safari auto-hides the scrollbars which makes them // Safari auto-hides the scrollbars which makes them
// impossible to use in most cases // impossible to use in most cases
UI.setViewClip(true); UI.setViewClip(true);
document.getElementById('noVNC_setting_clip').disabled = 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 // Disable clipping if we are scaling
UI.forceSetting('clip', false);
UI.setViewClip(false); UI.setViewClip(false);
document.getElementById('noVNC_setting_clip').disabled = true; document.getElementById('noVNC_setting_clip').disabled = true;
} else if (document.msFullscreenElement) { } else if (document.msFullscreenElement) {
@ -1701,6 +1687,10 @@ var UI;
} }
}, },
updateLogging: function() {
WebUtil.init_logging(UI.getSetting('logging'));
},
updateSessionSize: function(rfb, width, height) { updateSessionSize: function(rfb, width, height) {
UI.updateViewClip(); UI.updateViewClip();
UI.updateViewDrag(); UI.updateViewDrag();

View File

@ -248,10 +248,6 @@
</li> </li>
</ul></div> </ul></div>
</li> </li>
<li><hr></li>
<li>
<input type="button" id="noVNC_settings_apply" value="Apply" class="noVNC_submit" />
</li>
</ul> </ul>
</div> </div>
</div> </div>