diff --git a/browser/api/lib/auto-updater.coffee b/browser/api/lib/auto-updater.coffee index 81c22f16d57b..c18580f46107 100644 --- a/browser/api/lib/auto-updater.coffee +++ b/browser/api/lib/auto-updater.coffee @@ -8,4 +8,15 @@ autoUpdater.on 'update-downloaded-raw', (args...) -> args[3] = new Date(args[3]) # releaseDate @emit 'update-downloaded', args..., => @quitAndInstall() +autoUpdater.quitAndInstall = -> + # Do the restart after all windows have been closed. + app = require 'app' + app.removeAllListeners 'window-all-closed' + app.once 'window-all-closed', AutoUpdater::quitAndInstall.bind(this) + + # Tell all windows to remove beforeunload handler and then close itself. + ipc = require 'ipc' + BrowserWindow = require 'browser-window' + ipc.sendChannel win.getProcessId(), win.getRoutingId(), 'ATOM_SHELL_SILENT_CLOSE' for win in BrowserWindow.getAllWindows() + module.exports = autoUpdater diff --git a/renderer/lib/init.coffee b/renderer/lib/init.coffee index 8c061149cd46..64d9b75af177 100644 --- a/renderer/lib/init.coffee +++ b/renderer/lib/init.coffee @@ -50,6 +50,16 @@ window.onerror = (error) -> else false +# Enable browser to close window silently. +setTimeout -> + require('ipc').once 'ATOM_SHELL_SILENT_CLOSE', -> + window.onbeforeunload = null + window.close() + +# Override default window.close. +window.close = -> + require('remote').getCurrentWindow().close() + # Override default window.open. window.open = (url, name, features) -> options = {}