Added 'show' & 'hide' events to browser-window, fixed visibilitychange event in renderer

This commit is contained in:
Arek Sredzki
2016-03-08 09:36:41 -08:00
parent ee61ab2d26
commit c1267b2320
8 changed files with 88 additions and 60 deletions

View File

@@ -20,7 +20,7 @@ BrowserWindow.prototype._init = function() {
}
// Make new windows requested by links behave like "window.open"
this.webContents.on('-new-window', function(event, url, frameName) {
this.webContents.on('-new-window', (event, url, frameName) => {
var options;
options = {
show: true,
@@ -32,27 +32,21 @@ BrowserWindow.prototype._init = function() {
// window.resizeTo(...)
// window.moveTo(...)
this.webContents.on('move', (function(_this) {
return function(event, size) {
return _this.setBounds(size);
};
})(this));
this.webContents.on('move', (event, title) => {
return this.setBounds(size);
});
// Hide the auto-hide menu when webContents is focused.
this.webContents.on('activate', (function(_this) {
return function() {
if (process.platform !== 'darwin' && _this.isMenuBarAutoHide() && _this.isMenuBarVisible()) {
return _this.setMenuBarVisibility(false);
}
};
})(this));
this.webContents.on('activate', () => {
if (process.platform !== 'darwin' && this.isMenuBarAutoHide() && this.isMenuBarVisible()) {
return this.setMenuBarVisibility(false);
}
});
// Forward the crashed event.
this.webContents.on('crashed', (function(_this) {
return function() {
return _this.emit('crashed');
};
})(this));
this.webContents.on('crashed', () => {
return this.emit('crashed');
});
// Change window title to page title.
this.webContents.on('page-title-updated', (event, title) => {
@@ -77,48 +71,40 @@ BrowserWindow.prototype._init = function() {
});
// Redirect focus/blur event to app instance too.
this.on('blur', (function(_this) {
return function(event) {
return app.emit('browser-window-blur', event, _this);
};
})(this));
this.on('focus', (function(_this) {
return function(event) {
return app.emit('browser-window-focus', event, _this);
};
})(this));
this.on('blur', (event) => {
return app.emit('browser-window-blur', event, this);
});
this.on('focus', (event) => {
return app.emit('browser-window-focus', event, this);
});
// Evented visibilityState changes
this.on('minimize', (function(_this) {
return function() {
return _this.webContents.send('ATOM_RENDERER_WINDOW_VISIBILITY_CHANGE', false);
};
})(this));
this.on('restore', (function(_this) {
return function() {
return _this.webContents.send('ATOM_RENDERER_WINDOW_VISIBILITY_CHANGE', true);
};
})(this));
this.on('show', () => {
return this.webContents.send('ATOM_RENDERER_WINDOW_VISIBILITY_CHANGE', true, this.isMinimized());
});
this.on('hide', () => {
return this.webContents.send('ATOM_RENDERER_WINDOW_VISIBILITY_CHANGE', false, this.isMinimized());
});
this.on('minimize', () => {
return this.webContents.send('ATOM_RENDERER_WINDOW_VISIBILITY_CHANGE', this.isVisible(), true);
});
this.on('restore', () => {
return this.webContents.send('ATOM_RENDERER_WINDOW_VISIBILITY_CHANGE', this.isVisible(), false);
});
// Notify the creation of the window.
app.emit('browser-window-created', {}, this);
// Be compatible with old APIs.
this.webContents.on('devtools-focused', (function(_this) {
return function() {
return _this.emit('devtools-focused');
};
})(this));
this.webContents.on('devtools-opened', (function(_this) {
return function() {
return _this.emit('devtools-opened');
};
})(this));
this.webContents.on('devtools-closed', (function(_this) {
return function() {
return _this.emit('devtools-closed');
};
})(this));
this.webContents.on('devtools-focused', () => {
return this.emit('devtools-focused');
});
this.webContents.on('devtools-opened', () => {
return this.emit('devtools-opened');
});
this.webContents.on('devtools-closed', () => {
return this.emit('devtools-closed');
});
return Object.defineProperty(this, 'devToolsWebContents', {
enumerable: true,
configurable: false,

View File

@@ -4,10 +4,13 @@ const remote = require('electron').remote;
var slice = [].slice;
// Cache browser window visibility
var _isVisible = (function() {
var _isVisible = true;
var _isMinimized = false;
(function() {
var currentWindow;
currentWindow = remote.getCurrentWindow();
return currentWindow.isMinimized() || !currentWindow.isVisible();
_isVisible = currentWindow.isVisible();
_isMinimized = currentWindow.isMinimized();
})();
// Helper function to resolve relative url.
@@ -177,10 +180,15 @@ if (process.openerId != null) {
window.opener = BrowserWindowProxy.getOrCreate(process.openerId);
}
ipcRenderer.on('ATOM_RENDERER_WINDOW_VISIBILITY_CHANGE', function (event, isVisible) {
_isVisible = isVisible;
ipcRenderer.on('ATOM_RENDERER_WINDOW_VISIBILITY_CHANGE', function (event, isVisible, isMinimized) {
var hasChanged = _isVisible != isVisible || _isMinimized != isMinimized;
if (hasChanged) {
_isVisible = isVisible;
_isMinimized = isMinimized;
document.dispatchEvent(new Event('visibilitychange'));
document.dispatchEvent(new Event('visibilitychange'));
}
});
ipcRenderer.on('ATOM_SHELL_GUEST_WINDOW_POSTMESSAGE', function(event, sourceId, message, sourceOrigin) {
@@ -227,12 +235,14 @@ Object.defineProperty(window.history, 'length', {
// Make document.hidden and document.visibilityState return the correct value.
Object.defineProperty(document, 'hidden', {
get: !_isVisible
get: function () {
return _isMinimized || !_isVisible;
}
});
Object.defineProperty(document, 'visibilityState', {
get: function() {
if (_isVisible) {
if (_isVisible && !_isMinimized) {
return "visible";
} else {
return "hidden";