diff --git a/atom/browser/api/lib/browser-window.coffee b/atom/browser/api/lib/browser-window.coffee index 818d737a89..fc4667aa2c 100644 --- a/atom/browser/api/lib/browser-window.coffee +++ b/atom/browser/api/lib/browser-window.coffee @@ -30,6 +30,12 @@ BrowserWindow::_init = -> @on '-will-navigate', (event, url) => @webContents.emit 'will-navigate', event, url + # Redirect focus/blur event to app instance too. + @on 'blur', (event) => + app.emit 'browser-window-blur', event, this + @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', => @@ -58,7 +64,7 @@ BrowserWindow.fromDevToolsWebContents = (webContents) -> return window for window in windows when window.devToolsWebContents?.equal webContents BrowserWindow.fromId = (id) -> - BrowserWindow.windows.get id + BrowserWindow.windows.get id if BrowserWindow.windows.has id # Helpers. BrowserWindow::loadUrl = -> @webContents.loadUrl.apply @webContents, arguments diff --git a/docs/api/app.md b/docs/api/app.md index d30c8c39c8..1564196ce8 100644 --- a/docs/api/app.md +++ b/docs/api/app.md @@ -87,6 +87,20 @@ Emitted when the application is activated while there is no opened windows. It usually happens when user has closed all of application's windows and then click on the application's dock icon. +## Event: browser-window-blur + +* `event` Event +* `window` BrowserWindow + +Emitted when a [browserWindow](browser-window.md) gets blurred. + +## Event: browser-window-focus + +* `event` Event +* `window` BrowserWindow + +Emitted when a [browserWindow](browser-window.md) gets focused. + ## app.quit() Try to close all windows. The `before-quit` event will first be emitted. If all diff --git a/spec/api-app-spec.coffee b/spec/api-app-spec.coffee index 4e6bda2ac1..44de389274 100644 --- a/spec/api-app-spec.coffee +++ b/spec/api-app-spec.coffee @@ -1,5 +1,7 @@ assert = require 'assert' app = require('remote').require 'app' +remote = require 'remote' +BrowserWindow = remote.require 'browser-window' describe 'app module', -> describe 'app.getVersion()', -> @@ -23,3 +25,20 @@ describe 'app module', -> app.setName 'test-name' assert.equal app.getName(), 'test-name' app.setName 'Electron Test' + + describe 'focus/blur event', -> + w = null + beforeEach -> + w.destroy() if w? + w = new BrowserWindow(show: false, width: 400, height: 400) + afterEach -> + w.destroy() if w? + w = null + it 'should emit focus event', (done) -> + app.once 'browser-window-blur', (e, window) -> + assert.equal w.id, window.id + done() + app.once 'browser-window-focus', (e, window) -> + assert.equal w.id, window.id + w.hide() + w.show()