diff --git a/lib/browser/api/menu.js b/lib/browser/api/menu.js index aedea1b4bf0f..5e612ef9f78d 100644 --- a/lib/browser/api/menu.js +++ b/lib/browser/api/menu.js @@ -43,50 +43,32 @@ Menu.prototype._init = function () { } } -Menu.prototype.popup = function (window, options, callback) { - let x, y, pos - let [win, opts, cb] = [window, options, callback] - - if (!opts && !callback) { - // win.popup({opts}) - if (typeof window !== 'function') { - opts = window - // win.popup(callback) - } else { - callback = window - } - } - - if (typeof opts === 'object') { - [x, y, pos] = [opts.x, opts.y, opts.newPosition] - } - - // win.popup(win, callback) - if (typeof opts === 'function') cb = opts +Menu.prototype.popup = function (options) { + let {window, x, y, positionItem, callback} = options // no callback passed - if (!cb || typeof cb !== 'function') cb = () => {} + if (!callback || typeof callback !== 'function') callback = () => {} // set defaults if (typeof x !== 'number') x = -1 if (typeof y !== 'number') y = -1 - if (typeof pos !== 'number') pos = -1 - if (!win || (win && win.constructor !== BrowserWindow)) { - win = BrowserWindow.getFocusedWindow() + if (typeof positionItem !== 'number') positionItem = -1 + if (!window || (window && window.constructor !== BrowserWindow)) { + window = BrowserWindow.getFocusedWindow() // No window focused? - if (!win) { + if (!window) { const wins = BrowserWindow.getAllWindows() if (wins && wins.length > 0) { - win = wins[0] + window = wins[0] } else { throw new Error(`Cannot open Menu without a BrowserWindow present`) } } } - this.popupAt(win, x, y, pos, cb) - return { browserWindow: win, x, y, position: pos } + this.popupAt(window, x, y, positionItem, callback) + return { browserWindow: window, x, y, position: positionItem } } Menu.prototype.closePopup = function (window) { diff --git a/spec/api-menu-spec.js b/spec/api-menu-spec.js index 953253cb0b41..f9d35f0a0c4d 100644 --- a/spec/api-menu-spec.js +++ b/spec/api-menu-spec.js @@ -344,7 +344,11 @@ describe('Menu module', () => { }) it('returns immediately', () => { - const { browserWindow, x, y } = menu.popup(w, {x: 100, y: 101}) + const { browserWindow, x, y } = menu.popup({ + window: w, + x: 100, + y: 101 + }) assert.equal(browserWindow, w) assert.equal(x, 100) @@ -360,7 +364,12 @@ describe('Menu module', () => { }) it('works with a given BrowserWindow, options and callback', (done) => { - const {x, y} = menu.popup(w, {x: 100, y: 101}, () => done()) + const {x, y} = menu.popup({ + window: w, + x: 100, + y: 101, + callback: () => done() + }) assert.equal(x, 100) assert.equal(y, 101) @@ -368,12 +377,7 @@ describe('Menu module', () => { }) it('works with a given BrowserWindow, no options, and a callback', (done) => { - menu.popup(w, () => done()) - menu.closePopup() - }) - - it('calls the callback', (done) => { - menu.popup({}, () => done()) + menu.popup({window: w, callback: () => done()}) menu.closePopup() }) })