Add tabs in window submenu.

This commit is contained in:
Zhongyi Tong
2017-08-06 11:52:09 +08:00
parent a7a9e96a58
commit 32542d500a
3 changed files with 51 additions and 15 deletions

View File

@@ -153,7 +153,9 @@ app.on('activate', () => {
});
app.on('ready', () => {
appMenu.setMenu();
appMenu.setMenu({
tabs: []
});
mainWindow = createMainWindow();
const page = mainWindow.webContents;
@@ -224,6 +226,10 @@ app.on('ready', () => {
page.send(listener, ...params);
});
ipc.on('update-menu', (event, props) => {
appMenu.setMenu(props);
});
ipc.on('register-server-tab-shortcut', (event, index) => {
electronLocalshortcut.register(mainWindow, `CommandOrControl+${index}`, () => {
// Array index == Shown index - 1

View File

@@ -133,13 +133,43 @@ class AppMenu {
}];
}
getDarwinTpl() {
getWindowSubmenu(tabs, activeTabIndex) {
const initialSubmenu = [{
role: 'minimize'
}, {
role: 'close'
}];
if (tabs.length > 0) {
initialSubmenu.push({
type: 'separator'
});
for (let i = 0; i < tabs.length; i++) {
initialSubmenu.push({
label: tabs[i].webview.props.name,
accelerator: tabs[i].props.role === 'function' ? '' : `Cmd+${tabs[i].props.index + 1}`,
checked: tabs[i].props.index === activeTabIndex,
click(item, focusedWindow) {
if (focusedWindow) {
AppMenu.sendAction('switch-server-tab', tabs[i].props.index);
}
},
type: 'radio'
});
}
}
return initialSubmenu;
}
getDarwinTpl(props) {
const {tabs, activeTabIndex} = props;
return [{
label: `${app.getName()}`,
submenu: [{
label: 'Zulip Desktop',
click(item, focusedWindow) {
console.log(this);
if (focusedWindow) {
AppMenu.sendAction('open-about');
}
@@ -223,16 +253,8 @@ class AppMenu {
label: 'History',
submenu: this.getHistorySubmenu()
}, {
role: 'window',
submenu: [{
role: 'minimize'
}, {
role: 'close'
}, {
type: 'separator'
}, {
role: 'front'
}]
label: 'Window',
submenu: this.getWindowSubmenu(tabs, activeTabIndex)
}, {
role: 'help',
submenu: this.getHelpSubmenu()
@@ -343,8 +365,8 @@ class AppMenu {
});
}
setMenu() {
const tpl = process.platform === 'darwin' ? this.getDarwinTpl() : this.getOtherTpl();
setMenu(props) {
const tpl = process.platform === 'darwin' ? this.getDarwinTpl(props) : this.getOtherTpl();
const menu = Menu.buildFromTemplate(tpl);
Menu.setApplicationMenu(menu);
}

View File

@@ -60,6 +60,7 @@ class ServerManagerView {
initServer(server, index) {
this.tabs.push(new ServerTab({
role: 'server',
icon: server.icon,
$root: this.$tabsContainer,
onClick: this.activateTab.bind(this, index),
@@ -113,8 +114,10 @@ class ServerManagerView {
this.functionalTabs[tabProps.name] = this.tabs.length;
this.tabs.push(new FunctionalTab({
role: 'function',
materialIcon: tabProps.materialIcon,
$root: this.$tabsContainer,
index: this.functionalTabs[tabProps.name],
onClick: this.activateTab.bind(this, this.functionalTabs[tabProps.name]),
onDestroy: this.destroyTab.bind(this, tabProps.name, this.functionalTabs[tabProps.name]),
webview: new WebView({
@@ -175,6 +178,11 @@ class ServerManagerView {
this.activeTabIndex = index;
this.tabs[index].activate();
ipcRenderer.send('update-menu', {
tabs: this.tabs,
activeTabIndex: this.activeTabIndex
});
}
destroyTab(name, index) {