|
@@ -46,63 +46,31 @@ Menu.prototype._init = function () {
|
|
|
this.delegate = delegate
|
|
|
}
|
|
|
|
|
|
-Menu.prototype.popup = function (window, x, y, positioningItem) {
|
|
|
- let [newX, newY, newPosition, newWindow] = [x, y, positioningItem, window]
|
|
|
- let opts
|
|
|
- let callback
|
|
|
-
|
|
|
- // menu.popup(x, y, positioningItem)
|
|
|
- if (window != null && !(window instanceof BrowserWindow)) {
|
|
|
- [newPosition, newY, newX, newWindow] = [y, x, window, null]
|
|
|
- }
|
|
|
-
|
|
|
- // menu.popup([w], x, y, callback)
|
|
|
- if (typeof newPosition === 'function') {
|
|
|
- callback = newPosition
|
|
|
- }
|
|
|
-
|
|
|
- // menu.popup({}) || menu.popup(window, callback)
|
|
|
- if ((window != null && window.constructor === Object) ||
|
|
|
- (x && typeof x === 'function')) {
|
|
|
- opts = window
|
|
|
- callback = arguments[1]
|
|
|
- // menu.popup(window, {})
|
|
|
- } else if (x && typeof x === 'object') {
|
|
|
- opts = x
|
|
|
- callback = arguments[2]
|
|
|
- }
|
|
|
+Menu.prototype.popup = function (options) {
|
|
|
+ let {window, x, y, positioningItem, callback} = options
|
|
|
|
|
|
- if (opts) {
|
|
|
- newX = opts.x
|
|
|
- newY = opts.y
|
|
|
- newPosition = opts.positioningItem
|
|
|
- }
|
|
|
- if (typeof callback !== 'function') {
|
|
|
- callback = () => {}
|
|
|
- }
|
|
|
+ // no callback passed
|
|
|
+ if (!callback || typeof callback !== 'function') callback = () => {}
|
|
|
|
|
|
// set defaults
|
|
|
- if (typeof newX !== 'number') newX = -1
|
|
|
- if (typeof newY !== 'number') newY = -1
|
|
|
- if (typeof newPosition !== 'number') newPosition = -1
|
|
|
- if (!newWindow || (newWindow && newWindow.constructor !== BrowserWindow)) {
|
|
|
- newWindow = BrowserWindow.getFocusedWindow()
|
|
|
-
|
|
|
- // No window focused?
|
|
|
- if (!newWindow) {
|
|
|
- const browserWindows = BrowserWindow.getAllWindows()
|
|
|
-
|
|
|
- if (browserWindows && browserWindows.length > 0) {
|
|
|
- newWindow = browserWindows[0]
|
|
|
- } else {
|
|
|
- throw new Error(`Cannot open Menu without a BrowserWindow present`)
|
|
|
- }
|
|
|
+ if (typeof x !== 'number') x = -1
|
|
|
+ if (typeof y !== 'number') y = -1
|
|
|
+ if (typeof positioningItem !== 'number') positioningItem = -1
|
|
|
+
|
|
|
+ // find which window to use
|
|
|
+ const wins = BrowserWindow.getAllWindows()
|
|
|
+ if (!wins || wins.indexOf(window) === -1) {
|
|
|
+ window = BrowserWindow.getFocusedWindow()
|
|
|
+ if (!window && wins && wins.length > 0) {
|
|
|
+ window = wins[0]
|
|
|
+ }
|
|
|
+ if (!window) {
|
|
|
+ throw new Error(`Cannot open Menu without a BrowserWindow present`)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- this.popupAt(newWindow, newX, newY, newPosition, callback)
|
|
|
-
|
|
|
- return { browserWindow: newWindow, x: newX, y: newY, position: newPosition }
|
|
|
+ this.popupAt(window, x, y, positioningItem, callback)
|
|
|
+ return { browserWindow: window, x, y, position: positioningItem }
|
|
|
}
|
|
|
|
|
|
Menu.prototype.closePopup = function (window) {
|