From 5b4723d7d4c1fa3ae16c0415ae158b5cf30c57a8 Mon Sep 17 00:00:00 2001 From: EnumDev Date: Tue, 19 May 2026 14:09:41 +0300 Subject: [PATCH] Add click support to top menu --- src/window.go | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/window.go b/src/window.go index 3771711..97f9db9 100644 --- a/src/window.go +++ b/src/window.go @@ -482,9 +482,40 @@ func (window *Window) handleMouseInput(ev *tcell.EventMouse) { if ev.Buttons() == tcell.Button1 { // Get last click time lastClickTime := time.UnixMilli(lastClick) - // Ensure click was in buffer area + x1, y1, x2, y2 := window.GetTextAreaDimensions() - if mouseX >= x1 && mouseY >= y1 && mouseX <= x2 && mouseY <= y2 { + + if mouseY == 0 && Config.ShowTopMenu && !mouseHeld { + // Mouse is in top menu + + // Find clicked button + buttonFound := false + for _, button := range TopMenuButtons { + if mouseX >= button.PosX && mouseX <= button.PosX+len(button.Name) { + buttonFound = true + button.Action(window, &button) + } + } + + if !buttonFound { + // Exit top menu + ClearDropdowns() + window.CursorMode = CursorModeBuffer + } + } else if window.CursorMode == CursorModeDropdown && !mouseHeld { + // Mouse is in top menu + + if mouseX >= ActiveDropdown.PosX && mouseX <= ActiveDropdown.PosX+ActiveDropdown.Width+1 && mouseY > ActiveDropdown.PosY && mouseY <= ActiveDropdown.PosY+len(ActiveDropdown.Options) { + // Dropdown button clicked + ActiveDropdown.Selected = mouseY - ActiveDropdown.PosY - 1 + ActiveDropdown.Action(ActiveDropdown.Selected) + } else { + // Exit top menu + ClearDropdowns() + window.CursorMode = CursorModeBuffer + } + } else if mouseX >= x1 && mouseY >= y1 && mouseX <= x2 && mouseY <= y2 && window.CursorMode == CursorModeBuffer { + // Mouse is in buffer area currentPos := window.CurrentBuffer.CursorPos mouseBufferPos := Position{mouseX + window.CurrentBuffer.Offset.X - x1, mouseY + window.CurrentBuffer.Offset.Y - y1}