🐛 fix(desktop): remove redundant accelerators from menu role items

Electron's role-based menu items already provide default accelerators.
Explicitly setting them can override defaults and cause issues like
Ctrl+Plus (requiring Shift) not working for zoom in on Windows.
Only kept intentional overrides: F12 for devTools, F11 for fullscreen
on macOS, Alt+F4 for close and Ctrl+Y for redo on Windows.
This commit is contained in:
Innei
2026-02-08 00:19:44 +08:00
committed by arvinxx
parent 397426de91
commit 67c403da4d
3 changed files with 60 additions and 91 deletions

View File

@@ -104,16 +104,8 @@ export class LinuxMenu extends BaseMenuPlatform implements IMenuPlatform {
label: t('common.checkUpdates'),
},
{ type: 'separator' },
{
accelerator: 'Ctrl+W',
label: t('window.close'),
role: 'close',
},
{
accelerator: 'Ctrl+M',
label: t('window.minimize'),
role: 'minimize',
},
{ label: t('window.close'), role: 'close' },
{ label: t('window.minimize'), role: 'minimize' },
{ type: 'separator' },
{ label: t('file.quit'), role: 'quit' },
],
@@ -121,24 +113,24 @@ export class LinuxMenu extends BaseMenuPlatform implements IMenuPlatform {
{
label: t('edit.title'),
submenu: [
{ accelerator: 'Ctrl+Z', label: t('edit.undo'), role: 'undo' },
{ accelerator: 'Ctrl+Shift+Z', label: t('edit.redo'), role: 'redo' },
{ label: t('edit.undo'), role: 'undo' },
{ label: t('edit.redo'), role: 'redo' },
{ type: 'separator' },
{ accelerator: 'Ctrl+X', label: t('edit.cut'), role: 'cut' },
{ accelerator: 'Ctrl+C', label: t('edit.copy'), role: 'copy' },
{ accelerator: 'Ctrl+V', label: t('edit.paste'), role: 'paste' },
{ label: t('edit.cut'), role: 'cut' },
{ label: t('edit.copy'), role: 'copy' },
{ label: t('edit.paste'), role: 'paste' },
{ type: 'separator' },
{ accelerator: 'Ctrl+A', label: t('edit.selectAll'), role: 'selectAll' },
{ label: t('edit.selectAll'), role: 'selectAll' },
],
},
{
label: t('view.title'),
submenu: [
{ accelerator: 'Ctrl+0', label: t('view.resetZoom'), role: 'resetZoom' },
{ accelerator: 'Ctrl+Plus', label: t('view.zoomIn'), role: 'zoomIn' },
{ accelerator: 'Ctrl+-', label: t('view.zoomOut'), role: 'zoomOut' },
{ label: t('view.resetZoom'), role: 'resetZoom' },
{ label: t('view.zoomIn'), role: 'zoomIn' },
{ label: t('view.zoomOut'), role: 'zoomOut' },
{ type: 'separator' },
{ accelerator: 'F11', label: t('view.toggleFullscreen'), role: 'togglefullscreen' },
{ label: t('view.toggleFullscreen'), role: 'togglefullscreen' },
],
},
{
@@ -220,9 +212,9 @@ export class LinuxMenu extends BaseMenuPlatform implements IMenuPlatform {
template.push({
label: t('dev.title'),
submenu: [
{ accelerator: 'Ctrl+R', label: t('dev.reload'), role: 'reload' },
{ accelerator: 'Ctrl+Shift+R', label: t('dev.forceReload'), role: 'forceReload' },
{ accelerator: 'Ctrl+Shift+I', label: t('dev.devTools'), role: 'toggleDevTools' },
{ label: t('dev.reload'), role: 'reload' },
{ label: t('dev.forceReload'), role: 'forceReload' },
{ label: t('dev.devTools'), role: 'toggleDevTools' },
{ type: 'separator' },
{
click: () => {
@@ -365,8 +357,8 @@ export class LinuxMenu extends BaseMenuPlatform implements IMenuPlatform {
// Standard edit actions for chat
template.push(
{ accelerator: 'Ctrl+C', label: t('edit.copy'), role: 'copy' },
{ accelerator: 'Ctrl+V', label: t('edit.paste'), role: 'paste' },
{ label: t('edit.copy'), role: 'copy' },
{ label: t('edit.paste'), role: 'paste' },
{ type: 'separator' },
{ label: t('edit.selectAll'), role: 'selectAll' },
);
@@ -406,11 +398,11 @@ export class LinuxMenu extends BaseMenuPlatform implements IMenuPlatform {
// Standard edit actions for editor
template.push(
{ accelerator: 'Ctrl+X', label: t('edit.cut'), role: 'cut' },
{ accelerator: 'Ctrl+C', label: t('edit.copy'), role: 'copy' },
{ accelerator: 'Ctrl+V', label: t('edit.paste'), role: 'paste' },
{ label: t('edit.cut'), role: 'cut' },
{ label: t('edit.copy'), role: 'copy' },
{ label: t('edit.paste'), role: 'paste' },
{ type: 'separator' },
{ accelerator: 'Ctrl+A', label: t('edit.selectAll'), role: 'selectAll' },
{ label: t('edit.selectAll'), role: 'selectAll' },
{ type: 'separator' },
{ label: t('edit.delete'), role: 'delete' },
);

View File

@@ -101,26 +101,11 @@ export class MacOSMenu extends BaseMenuPlatform implements IMenuPlatform {
submenu: [],
},
{ type: 'separator' },
{
accelerator: 'Command+H',
label: t('macOS.hide', { appName }),
role: 'hide',
},
{
accelerator: 'Command+Alt+H',
label: t('macOS.hideOthers'),
role: 'hideOthers',
},
{
label: t('macOS.unhide'),
role: 'unhide',
},
{ label: t('macOS.hide', { appName }), role: 'hide' },
{ label: t('macOS.hideOthers'), role: 'hideOthers' },
{ label: t('macOS.unhide'), role: 'unhide' },
{ type: 'separator' },
{
accelerator: 'Command+Q',
label: t('file.quit'),
role: 'quit',
},
{ label: t('file.quit'), role: 'quit' },
],
},
{
@@ -164,22 +149,18 @@ export class MacOSMenu extends BaseMenuPlatform implements IMenuPlatform {
label: t('file.newPage'),
},
{ type: 'separator' },
{
accelerator: 'Command+W',
label: t('window.close'),
role: 'close',
},
{ label: t('window.close'), role: 'close' },
],
},
{
label: t('edit.title'),
submenu: [
{ accelerator: 'Command+Z', label: t('edit.undo'), role: 'undo' },
{ accelerator: 'Shift+Command+Z', label: t('edit.redo'), role: 'redo' },
{ label: t('edit.undo'), role: 'undo' },
{ label: t('edit.redo'), role: 'redo' },
{ type: 'separator' },
{ accelerator: 'Command+X', label: t('edit.cut'), role: 'cut' },
{ accelerator: 'Command+C', label: t('edit.copy'), role: 'copy' },
{ accelerator: 'Command+V', label: t('edit.paste'), role: 'paste' },
{ label: t('edit.cut'), role: 'cut' },
{ label: t('edit.copy'), role: 'copy' },
{ label: t('edit.paste'), role: 'paste' },
{ type: 'separator' },
{
label: t('edit.speech'),
@@ -189,7 +170,7 @@ export class MacOSMenu extends BaseMenuPlatform implements IMenuPlatform {
],
},
{ type: 'separator' },
{ accelerator: 'Command+A', label: t('edit.selectAll'), role: 'selectAll' },
{ label: t('edit.selectAll'), role: 'selectAll' },
],
},
{
@@ -199,9 +180,9 @@ export class MacOSMenu extends BaseMenuPlatform implements IMenuPlatform {
{ label: t('view.forceReload'), role: 'forceReload' },
{ accelerator: 'F12', label: t('dev.devTools'), role: 'toggleDevTools' },
{ type: 'separator' },
{ accelerator: 'Command+0', label: t('view.resetZoom'), role: 'resetZoom' },
{ accelerator: 'Command+Plus', label: t('view.zoomIn'), role: 'zoomIn' },
{ accelerator: 'Command+-', label: t('view.zoomOut'), role: 'zoomOut' },
{ label: t('view.resetZoom'), role: 'resetZoom' },
{ label: t('view.zoomIn'), role: 'zoomIn' },
{ label: t('view.zoomOut'), role: 'zoomOut' },
{ type: 'separator' },
{ accelerator: 'F11', label: t('view.toggleFullscreen'), role: 'togglefullscreen' },
],
@@ -560,8 +541,8 @@ export class MacOSMenu extends BaseMenuPlatform implements IMenuPlatform {
// Standard edit actions for chat (copy/paste focused)
template.push(
{ accelerator: 'Command+C', label: t('edit.copy'), role: 'copy' },
{ accelerator: 'Command+V', label: t('edit.paste'), role: 'paste' },
{ label: t('edit.copy'), role: 'copy' },
{ label: t('edit.paste'), role: 'paste' },
{ type: 'separator' },
{ label: t('edit.selectAll'), role: 'selectAll' },
);
@@ -613,11 +594,11 @@ export class MacOSMenu extends BaseMenuPlatform implements IMenuPlatform {
// Standard edit actions for editor (full edit capabilities)
template.push(
{ accelerator: 'Command+X', label: t('edit.cut'), role: 'cut' },
{ accelerator: 'Command+C', label: t('edit.copy'), role: 'copy' },
{ accelerator: 'Command+V', label: t('edit.paste'), role: 'paste' },
{ label: t('edit.cut'), role: 'cut' },
{ label: t('edit.copy'), role: 'copy' },
{ label: t('edit.paste'), role: 'paste' },
{ type: 'separator' },
{ accelerator: 'Command+A', label: t('edit.selectAll'), role: 'selectAll' },
{ label: t('edit.selectAll'), role: 'selectAll' },
{ type: 'separator' },
{ label: t('edit.delete'), role: 'delete' },
);

View File

@@ -108,11 +108,7 @@ export class WindowsMenu extends BaseMenuPlatform implements IMenuPlatform {
label: t('window.close'),
role: 'close',
},
{
accelerator: 'Ctrl+M',
label: t('window.minimize'),
role: 'minimize',
},
{ label: t('window.minimize'), role: 'minimize' },
{ type: 'separator' },
{ label: t('file.quit'), role: 'quit' },
],
@@ -120,24 +116,24 @@ export class WindowsMenu extends BaseMenuPlatform implements IMenuPlatform {
{
label: t('edit.title'),
submenu: [
{ accelerator: 'Ctrl+Z', label: t('edit.undo'), role: 'undo' },
{ label: t('edit.undo'), role: 'undo' },
{ accelerator: 'Ctrl+Y', label: t('edit.redo'), role: 'redo' },
{ type: 'separator' },
{ accelerator: 'Ctrl+X', label: t('edit.cut'), role: 'cut' },
{ accelerator: 'Ctrl+C', label: t('edit.copy'), role: 'copy' },
{ accelerator: 'Ctrl+V', label: t('edit.paste'), role: 'paste' },
{ label: t('edit.cut'), role: 'cut' },
{ label: t('edit.copy'), role: 'copy' },
{ label: t('edit.paste'), role: 'paste' },
{ type: 'separator' },
{ accelerator: 'Ctrl+A', label: t('edit.selectAll'), role: 'selectAll' },
{ label: t('edit.selectAll'), role: 'selectAll' },
],
},
{
label: t('view.title'),
submenu: [
{ accelerator: 'Ctrl+0', label: t('view.resetZoom'), role: 'resetZoom' },
{ accelerator: 'Ctrl+Plus', label: t('view.zoomIn'), role: 'zoomIn' },
{ accelerator: 'Ctrl+-', label: t('view.zoomOut'), role: 'zoomOut' },
{ label: t('view.resetZoom'), role: 'resetZoom' },
{ label: t('view.zoomIn'), role: 'zoomIn' },
{ label: t('view.zoomOut'), role: 'zoomOut' },
{ type: 'separator' },
{ accelerator: 'F11', label: t('view.toggleFullscreen'), role: 'togglefullscreen' },
{ label: t('view.toggleFullscreen'), role: 'togglefullscreen' },
],
},
{
@@ -200,9 +196,9 @@ export class WindowsMenu extends BaseMenuPlatform implements IMenuPlatform {
template.push({
label: t('dev.title'),
submenu: [
{ accelerator: 'Ctrl+R', label: t('dev.reload'), role: 'reload' },
{ accelerator: 'Ctrl+Shift+R', label: t('dev.forceReload'), role: 'forceReload' },
{ accelerator: 'Ctrl+Shift+I', label: t('dev.devTools'), role: 'toggleDevTools' },
{ label: t('dev.reload'), role: 'reload' },
{ label: t('dev.forceReload'), role: 'forceReload' },
{ label: t('dev.devTools'), role: 'toggleDevTools' },
{ type: 'separator' },
{
click: () => {
@@ -345,8 +341,8 @@ export class WindowsMenu extends BaseMenuPlatform implements IMenuPlatform {
// Standard edit actions for chat
template.push(
{ accelerator: 'Ctrl+C', label: t('edit.copy'), role: 'copy' },
{ accelerator: 'Ctrl+V', label: t('edit.paste'), role: 'paste' },
{ label: t('edit.copy'), role: 'copy' },
{ label: t('edit.paste'), role: 'paste' },
{ type: 'separator' },
{ label: t('edit.selectAll'), role: 'selectAll' },
);
@@ -386,11 +382,11 @@ export class WindowsMenu extends BaseMenuPlatform implements IMenuPlatform {
// Standard edit actions for editor
template.push(
{ accelerator: 'Ctrl+X', label: t('edit.cut'), role: 'cut' },
{ accelerator: 'Ctrl+C', label: t('edit.copy'), role: 'copy' },
{ accelerator: 'Ctrl+V', label: t('edit.paste'), role: 'paste' },
{ label: t('edit.cut'), role: 'cut' },
{ label: t('edit.copy'), role: 'copy' },
{ label: t('edit.paste'), role: 'paste' },
{ type: 'separator' },
{ accelerator: 'Ctrl+A', label: t('edit.selectAll'), role: 'selectAll' },
{ label: t('edit.selectAll'), role: 'selectAll' },
{ type: 'separator' },
{ label: t('edit.delete'), role: 'delete' },
);