diff --git a/apps/electron-backend/src/app/app.ts b/apps/electron-backend/src/app/app.ts index 7eae76a51..07e9d479c 100644 --- a/apps/electron-backend/src/app/app.ts +++ b/apps/electron-backend/src/app/app.ts @@ -1,4 +1,4 @@ -import { BrowserWindow, screen, shell } from 'electron'; +import { BrowserWindow, Menu, screen, shell } from 'electron'; import { join } from 'path'; import { environment } from '../environments/environment'; import { rendererAppName, rendererAppPort } from './constants'; @@ -115,6 +115,43 @@ export default class App { store.set(WINDOW_BOUNDS, App.mainWindow.getNormalBounds()); } }); + + // Enable context menu for input fields only + App.mainWindow.webContents.on('context-menu', (event, params) => { + const { isEditable, editFlags } = params; + + // Check if this is an editable field (input, textarea, contenteditable) + // editFlags.canPaste is a good indicator of an input field + if (isEditable && editFlags.canPaste) { + const menu = Menu.buildFromTemplate([ + { + label: 'Cut', + role: 'cut', + enabled: editFlags.canCut, + }, + { + label: 'Copy', + role: 'copy', + enabled: editFlags.canCopy, + }, + { + label: 'Paste', + role: 'paste', + enabled: editFlags.canPaste, + }, + { + type: 'separator', + }, + { + label: 'Select All', + role: 'selectAll', + enabled: editFlags.canSelectAll, + }, + ]); + + menu.popup(); + } + }); } private static loadMainWindow() { diff --git a/apps/web/src/styles.scss b/apps/web/src/styles.scss index 1ee747487..bf39f175d 100644 --- a/apps/web/src/styles.scss +++ b/apps/web/src/styles.scss @@ -23,6 +23,12 @@ html { font-family: Roboto, 'Helvetica Neue', sans-serif; } +// Re-enable context menu and text selection for input fields +input, +textarea { + user-select: text; +} + @media (display-mode: standalone) { body { overscroll-behavior-y: contain;