diff --git a/lib/browser/api/menu-item-roles.ts b/lib/browser/api/menu-item-roles.ts index fe2b07ed0fee..1bb48b636e92 100644 --- a/lib/browser/api/menu-item-roles.ts +++ b/lib/browser/api/menu-item-roles.ts @@ -78,7 +78,9 @@ export const roleList: Record = { minimize: { label: 'Minimize', accelerator: 'CommandOrControl+M', - windowMethod: w => w.minimize() + windowMethod: w => { + if (w.minimizable) w.minimize(); + } }, paste: { label: 'Paste', diff --git a/spec/api-menu-item-spec.ts b/spec/api-menu-item-spec.ts index e385b4773d63..dd71140cacab 100644 --- a/spec/api-menu-item-spec.ts +++ b/spec/api-menu-item-spec.ts @@ -2,7 +2,7 @@ import { BrowserWindow, app, Menu, MenuItem, MenuItemConstructorOptions } from ' import { expect } from 'chai'; -import { ifdescribe } from './lib/spec-helpers'; +import { ifit, ifdescribe } from './lib/spec-helpers'; import { closeAllWindows } from './lib/window-helpers'; import { roleList, execute } from '../lib/browser/api/menu-item-roles'; @@ -205,6 +205,22 @@ describe('MenuItems', () => { const canExecute = execute(item.role as any, win, win.webContents); expect(canExecute).to.be.true('can execute'); }); + + ifit(process.platform === 'win32')('does not execute minimize role when minimizable false', () => { + const win = new BrowserWindow({ minimizable: false }); + const menu = Menu.buildFromTemplate([{ + label: 'text', + role: 'minimize' + }]); + + Menu.setApplicationMenu(menu); + menu._executeCommand({}, menu.items[0].commandId); + expect(win.isMinimized()).to.equal(false); + + win.setMinimizable(true); + menu._executeCommand({}, menu.items[0].commandId); + expect(win.isMinimized()).to.equal(true); + }); }); describe('MenuItem command id', () => {