mirror of
https://github.com/atom/atom.git
synced 2026-02-15 17:15:24 -05:00
Allow core URI handlers to determine which window to trigger the URI on
This commit is contained in:
committed by
Katrina Uychaco
parent
e1bc9b593b
commit
8111ba6c1e
@@ -8,17 +8,31 @@ function openFile (atom, {query}) {
|
||||
})
|
||||
}
|
||||
|
||||
function windowShouldOpenFile ({query}) {
|
||||
const {filename} = query
|
||||
return (win) => win.containsPath(filename)
|
||||
}
|
||||
|
||||
const ROUTER = {
|
||||
'/open/file': openFile
|
||||
'/open/file': { handler: openFile, getWindowPredicate: windowShouldOpenFile }
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
create (atomEnv) {
|
||||
return function coreURIHandler (parsed) {
|
||||
const handler = ROUTER[parsed.pathname]
|
||||
if (handler) {
|
||||
handler(atomEnv, parsed)
|
||||
const config = ROUTER[parsed.pathname]
|
||||
if (config) {
|
||||
config.handler(atomEnv, parsed)
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
windowPredicate (parsed) {
|
||||
const config = ROUTER[parsed.pathname]
|
||||
if (config && config.getWindowPredicate) {
|
||||
return config.getWindowPredicate(parsed)
|
||||
} else {
|
||||
return (win) => true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -655,28 +655,34 @@ class AtomApplication
|
||||
# :devMode - Boolean to control the opened window's dev mode.
|
||||
# :safeMode - Boolean to control the opened window's safe mode.
|
||||
openUrl: ({urlToOpen, devMode, safeMode, env}) ->
|
||||
parsedUrl = url.parse(urlToOpen)
|
||||
parsedUrl = url.parse(urlToOpen, true)
|
||||
return unless parsedUrl.protocol is "atom:"
|
||||
|
||||
pack = @findPackageWithName(parsedUrl.host, devMode)
|
||||
if pack?.urlMain
|
||||
@openPackageUrlMain(parsedUrl.host, pack.urlMain, urlToOpen, devMode, safeMode, env)
|
||||
else
|
||||
@openPackageUriHandler(urlToOpen, devMode, safeMode, env)
|
||||
@openPackageUriHandler(urlToOpen, parsedUrl, devMode, safeMode, env)
|
||||
|
||||
openPackageUriHandler: (url, devMode, safeMode, env) ->
|
||||
resourcePath = @resourcePath
|
||||
if devMode
|
||||
try
|
||||
windowInitializationScript = require.resolve(path.join(@devResourcePath, 'src', 'initialize-application-window'))
|
||||
resourcePath = @devResourcePath
|
||||
openPackageUriHandler: (url, parsedUrl, devMode, safeMode, env) ->
|
||||
bestWindow = null
|
||||
if parsedUrl.host is 'core'
|
||||
predicate = require('../core-uri-handlers').windowPredicate(parsedUrl)
|
||||
bestWindow = @getLastFocusedWindow (win) ->
|
||||
!win.isSpecWindow() && predicate(win)
|
||||
|
||||
windowInitializationScript ?= require.resolve('../initialize-application-window')
|
||||
lastNonSpecWindow = @getLastFocusedWindow (win) -> !win.isSpecWindow()
|
||||
if lastNonSpecWindow?
|
||||
lastNonSpecWindow.sendURIMessage url
|
||||
lastNonSpecWindow.focus()
|
||||
bestWindow ?= @getLastFocusedWindow (win) -> !win.isSpecWindow()
|
||||
if bestWindow?
|
||||
bestWindow.sendURIMessage url
|
||||
bestWindow.focus()
|
||||
else
|
||||
resourcePath = @resourcePath
|
||||
if devMode
|
||||
try
|
||||
windowInitializationScript = require.resolve(path.join(@devResourcePath, 'src', 'initialize-application-window'))
|
||||
resourcePath = @devResourcePath
|
||||
|
||||
windowInitializationScript ?= require.resolve('../initialize-application-window')
|
||||
windowDimensions = @getDimensionsForNewWindow()
|
||||
win = new AtomWindow(this, @fileRecoveryService, {resourcePath, windowInitializationScript, devMode, safeMode, windowDimensions, env})
|
||||
@windows.addWindow(win)
|
||||
|
||||
Reference in New Issue
Block a user