refs #377 Add account change menu in dock menu

This commit is contained in:
AkiraFukushima 2018-07-21 14:13:52 +09:00
parent 77d65d2a1a
commit 2514c587ac
1 changed files with 189 additions and 173 deletions

View File

@ -76,207 +76,223 @@ async function listAccounts () {
} }
} }
function createWindow () { async function changeAccount (account, index) {
// In MacOS, user can hide the window.
// In this time, mainWindow in not exist, so we have to create window.
if (mainWindow === null) {
await createWindow()
// We have to wait the web contents is loaded.
mainWindow.webContents.on('did-finish-load', () => {
mainWindow.webContents.send('change-account', Object.assign(account, { index: index }))
})
} else {
mainWindow.webContents.send('change-account', Object.assign(account, { index: index }))
}
}
async function createWindow () {
/** /**
* List accounts * List accounts
*/ */
listAccounts() const accounts = await listAccounts()
.then((accounts) => { const accountsChange = accounts.map((a, index) => {
const accountsChange = accounts.map((a, index) => { return {
return { label: a.domain,
label: a.domain, accelerator: `CmdOrCtrl+${index + 1}`,
accelerator: `CmdOrCtrl+${index + 1}`, click: () => changeAccount(a, index)
}
})
/**
* For mac menu
*/
const macGeneralMenu = process.platform !== 'darwin' ? [] : [
{
type: 'separator'
},
{
label: 'Services',
role: 'services',
submenu: []
},
{
type: 'separator'
},
{
label: 'Hide Whalebird',
role: 'hide'
},
{
label: 'Hide Othres',
role: 'hideothers'
},
{
label: 'Show All',
role: 'unhide'
}
]
/**
* Set application menu
*/
const template = [
{
label: 'Whalebird',
submenu: [
{
label: 'About Whalebird',
role: 'about',
click: () => { click: () => {
mainWindow.webContents.send('change-account', Object.assign(a, { index: index })) openAboutWindow({
icon_path: path.resolve(__dirname, '../../build/icons/256x256.png'),
copyright: 'Copyright (c) 2018 AkiraFukushima',
package_json_dir: path.resolve(__dirname, '../../'),
open_devtools: process.env.NODE_ENV !== 'production'
})
}
},
{
type: 'separator'
},
{
label: 'Preferences...',
accelerator: 'CmdOrCtrl+,',
click: () => {
mainWindow.webContents.send('open-preferences')
}
},
...macGeneralMenu,
{
type: 'separator'
},
{
label: 'Quit',
accelerator: 'CmdOrCtrl+Q',
role: 'quit'
}
]
},
{
label: 'Toot',
submenu: [
{
label: 'New Toot',
accelerator: 'CmdOrCtrl+N',
click: () => {
mainWindow.webContents.send('CmdOrCtrl+N')
} }
} }
}) ]
/** },
* For mac menu {
*/ label: 'Edit',
const macGeneralMenu = process.platform !== 'darwin' ? [] : [ submenu: [
{ {
type: 'separator' label: 'Undo',
accelerator: 'CmdOrCtrl+Z',
role: 'undo'
}, },
{ {
label: 'Services', label: 'Redo',
role: 'services', accelerator: 'Shift+CmdOrCtrl+Z',
submenu: [] role: 'redo'
}, },
{ {
type: 'separator' type: 'separator'
}, },
{ {
label: 'Hide Whalebird', label: 'Cut',
role: 'hide' accelerator: 'CmdOrCtrl+X',
role: 'cut'
}, },
{ {
label: 'Hide Othres', label: 'Copy',
role: 'hideothers' accelerator: 'CmdOrCtrl+C',
role: 'copy'
}, },
{ {
label: 'Show All', label: 'Paste',
role: 'unhide' accelerator: 'CmdOrCtrl+V',
role: 'paste'
},
{
label: 'Select All',
accelerator: 'CmdOrCtrl+A',
role: 'selectall'
} }
] ]
/** },
* Set menu {
*/ label: 'View',
const template = [ submenu: [
{ {
label: 'Whalebird', label: 'Toggle Full Screen',
submenu: [ role: 'togglefullscreen'
{
label: 'About Whalebird',
role: 'about',
click: () => {
openAboutWindow({
icon_path: path.resolve(__dirname, '../../build/icons/256x256.png'),
copyright: 'Copyright (c) 2018 AkiraFukushima',
package_json_dir: path.resolve(__dirname, '../../'),
open_devtools: process.env.NODE_ENV !== 'production'
})
}
},
{
type: 'separator'
},
{
label: 'Preferences...',
accelerator: 'CmdOrCtrl+,',
click: () => {
mainWindow.webContents.send('open-preferences')
}
},
...macGeneralMenu,
{
type: 'separator'
},
{
label: 'Quit',
accelerator: 'CmdOrCtrl+Q',
role: 'quit'
}
]
},
{
label: 'Toot',
submenu: [
{
label: 'New Toot',
accelerator: 'CmdOrCtrl+N',
click: () => {
mainWindow.webContents.send('CmdOrCtrl+N')
}
}
]
},
{
label: 'Edit',
submenu: [
{
label: 'Undo',
accelerator: 'CmdOrCtrl+Z',
role: 'undo'
},
{
label: 'Redo',
accelerator: 'Shift+CmdOrCtrl+Z',
role: 'redo'
},
{
type: 'separator'
},
{
label: 'Cut',
accelerator: 'CmdOrCtrl+X',
role: 'cut'
},
{
label: 'Copy',
accelerator: 'CmdOrCtrl+C',
role: 'copy'
},
{
label: 'Paste',
accelerator: 'CmdOrCtrl+V',
role: 'paste'
},
{
label: 'Select All',
accelerator: 'CmdOrCtrl+A',
role: 'selectall'
}
]
},
{
label: 'View',
submenu: [
{
label: 'Toggle Full Screen',
role: 'togglefullscreen'
}
]
},
{
label: 'Window',
submenu: [
{
label: 'Close Window',
role: 'close'
},
{
label: 'Minimize',
role: 'minimize'
},
{
type: 'separator'
}
].concat(accountsChange)
.concat([
{
type: 'separator'
},
{
label: 'Jump to',
accelerator: 'CmdOrCtrl+K',
click: () => {
mainWindow.webContents.send('CmdOrCtrl+K')
}
}
])
} }
] ]
},
{
label: 'Window',
submenu: [
{
label: 'Close Window',
role: 'close'
},
{
label: 'Minimize',
role: 'minimize'
},
{
type: 'separator'
}
].concat(accountsChange)
.concat([
{
type: 'separator'
},
{
label: 'Jump to',
accelerator: 'CmdOrCtrl+K',
click: () => {
mainWindow.webContents.send('CmdOrCtrl+K')
}
}
])
}
]
const menu = Menu.buildFromTemplate(template) const menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu) Menu.setApplicationMenu(menu)
/** /**
* Initial window options * Set dock menu for mac
*/ */
let mainWindowState = windowStateKeeper({ const dockMenu = Menu.buildFromTemplate(accountsChange)
defaultWidth: 1000, app.dock.setMenu(dockMenu)
height: 563
})
mainWindow = new BrowserWindow({
titleBarStyle: 'hidden',
x: mainWindowState.x,
y: mainWindowState.y,
width: mainWindowState.width,
height: mainWindowState.height,
useContentSize: true,
icon: path.resolve(__dirname, '../../build/icons/256x256.png')
})
mainWindowState.manage(mainWindow)
mainWindow.loadURL(winURL) /**
* Initial window options
*/
let mainWindowState = windowStateKeeper({
defaultWidth: 1000,
height: 563
})
mainWindow = new BrowserWindow({
titleBarStyle: 'hidden',
x: mainWindowState.x,
y: mainWindowState.y,
width: mainWindowState.width,
height: mainWindowState.height,
useContentSize: true,
icon: path.resolve(__dirname, '../../build/icons/256x256.png')
})
mainWindowState.manage(mainWindow)
mainWindow.webContents.on('will-navigate', (event) => event.preventDefault()) mainWindow.loadURL(winURL)
mainWindow.on('closed', () => { mainWindow.webContents.on('will-navigate', (event) => event.preventDefault())
mainWindow = null
}) mainWindow.on('closed', () => {
}) mainWindow = null
})
} }
// Do not lower the rendering priority of Chromium when background // Do not lower the rendering priority of Chromium when background