From d31d18360bff7daa84dbc6992ac3b3a3252cef92 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 24 Jun 2013 10:37:53 -0700 Subject: [PATCH] Store untitled window state under load settings This keeps untitled windows from contaminating each other by storing to the same state path on disk but still stores state across reloads of the windows. Closes #599 --- src/app/atom.coffee | 29 ++++++++++++++++++++++------- src/atom-window.coffee | 2 +- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/app/atom.coffee b/src/app/atom.coffee index d5826701a..96b55103a 100644 --- a/src/app/atom.coffee +++ b/src/app/atom.coffee @@ -235,25 +235,40 @@ window.atom = sha1 = crypto.createHash('sha1').update(initialPath).digest('hex') filename = "editor-#{sha1}" - filename ?= 'undefined' - path.join(config.userStoragePath, filename) + if filename + path.join(config.userStoragePath, filename) + else + null + + saveWindowState: (windowState) -> + windowStateJson = JSON.stringify(windowState) + if windowStatePath = @getWindowStatePath() + fsUtils.writeSync(windowStatePath, windowStateJson) + else + @getLoadSettings().windowState = windowStateJson setWindowState: (keyPath, value) -> windowState = @getWindowState() _.setValueForKeyPath(windowState, keyPath, value) - fsUtils.writeSync(@getWindowStatePath(), JSON.stringify(windowState)) + @saveWindowState(windowState) windowState getWindowState: (keyPath) -> - windowStatePath = @getWindowStatePath() - return {} unless fsUtils.exists(windowStatePath) + if windowStatePath = @getWindowStatePath() + if fsUtils.exists(windowStatePath) + try + windowStateJson = fsUtils.read(windowStatePath) + catch error + console.warn "Error reading window state: #{windowStatePath}", error.stack, error + else + windowStateJson = @getLoadSettings().windowState try - windowState = JSON.parse(fsUtils.read(windowStatePath) or '{}') + windowState = JSON.parse(windowStateJson or '{}') catch error console.warn "Error parsing window state: #{windowStatePath}", error.stack, error - windowState = {} + windowState ?= {} if keyPath _.valueForKeyPath(windowState, keyPath) else diff --git a/src/atom-window.coffee b/src/atom-window.coffee index c0c8d2f46..fb4ee615c 100644 --- a/src/atom-window.coffee +++ b/src/atom-window.coffee @@ -20,7 +20,7 @@ class AtomWindow try initialPath = path.dirname(pathToOpen) if fs.statSync(pathToOpen).isFile() - @browserWindow.loadSettings = {initialPath, bootstrapScript, resourcePath, exitWhenDone} + @browserWindow.loadSettings = {initialPath, bootstrapScript, resourcePath, exitWhenDone, windowState: ''} @browserWindow.once 'window:loaded', => @loaded = true @browserWindow.loadUrl "file://#{resourcePath}/static/index.html"