gui: suppress RMB context menus in prompt and chat blocks

B3 (right-click) now only plumbs selection when available — no fallback
context menu. Mouse chording (B1+B2 cut, B1+B3 paste) still works.
Removed contextMenuComponent and promptContextMenu entirely.
This commit is contained in:
Levi Neely 2026-10-08 15:40:31 +02:00
parent fa58b0f033
commit 5add387cc8
2 changed files with 7 additions and 114 deletions

View File

@ -250,19 +250,12 @@ Column {
}
mouse.accepted = true
} else if (mouse.button === Qt.RightButton) {
// B3: Plumb selection, or show context menu
// B3: Plumb selection (no context menu)
var sel = mainTextEdit.selectedText
if (sel && sel.trim() !== "" && plumber.available()) {
plumber.plumb(sel.trim())
mouse.accepted = true
} else {
// Fall back to context menu
if (!mainTextEdit._menu) {
mainTextEdit._menu = contextMenuComponent.createObject(mainTextEdit)
}
mainTextEdit._menu.popup()
mouse.accepted = true
}
mouse.accepted = true
}
}
@ -270,7 +263,6 @@ Column {
leftHeld = false
}
}
property var _menu: null
}
// Diagram path: use Repeater for blocks that contain diagrams
@ -397,17 +389,12 @@ Column {
}
mouse.accepted = true
} else if (mouse.button === Qt.RightButton) {
// B3: Plumb selection (no context menu)
var sel = textEdit.selectedText
if (sel && sel.trim() !== "" && plumber.available()) {
plumber.plumb(sel.trim())
mouse.accepted = true
} else {
if (!textEdit._menu) {
textEdit._menu = contextMenuComponent.createObject(textEdit)
}
textEdit._menu.popup()
mouse.accepted = true
}
mouse.accepted = true
}
}
@ -415,51 +402,6 @@ Column {
leftHeld = false
}
}
property Menu _menu: null
Component.onDestruction: {
if (_menu) _menu.destroy()
}
}
}
// Shared context menu component (created on demand)
Component {
id: contextMenuComponent
Menu {
id: ctxMenu
property TextEdit target: parent
MenuItem {
text: "Execute (B2)"
enabled: ctxMenu.target ? ctxMenu.target.selectedText.length > 0 : false
onTriggered: if (ctxMenu.target) executeText(ctxMenu.target.selectedText)
}
MenuItem {
text: "Plumb (B3)"
enabled: ctxMenu.target ? ctxMenu.target.selectedText.length > 0 && plumber.available() : false
onTriggered: if (ctxMenu.target) plumber.plumb(ctxMenu.target.selectedText.trim())
}
MenuSeparator {}
MenuItem {
text: "Cut (B1+B2)"
enabled: ctxMenu.target ? ctxMenu.target.selectedText.length > 0 : false
onTriggered: if (ctxMenu.target) ctxMenu.target.cut()
}
MenuItem {
text: "Copy"
enabled: ctxMenu.target ? ctxMenu.target.selectedText.length > 0 : false
onTriggered: if (ctxMenu.target) ctxMenu.target.copy()
}
MenuItem {
text: "Paste (B1+B3)"
onTriggered: if (ctxMenu.target) ctxMenu.target.paste()
}
MenuItem {
text: "Select All"
onTriggered: if (ctxMenu.target) ctxMenu.target.selectAll()
}
}
}
@ -556,20 +498,15 @@ Column {
if (sel && sel.trim() !== "") executeText(sel)
mouse.accepted = true
} else if (mouse.button === Qt.RightButton) {
// B3: Plumb selection (no context menu)
var sel = sourceEdit.selectedText
if (sel && sel.trim() !== "" && plumber.available()) {
plumber.plumb(sel.trim())
} else {
if (!sourceEdit._menu) {
sourceEdit._menu = contextMenuComponent.createObject(sourceEdit)
}
sourceEdit._menu.popup()
}
mouse.accepted = true
}
}
}
property Menu _menu: null
}
Column {

View File

@ -493,16 +493,13 @@ Item {
if (sel && sel.trim() !== "") {
ollie.submit(sel.trim())
} else {
// No selection - paste from clipboard and execute?
// Or just ignore. For now, ignore.
// No selection - ignore
}
} else if (mouse.button === Qt.RightButton) {
// B3: Plumb selection or show context menu
// B3: Plumb selection (no context menu)
var sel = promptInput.selectedText
if (sel && sel.trim() !== "" && plumber.available()) {
plumber.plumb(sel.trim())
} else {
promptContextMenu.popup()
}
}
}
@ -511,47 +508,6 @@ Item {
leftHeld = false
}
}
Menu {
id: promptContextMenu
MenuItem {
text: "Execute Selection (B2)"
enabled: promptInput.selectedText.length > 0
onTriggered: {
var sel = promptInput.selectedText
if (sel && sel.trim() !== "") ollie.submit(sel.trim())
}
}
MenuItem {
text: "Plumb Selection (B3)"
enabled: promptInput.selectedText.length > 0 && plumber.available()
onTriggered: {
var sel = promptInput.selectedText
if (sel && sel.trim() !== "") plumber.plumb(sel.trim())
}
}
MenuSeparator {}
MenuItem {
text: "Cut (B1+B2)"
enabled: promptInput.selectedText.length > 0
onTriggered: promptInput.cut()
}
MenuItem {
text: "Copy"
enabled: promptInput.selectedText.length > 0
onTriggered: promptInput.copy()
}
MenuItem {
text: "Paste (B1+B3)"
enabled: promptInput.canPaste
onTriggered: promptInput.paste()
}
MenuSeparator {}
MenuItem {
text: "Select All"
onTriggered: promptInput.selectAll()
}
}
}
// Paste button (mouse-first workflow)