EventEmitter = require('events').EventEmitter
-IDWeakMap = process.atomBinding('id_weak_map').IDWeakMap
app = require 'app'
ipc = require 'ipc'
BrowserWindow = process.atomBinding('window').BrowserWindow
BrowserWindow::__proto__ = EventEmitter.prototype
-# Store all created windows in the weak map.
-BrowserWindow.windows = new IDWeakMap
-
BrowserWindow::_init = ->
# Simulate the application menu on platforms other than OS X.
if process.platform isnt 'darwin'
@on 'focus', (event) =>
app.emit 'browser-window-focus', event, this
- # Remove the window from weak map immediately when it's destroyed, since we
- # could be iterating windows before GC happened.
- @once 'closed', =>
- BrowserWindow.windows.remove @id if BrowserWindow.windows.has @id
-
BrowserWindow::setMenu = (menu) ->
throw new TypeError('Invalid menu') unless menu is null or menu?.constructor?.name is 'Menu'
event.returnValue = createGuest event.sender, args...
ipc.on 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WINDOW_CLOSE', (event, guestId) ->
- return unless BrowserWindow.windows.has guestId
- BrowserWindow.windows.get(guestId).destroy()
+ BrowserWindow.fromId(guestId)?.destroy()
ipc.on 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WINDOW_METHOD', (event, guestId, method, args...) ->
- return unless BrowserWindow.windows.has guestId
- BrowserWindow.windows.get(guestId)[method] args...
+ BrowserWindow.fromId(guestId)?[method] args...
ipc.on 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WINDOW_POSTMESSAGE', (event, guestId, message, targetOrigin) ->
- return unless BrowserWindow.windows.has guestId
- guestContents = BrowserWindow.windows.get(guestId).webContents
- if guestContents.getUrl().indexOf(targetOrigin) is 0 or targetOrigin is '*'
+ guestContents = BrowserWindow.fromId(guestId)?.webContents
+ if guestContents?.getUrl().indexOf(targetOrigin) is 0 or targetOrigin is '*'
guestContents.send 'ATOM_SHELL_GUEST_WINDOW_POSTMESSAGE', message, targetOrigin
ipc.on 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WINDOW_OPENER_POSTMESSAGE', (event, message, targetOrigin) ->
embedder.send 'ATOM_SHELL_GUEST_WINDOW_POSTMESSAGE', message, targetOrigin
ipc.on 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WEB_CONTENTS_METHOD', (event, guestId, method, args...) ->
- return unless BrowserWindow.windows.has guestId
- BrowserWindow.windows.get(guestId).webContents?[method] args...
+ BrowserWindow.fromId(guestId)?.webContents?[method] args...