Merge branch 'master' into tj-upgrade-electron

This commit is contained in:
Antonio Scandurra
2017-05-16 14:39:47 +02:00
15 changed files with 85 additions and 36 deletions

View File

@@ -46,8 +46,6 @@ deploy: off
artifacts:
- path: out\AtomSetup.exe
name: AtomSetup.exe
- path: out\AtomSetup.msi
name: AtomSetup.msi
- path: out\atom-windows.zip
name: atom-windows.zip
- path: out\RELEASES

View File

@@ -1,7 +1,7 @@
{
"name": "atom",
"productName": "Atom",
"version": "1.18.0-dev",
"version": "1.19.0-dev",
"description": "A hackable text editor for the 21st Century.",
"main": "./src/main-process/main.js",
"repository": {
@@ -39,7 +39,6 @@
"grim": "1.5.0",
"jasmine-json": "~0.0",
"jasmine-tagged": "^1.1.4",
"jquery": "2.1.4",
"key-path-helpers": "^0.4.0",
"less-cache": "1.1.0",
"line-top-index": "0.3.1",
@@ -88,8 +87,8 @@
"about": "1.7.6",
"archive-view": "0.63.2",
"autocomplete-atom-api": "0.10.1",
"autocomplete-css": "0.16.1",
"autocomplete-html": "0.7.3",
"autocomplete-css": "0.16.2",
"autocomplete-html": "0.8.0",
"autocomplete-plus": "2.35.4",
"autocomplete-snippets": "1.11.0",
"autoflow": "0.29.0",
@@ -105,7 +104,7 @@
"exception-reporting": "0.41.4",
"find-and-replace": "0.208.1",
"fuzzy-finder": "1.5.7",
"github": "0.0.6",
"github": "0.0.9",
"git-diff": "1.3.6",
"go-to-line": "0.32.1",
"grammar-selector": "0.49.4",
@@ -119,13 +118,13 @@
"notifications": "0.67.1",
"open-on-github": "1.2.1",
"package-generator": "1.1.1",
"settings-view": "0.249.5",
"settings-view": "0.250.0",
"snippets": "1.1.4",
"spell-check": "0.71.4",
"status-bar": "1.8.8",
"styleguide": "0.49.6",
"symbols-view": "0.116.0",
"tabs": "0.105.5",
"tabs": "0.106.0",
"timecop": "0.36.0",
"tree-view": "0.217.0-8",
"update-package-dependencies": "0.11.0",

View File

@@ -18,6 +18,7 @@ module.exports = (packagedAppPath, codeSign) => {
iconUrl: `https://raw.githubusercontent.com/atom/atom/master/resources/app-icons/${CONFIG.channel}/atom.ico`,
loadingGif: path.join(CONFIG.repositoryRootPath, 'resources', 'win', 'loading.gif'),
outputDirectory: CONFIG.buildOutputPath,
noMsi: true,
remoteReleases: `https://atom.io/api/updates${archSuffix}?version=${CONFIG.appMetadata.version}`,
setupIcon: path.join(CONFIG.repositoryRootPath, 'resources', 'app-icons', CONFIG.channel, 'atom.ico')
}

View File

@@ -12,7 +12,7 @@
"electron-link": "0.0.24",
"electron-mksnapshot": "~1.6",
"electron-packager": "7.3.0",
"electron-winstaller": "2.5.1",
"electron-winstaller": "2.5.2",
"fs-extra": "0.30.0",
"glob": "7.0.3",
"joanna": "0.0.8",

View File

@@ -110,6 +110,7 @@ for (let packageName in CONFIG.appMetadata.packageDependencies) {
const cp = childProcess.spawn(executablePath, testArguments)
let stderrOutput = ''
cp.stderr.on('data', data => stderrOutput += data)
cp.stdout.on('data', data => stderrOutput += data)
cp.on('error', error => {
finalize()
callback(error)

View File

@@ -17,7 +17,7 @@ describe('Dock', () => {
})
describe('when a dock is hidden', () => {
it('transfers focus back to the active center pane', () => {
it('transfers focus back to the active center pane if the dock had focus', () => {
jasmine.attachToDOM(atom.workspace.getElement())
const dock = atom.workspace.getLeftDock()
dock.activate()
@@ -31,6 +31,19 @@ describe('Dock', () => {
dock.toggle()
expect(document.activeElement).toBe(atom.workspace.getCenter().getActivePane().getElement())
// Don't change focus if the dock was not focused in the first place
const modalElement = document.createElement('div')
modalElement.setAttribute('tabindex', -1)
atom.workspace.addModalPanel({item: modalElement})
modalElement.focus()
expect(document.activeElement).toBe(modalElement)
dock.show()
expect(document.activeElement).toBe(modalElement)
dock.hide()
expect(document.activeElement).toBe(modalElement)
})
})

View File

@@ -328,10 +328,15 @@ describe "PackageManager", ->
it "requires the main module, loads the config schema and activates keymaps, menus and settings without reactivating them during package activation", ->
availablePackage = atom.packages.getAvailablePackages().find (p) -> p.name is 'spell-check'
availablePackage.isBundled = true
metadata = atom.packages.loadPackageMetadata(availablePackage)
expect(atom.packages.preloadedPackages[availablePackage.name]).toBeUndefined()
expect(atom.packages.isPackageLoaded(availablePackage.name)).toBe(false)
metadata = atom.packages.loadPackageMetadata(availablePackage)
atom.packages.packagesCache = {}
atom.packages.packagesCache[availablePackage.name] = {
main: path.join(availablePackage.path, metadata.main),
grammarPaths: []
}
preloadedPackage = atom.packages.preloadPackage(
availablePackage.name,
{
@@ -345,14 +350,15 @@ describe "PackageManager", ->
expect(preloadedPackage.mainModule).toBeTruthy()
expect(preloadedPackage.configSchemaRegisteredOnLoad).toBeTruthy()
atom.packages.loadAvailablePackage(availablePackage)
spyOn(atom.keymaps, 'add')
spyOn(atom.menu, 'add')
spyOn(atom.contextMenu, 'add')
spyOn(atom.config, 'setSchema')
atom.packages.activatePackage(availablePackage.name)
atom.packages.loadAvailablePackage(availablePackage)
expect(preloadedPackage.getMainModulePath()).toBe(path.join(availablePackage.path, metadata.main))
atom.packages.activatePackage(availablePackage.name)
expect(atom.keymaps.add).not.toHaveBeenCalled()
expect(atom.menu.add).not.toHaveBeenCalled()
expect(atom.contextMenu.add).not.toHaveBeenCalled()
@@ -366,10 +372,15 @@ describe "PackageManager", ->
it "deactivates disabled keymaps during package activation", ->
availablePackage = atom.packages.getAvailablePackages().find (p) -> p.name is 'spell-check'
availablePackage.isBundled = true
metadata = atom.packages.loadPackageMetadata(availablePackage)
expect(atom.packages.preloadedPackages[availablePackage.name]).toBeUndefined()
expect(atom.packages.isPackageLoaded(availablePackage.name)).toBe(false)
metadata = atom.packages.loadPackageMetadata(availablePackage)
atom.packages.packagesCache = {}
atom.packages.packagesCache[availablePackage.name] = {
main: path.join(availablePackage.path, metadata.main),
grammarPaths: []
}
preloadedPackage = atom.packages.preloadPackage(
availablePackage.name,
{

View File

@@ -2720,6 +2720,22 @@ describe "TextEditor", ->
expect(editor.isFoldedAtBufferRow(6)).toBeFalsy()
expect(editor.lineTextForBufferRow(6)).toBe " if (items.length <= 1) return items;"
describe "when the last line of selection does not end with a valid line ending", ->
it "appends line ending to last line and moves the lines spanned by the selection to the preceeding row", ->
expect(editor.lineTextForBufferRow(9)).toBe " };"
expect(editor.lineTextForBufferRow(10)).toBe ""
expect(editor.lineTextForBufferRow(11)).toBe " return sort(Array.apply(this, arguments));"
expect(editor.lineTextForBufferRow(12)).toBe "};"
editor.setSelectedBufferRange([[10, 0], [12, 2]])
editor.moveLineUp()
expect(editor.getSelectedBufferRange()).toEqual [[9, 0], [11, 2]]
expect(editor.lineTextForBufferRow(9)).toBe ""
expect(editor.lineTextForBufferRow(10)).toBe " return sort(Array.apply(this, arguments));"
expect(editor.lineTextForBufferRow(11)).toBe "};"
expect(editor.lineTextForBufferRow(12)).toBe " };"
describe "when there are multiple selections", ->
describe "when all the selections span different lines", ->
describe "when there is no folds", ->

View File

@@ -2486,7 +2486,7 @@ i = /test/; #FIXME\
waitsForPromise(() => atom.workspace.open())
})
it('closes the active pane item, or the active pane if it is empty, or the current window if there is only the empty root pane', async () => {
it('closes the active center pane item, or the active center pane if it is empty, or the current window if there is only the empty root pane in the center', async () => {
atom.config.set('core.destroyEmptyPanes', false)
const pane1 = atom.workspace.getActivePane()
@@ -2509,6 +2509,7 @@ i = /test/; #FIXME\
expect(pane1.getItems().length).toBe(0)
expect(atom.workspace.getCenter().getPanes().length).toBe(1)
// The dock items should not be closed
await atom.workspace.open({
getTitle: () => 'Permanent Dock Item',
element: document.createElement('div'),
@@ -2523,13 +2524,6 @@ i = /test/; #FIXME\
expect(atom.workspace.getLeftDock().getPaneItems().length).toBe(2)
atom.workspace.closeActivePaneItemOrEmptyPaneOrWindow()
expect(atom.workspace.getLeftDock().getPaneItems().length).toBe(1)
atom.workspace.closeActivePaneItemOrEmptyPaneOrWindow()
expect(atom.workspace.getLeftDock().getPaneItems().length).toBe(1)
expect(atom.close).not.toHaveBeenCalled()
atom.workspace.getCenter().activate()
atom.workspace.closeActivePaneItemOrEmptyPaneOrWindow()
expect(atom.close).toHaveBeenCalled()
})
})

View File

@@ -34,6 +34,16 @@ const configSchema = {
description: 'List of names of installed packages which are not loaded at startup.'
},
versionPinnedPackages: {
type: 'array',
default: [],
items: {
type: 'string'
},
description: 'List of names of installed packages which are not automatically updated.'
},
customFileTypes: {
type: 'object',
default: {},

View File

@@ -151,7 +151,7 @@ module.exports = class Dock {
this.state = nextState
this.render(this.state)
if (didHide) this.didHide()
if (didHide) this.didHide(this)
}
render (state) {

View File

@@ -73,6 +73,8 @@ class PackageManager
@loadedPackages = {}
@preloadedPackages = {}
@packageStates = {}
@packagesCache = packageJSON._atomPackages ? {}
@packageDependencies = packageJSON.packageDependencies ? {}
@triggeredActivationHooks.clear()
###

View File

@@ -67,7 +67,7 @@ class PaneElement extends HTMLElement
activated: ->
@isActivating = true
@focus()
@focus() unless @hasFocus() # Don't steal focus from children.
@isActivating = false
activeStatusChanged: (active) ->

View File

@@ -1208,7 +1208,7 @@ class TextEditor extends Model
# Delete lines spanned by selection and insert them on the preceding buffer row
lines = @buffer.getTextInRange(linesRange)
lines += @buffer.lineEndingForRow(linesRange.end.row - 1) unless lines[lines.length - 1] is '\n'
lines += @buffer.lineEndingForRow(linesRange.end.row - 2) unless lines[lines.length - 1] is '\n'
@buffer.delete(linesRange)
@buffer.insert([precedingRow, 0], lines)

View File

@@ -470,8 +470,12 @@ module.exports = class Workspace extends Model {
}
}
didHideDock () {
this.getCenter().activate()
didHideDock (dock) {
const {activeElement} = document
const dockElement = dock.getElement()
if (dockElement === activeElement || dockElement.contains(activeElement)) {
this.getCenter().activate()
}
}
setDraggingItem (draggingItem) {
@@ -1307,7 +1311,7 @@ module.exports = class Workspace extends Model {
// {::saveActivePaneItemAs} # will be called instead. This method does nothing
// if the active item does not implement a `.save` method.
saveActivePaneItem () {
this.getActivePane().saveActiveItem()
this.getCenter().getActivePane().saveActiveItem()
}
// Prompt the user for a path and save the active pane item to it.
@@ -1316,7 +1320,7 @@ module.exports = class Workspace extends Model {
// `.saveAs` on the item with the selected path. This method does nothing if
// the active item does not implement a `.saveAs` method.
saveActivePaneItemAs () {
this.getActivePane().saveActiveItemAs()
this.getCenter().getActivePane().saveActiveItemAs()
}
// Destroy (close) the active pane item.
@@ -1419,13 +1423,13 @@ module.exports = class Workspace extends Model {
}
}
// Close the active pane item, or the active pane if it is empty,
// or the current window if there is only the empty root pane.
// Close the active center pane item, or the active center pane if it is
// empty, or the current window if there is only the empty root pane.
closeActivePaneItemOrEmptyPaneOrWindow () {
if (this.getActivePaneItem() != null) {
this.destroyActivePaneItem()
if (this.getCenter().getActivePaneItem() != null) {
this.getCenter().getActivePane().destroyActiveItem()
} else if (this.getCenter().getPanes().length > 1) {
this.destroyActivePane()
this.getCenter().destroyActivePane()
} else if (this.config.get('core.closeEmptyWindows')) {
atom.close()
}