From 8ffcea381ed76a45259c1f5786767902b925c7bf Mon Sep 17 00:00:00 2001 From: Jordan Tucker Date: Sat, 12 Mar 2016 01:48:59 -0800 Subject: [PATCH 1/5] load config in atom-application and pass it to auto-update-manager --- src/browser/atom-application.coffee | 7 ++++++- src/browser/auto-update-manager.coffee | 6 +----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/browser/atom-application.coffee b/src/browser/atom-application.coffee index 4767c9065..416202cc6 100644 --- a/src/browser/atom-application.coffee +++ b/src/browser/atom-application.coffee @@ -3,6 +3,7 @@ ApplicationMenu = require './application-menu' AtomProtocolHandler = require './atom-protocol-handler' AutoUpdateManager = require './auto-update-manager' StorageFolder = require '../storage-folder' +Config = require '../config' ipcHelpers = require '../ipc-helpers' {BrowserWindow, Menu, app, dialog, ipcMain, shell} = require 'electron' fs = require 'fs-plus' @@ -70,7 +71,11 @@ class AtomApplication @pidsToOpenWindows = {} @windows = [] - @autoUpdateManager = new AutoUpdateManager(@version, options.test, @resourcePath) + @config = new Config({configDirPath: process.env.ATOM_HOME, @resourcePath, enablePersistence: true}) + @config.setSchema null, {type: 'object', properties: _.clone(require('../config-schema'))} + @config.load() + + @autoUpdateManager = new AutoUpdateManager(@version, options.test, @resourcePath, @config) @applicationMenu = new ApplicationMenu(@version, @autoUpdateManager) @atomProtocolHandler = new AtomProtocolHandler(@resourcePath, @safeMode) diff --git a/src/browser/auto-update-manager.coffee b/src/browser/auto-update-manager.coffee index c8c57cb01..8cf06b833 100644 --- a/src/browser/auto-update-manager.coffee +++ b/src/browser/auto-update-manager.coffee @@ -1,6 +1,5 @@ autoUpdater = null _ = require 'underscore-plus' -Config = require '../config' {EventEmitter} = require 'events' path = require 'path' @@ -16,13 +15,10 @@ module.exports = class AutoUpdateManager _.extend @prototype, EventEmitter.prototype - constructor: (@version, @testMode, resourcePath) -> + constructor: (@version, @testMode, resourcePath, @config) -> @state = IdleState @iconPath = path.resolve(__dirname, '..', '..', 'resources', 'atom.png') @feedUrl = "https://atom.io/api/updates?version=#{@version}" - @config = new Config({configDirPath: process.env.ATOM_HOME, resourcePath, enablePersistence: true}) - @config.setSchema null, {type: 'object', properties: _.clone(require('../config-schema'))} - @config.load() process.nextTick => @setupAutoUpdater() setupAutoUpdater: -> From 4e4c85970bf93a0524af90f0331e9bb0f645fbf7 Mon Sep 17 00:00:00 2001 From: Jordan Tucker Date: Sat, 12 Mar 2016 01:49:38 -0800 Subject: [PATCH 2/5] add option to choose whether atom rememebers your last windows --- spec/integration/startup-spec.coffee | 30 ++++++++++++++++++++++++++++ src/browser/atom-application.coffee | 12 ++++++----- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/spec/integration/startup-spec.coffee b/spec/integration/startup-spec.coffee index f6b0e1cf3..136ca9676 100644 --- a/spec/integration/startup-spec.coffee +++ b/spec/integration/startup-spec.coffee @@ -268,6 +268,36 @@ describe "Starting Atom", -> [otherTempDirPath] ].sort() + it "doesn't reopen any previously opened windows if restorePreviousWindowsOnStart is disabled", -> + configPath = path.join(atomHome, 'config.cson') + config = CSON.readFileSync(configPath) + config['*'].core = {restorePreviousWindowsOnStart: false} + CSON.writeFileSync(configPath, config) + + runAtom [tempDirPath], {ATOM_HOME: atomHome}, (client) -> + client + .waitForExist("atom-workspace") + .waitForNewWindow(-> + @startAnotherAtom([otherTempDirPath], ATOM_HOME: atomHome) + , 5000) + .waitForExist("atom-workspace") + + runAtom [], {ATOM_HOME: atomHome}, (client) -> + windowProjectPaths = [] + + client + .waitForWindowCount(1, 10000) + .then ({value: windowHandles}) -> + @window(windowHandles[0]) + .waitForExist("atom-workspace") + .treeViewRootDirectories() + .then ({value: directories}) -> windowProjectPaths.push(directories) + + .call -> + expect(windowProjectPaths).toEqual [ + [] + ] + describe "opening a remote directory", -> it "opens the parent directory and creates an empty text editor", -> remoteDirectory = 'remote://server:3437/some/directory/path' diff --git a/src/browser/atom-application.coffee b/src/browser/atom-application.coffee index 416202cc6..d057aef52 100644 --- a/src/browser/atom-application.coffee +++ b/src/browser/atom-application.coffee @@ -506,12 +506,14 @@ class AtomApplication saveState: (allowEmpty=false) -> return if @quitting + restorePreviousState = @config.get('core.restorePreviousWindowsOnStart') ? true states = [] - for window in @windows - unless window.isSpec - if loadSettings = window.getLoadSettings() - states.push(initialPaths: loadSettings.initialPaths) - if states.length > 0 or allowEmpty + if restorePreviousState + for window in @windows + unless window.isSpec + if loadSettings = window.getLoadSettings() + states.push(initialPaths: loadSettings.initialPaths) + if states.length > 0 or allowEmpty or not restorePreviousState @storageFolder.storeSync('application.json', states) loadState: (options) -> From f4b94fef30a952efda6997e28d4c53973196fd3d Mon Sep 17 00:00:00 2001 From: Jordan Tucker Date: Tue, 29 Mar 2016 08:30:18 -0700 Subject: [PATCH 3/5] always save state on close, check config on open --- src/browser/atom-application.coffee | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/browser/atom-application.coffee b/src/browser/atom-application.coffee index d057aef52..eea2fdc57 100644 --- a/src/browser/atom-application.coffee +++ b/src/browser/atom-application.coffee @@ -506,18 +506,17 @@ class AtomApplication saveState: (allowEmpty=false) -> return if @quitting - restorePreviousState = @config.get('core.restorePreviousWindowsOnStart') ? true states = [] - if restorePreviousState - for window in @windows - unless window.isSpec - if loadSettings = window.getLoadSettings() - states.push(initialPaths: loadSettings.initialPaths) - if states.length > 0 or allowEmpty or not restorePreviousState + for window in @windows + unless window.isSpec + if loadSettings = window.getLoadSettings() + states.push(initialPaths: loadSettings.initialPaths) + if states.length > 0 or allowEmpty @storageFolder.storeSync('application.json', states) loadState: (options) -> - if (states = @storageFolder.load('application.json'))?.length > 0 + restorePreviousState = @config.get('core.restorePreviousWindowsOnStart') ? true + if (states = @storageFolder.load('application.json'))?.length > 0 and restorePreviousState for state in states @openWithOptions(_.extend(options, { initialPaths: state.initialPaths From cd41b1a0cad765506974ffec8b453e26984e094b Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 31 Mar 2016 10:40:39 +0200 Subject: [PATCH 4/5] Improve assertion This allows us to test that the configuration can be changed outside of Atom. --- spec/integration/startup-spec.coffee | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/spec/integration/startup-spec.coffee b/spec/integration/startup-spec.coffee index 136ca9676..7c2503e69 100644 --- a/spec/integration/startup-spec.coffee +++ b/spec/integration/startup-spec.coffee @@ -269,11 +269,6 @@ describe "Starting Atom", -> ].sort() it "doesn't reopen any previously opened windows if restorePreviousWindowsOnStart is disabled", -> - configPath = path.join(atomHome, 'config.cson') - config = CSON.readFileSync(configPath) - config['*'].core = {restorePreviousWindowsOnStart: false} - CSON.writeFileSync(configPath, config) - runAtom [tempDirPath], {ATOM_HOME: atomHome}, (client) -> client .waitForExist("atom-workspace") @@ -282,6 +277,11 @@ describe "Starting Atom", -> , 5000) .waitForExist("atom-workspace") + configPath = path.join(atomHome, 'config.cson') + config = CSON.readFileSync(configPath) + config['*'].core = {restorePreviousWindowsOnStart: false} + CSON.writeFileSync(configPath, config) + runAtom [], {ATOM_HOME: atomHome}, (client) -> windowProjectPaths = [] From 296c016bf866943589954c92d58132195c55a51a Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 31 Mar 2016 10:41:23 +0200 Subject: [PATCH 5/5] :racehorse: Don't load state when restorePreviousState is false --- src/browser/atom-application.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/browser/atom-application.coffee b/src/browser/atom-application.coffee index eea2fdc57..14713ee18 100644 --- a/src/browser/atom-application.coffee +++ b/src/browser/atom-application.coffee @@ -516,7 +516,7 @@ class AtomApplication loadState: (options) -> restorePreviousState = @config.get('core.restorePreviousWindowsOnStart') ? true - if (states = @storageFolder.load('application.json'))?.length > 0 and restorePreviousState + if restorePreviousState and (states = @storageFolder.load('application.json'))?.length > 0 for state in states @openWithOptions(_.extend(options, { initialPaths: state.initialPaths