This commit establishes a comprehensive native menu system for the Tauri application, bringing it to parity with the Electron implementation and enabling full keyboard shortcut support. ## Key Features Added **Native Menu System:** - Complete menu bar with File, Edit, View, and Window menus - Platform-specific adaptations (macOS app menu, Windows/Linux quit behavior) - Full menu event handling system with proper window management **Keyboard Accelerators:** - CmdOrCtrl+N for New Instance creation - Standard Edit menu shortcuts (Undo, Redo, Cut, Copy, Paste, Select All) - View menu shortcuts (Reload, Force Reload, Toggle DevTools, Fullscreen) - Built-in zoom hotkeys enabled via zoomHotkeysEnabled **Enhanced Capabilities:** - Added core:menu:default permission for menu management - Added core:webview:allow-set-webview-zoom for zoom functionality - Proper event communication between Tauri backend and frontend **Frontend Integration:** - Tauri event listener for menu:newInstance events - Proper cleanup and error handling for event subscriptions - Runtime environment detection for Tauri-specific behavior ## Technical Changes **Backend (Rust):** - Replaced empty menu stub with full SubmenuBuilder implementation - Added comprehensive menu event handling with window operations - Implemented MenuItem::with_id for accelerator support - Added platform-specific menu construction logic **Frontend (TypeScript):** - Added Tauri event listener integration in main App component - Proper lifecycle management with onMount/onCleanup - Runtime environment detection for conditional Tauri behavior **Configuration:** - Enabled zoomHotkeysEnabled in tauri.conf.json for built-in zoom support - Updated capabilities to include necessary menu and webview permissions This implementation provides a native, platform-consistent user experience with full keyboard shortcut support, matching the functionality users expect from desktop applications.
51 lines
1.1 KiB
JSON
51 lines
1.1 KiB
JSON
{
|
|
"$schema": "https://schema.tauri.app/config/2",
|
|
"productName": "CodeNomad",
|
|
"version": "0.1.0",
|
|
"identifier": "ai.opencode.client",
|
|
"build": {
|
|
"beforeDevCommand": "npm run dev:bootstrap",
|
|
"beforeBuildCommand": "npm run bundle:server",
|
|
"frontendDist": "resources/ui-loading"
|
|
},
|
|
|
|
|
|
|
|
"app": {
|
|
"withGlobalTauri": true,
|
|
"windows": [
|
|
{
|
|
"label": "main",
|
|
"title": "CodeNomad",
|
|
"url": "loading.html",
|
|
"width": 1400,
|
|
"height": 900,
|
|
"minWidth": 800,
|
|
"minHeight": 600,
|
|
"center": true,
|
|
"resizable": true,
|
|
"fullscreen": false,
|
|
"decorations": true,
|
|
"theme": "Dark",
|
|
"backgroundColor": "#1a1a1a",
|
|
"zoomHotkeysEnabled": true
|
|
}
|
|
],
|
|
"security": {
|
|
"assetProtocol": {
|
|
"scope": ["**"]
|
|
},
|
|
"capabilities": ["main-window-native-dialogs"]
|
|
}
|
|
},
|
|
"bundle": {
|
|
"active": true,
|
|
"resources": [
|
|
"resources/server",
|
|
"resources/ui-loading"
|
|
],
|
|
"icon": ["icon.icns", "icon.ico", "icon.png"],
|
|
"targets": ["app", "appimage", "deb", "rpm", "nsis"]
|
|
}
|
|
}
|