diff --git a/src/main/index.ts b/src/main/index.ts index 6484e149..3b2dcdca 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -481,7 +481,16 @@ function createWindow(): void { const ZOOM_OUT_KEYS = new Set(['-', '_']); mainWindow.webContents.on('before-input-event', (event, input) => { if (!mainWindow || mainWindow.isDestroyed()) return; - if (!input.meta || input.type !== 'keyDown') return; + if (input.type !== 'keyDown') return; + + // Prevent Electron's default Ctrl+R / Cmd+R page reload so the renderer + // keyboard handler can use it as "Refresh Session" (fixes #58). + if ((input.control || input.meta) && input.key.toLowerCase() === 'r') { + event.preventDefault(); + return; + } + + if (!input.meta) return; const currentLevel = mainWindow.webContents.getZoomLevel(); diff --git a/src/renderer/components/dashboard/DashboardView.tsx b/src/renderer/components/dashboard/DashboardView.tsx index a85afb05..a427bb54 100644 --- a/src/renderer/components/dashboard/DashboardView.tsx +++ b/src/renderer/components/dashboard/DashboardView.tsx @@ -11,6 +11,7 @@ import React, { useEffect, useMemo, useState } from 'react'; import { api } from '@renderer/api'; import { useStore } from '@renderer/store'; +import { formatShortcut } from '@renderer/utils/stringUtils'; import { createLogger } from '@shared/utils/logger'; import { useShallow } from 'zustand/react/shallow'; @@ -75,7 +76,7 @@ const CommandSearch = ({ value, onChange }: Readonly): React diff --git a/src/renderer/components/layout/TabBar.tsx b/src/renderer/components/layout/TabBar.tsx index 6748a0a5..dfc458c8 100644 --- a/src/renderer/components/layout/TabBar.tsx +++ b/src/renderer/components/layout/TabBar.tsx @@ -14,6 +14,7 @@ import { horizontalListSortingStrategy, SortableContext } from '@dnd-kit/sortabl import { isElectronMode } from '@renderer/api'; import { HEADER_ROW1_HEIGHT } from '@renderer/constants/layout'; import { useStore } from '@renderer/store'; +import { formatShortcut } from '@renderer/utils/stringUtils'; import { Bell, PanelLeft, Plus, RefreshCw, Search, Settings } from 'lucide-react'; import { useShallow } from 'zustand/react/shallow'; @@ -330,7 +331,7 @@ export const TabBar = ({ paneId }: TabBarProps): React.JSX.Element => { onMouseEnter={() => setRefreshHover(true)} onMouseLeave={() => setRefreshHover(false)} onClick={handleRefresh} - title="Refresh Session (Cmd+R)" + title={`Refresh Session (${formatShortcut('R')})`} > @@ -367,7 +368,7 @@ export const TabBar = ({ paneId }: TabBarProps): React.JSX.Element => { color: searchHover ? 'var(--color-text)' : 'var(--color-text-muted)', backgroundColor: searchHover ? 'var(--color-surface-raised)' : 'transparent', }} - title="Search (Cmd+K)" + title={`Search (${formatShortcut('K')})`} > diff --git a/src/renderer/components/layout/TabContextMenu.tsx b/src/renderer/components/layout/TabContextMenu.tsx index cd3fedf8..17f8bf0a 100644 --- a/src/renderer/components/layout/TabContextMenu.tsx +++ b/src/renderer/components/layout/TabContextMenu.tsx @@ -7,6 +7,8 @@ import { useEffect, useRef } from 'react'; +import { formatShortcut } from '@renderer/utils/stringUtils'; + interface TabContextMenuProps { x: number; y: number; @@ -100,13 +102,13 @@ export const TabContextMenu = ({ onClick={handleClick(onCloseSelectedTabs)} /> ) : ( - + )}
@@ -127,7 +129,7 @@ export const TabContextMenu = ({ /> )}
- +
); }; diff --git a/src/renderer/components/sidebar/SessionContextMenu.tsx b/src/renderer/components/sidebar/SessionContextMenu.tsx index 4adbf6ee..626cc6a5 100644 --- a/src/renderer/components/sidebar/SessionContextMenu.tsx +++ b/src/renderer/components/sidebar/SessionContextMenu.tsx @@ -7,6 +7,7 @@ import { useEffect, useRef, useState } from 'react'; import { MAX_PANES } from '@renderer/types/panes'; +import { formatShortcut } from '@renderer/utils/stringUtils'; import { Check, ClipboardCopy, Eye, EyeOff, Pin, PinOff, Terminal } from 'lucide-react'; interface SessionContextMenuProps { @@ -98,7 +99,7 @@ export const SessionContextMenu = ({ }} > - +