From ec1ca426d47c0b151e3c63484500865969781c84 Mon Sep 17 00:00:00 2001 From: Matt Parker <61717342+MattParkerDev@users.noreply.github.com> Date: Wed, 29 Oct 2025 21:39:30 +1000 Subject: [PATCH] record mouse clicks in CodeEdit for navigation --- .../Features/CodeEditor/SharpIdeCodeEdit.cs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs b/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs index baa77c3..41e2632 100644 --- a/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs +++ b/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs @@ -14,6 +14,7 @@ using SharpIDE.Application.Features.Debugging; using SharpIDE.Application.Features.Events; using SharpIDE.Application.Features.FilePersistence; using SharpIDE.Application.Features.FileWatching; +using SharpIDE.Application.Features.NavigationHistory; using SharpIDE.Application.Features.Run; using SharpIDE.Application.Features.SolutionDiscovery; using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence; @@ -54,6 +55,7 @@ public partial class SharpIdeCodeEdit : CodeEdit [Inject] private readonly IdeCodeActionService _ideCodeActionService = null!; [Inject] private readonly FileChangedService _fileChangedService = null!; [Inject] private readonly IdeApplyCompletionService _ideApplyCompletionService = null!; + [Inject] private readonly IdeNavigationHistoryService _navigationHistoryService = null!; private readonly List _codeCompletionTriggers = [ @@ -341,9 +343,20 @@ public partial class SharpIdeCodeEdit : CodeEdit // return base._FilterCodeCompletionCandidates(candidates); // } + // This only gets invoked if the Node is focused public override void _GuiInput(InputEvent @event) { - if (@event is InputEventKey { Pressed: true } keyEvent) + if (@event is InputEventMouseButton { Pressed: true } mouseEvent) + { + var (col, line) = GetLineColumnAtPos((Vector2I)mouseEvent.Position); + var current = _navigationHistoryService.Current; + if (current!.File != _currentFile) throw new InvalidOperationException("Current navigation history file does not match the focused code editor file."); + if (current.LinePosition.Line != line) // Only record a new navigation if the line has changed + { + _navigationHistoryService.RecordNavigation(_currentFile, new SharpIdeFileLinePosition(line, col)); + } + } + else if (@event is InputEventKey { Pressed: true } keyEvent) { var codeCompletionSelectedIndex = GetCodeCompletionSelectedIndex(); var isCodeCompletionPopupOpen = codeCompletionSelectedIndex is not -1;