Use cross-platform callbacks in the dialog API.

This commit is contained in:
Cheng Zhao 2013-05-05 20:24:20 +08:00
parent d377cbfa74
commit f725927c44
2 changed files with 47 additions and 50 deletions

View file

@ -1,41 +1,10 @@
ipc = require 'ipc'
remote = require 'remote'
dialog = remote.require 'dialog'
callbackId = 0
callbacks = {}
storeCallback = (callback) ->
throw new TypeError('Bad argument') unless typeof callback is 'function'
++callbackId
callbacks[callbackId] = callback
callbackId
makeCallback = (id, args...) ->
callbacks[id].call global, args...
delete callbacks[id]
# Force loading dialog code in browser.
remote.require 'dialog'
ipc.on 'ATOM_RENDERER_DIALOG', (id, args...) ->
makeCallback(id, args...)
callFileDialogs = (options, callback, args...) ->
if typeof options is 'function'
callback = options
options = {}
ipc.sendChannel 'ATOM_BROWSER_FILE_DIALOG', storeCallback(callback), args..., options
win = remote.getCurrentWindow()
module.exports =
openFolder: (options, callback) ->
callFileDialogs options, callback, 1, 'Open Folder'
saveAs: (options, callback) ->
callFileDialogs options, callback, 2, 'Save As'
openFile: (options, callback) ->
callFileDialogs options, callback, 3, 'Open File'
openMultiFiles: (options, callback) ->
callFileDialogs options, callback, 4, 'Open Files'
openFolder: (args...) -> dialog.openFolder win, args...
saveAs: (args...) -> dialog.saveAs win, args...
openFile: (args...) -> dialog.openFile win, args...
openMultiFiles: (args...) -> dialog.openMultiFiles win, args...