@@ -120,6 +120,8 @@ to assist developers in writing, debugging, and understanding code directly from
tea.WithAltScreen(),
tea.WithKeyReleases(),
tea.WithUniformKeyLayout(),
+ tea.WithMouseCellMotion(), // Use cell motion instead of all motion to reduce event flooding
+ tea.WithFilter(tui.MouseEventFilter), // Filter mouse events based on focus state
)
// Setup the subscriptions, this will send services events to the TUI
@@ -31,6 +31,29 @@ import (
"github.com/charmbracelet/lipgloss/v2"
)
+// MouseEventFilter filters mouse events based on the current focus state
+// This is used with tea.WithFilter to prevent mouse scroll events from
+// interfering with typing performance in the editor
+func MouseEventFilter(m tea.Model, msg tea.Msg) tea.Msg {
+ // Only filter mouse events
+ switch msg.(type) {
+ case tea.MouseWheelMsg, tea.MouseMotionMsg:
+ // Check if we have an appModel and if editor is focused
+ if appModel, ok := m.(*appModel); ok {
+ if appModel.currentPage == chat.ChatPageID {
+ if chatPage, ok := appModel.pages[appModel.currentPage].(chat.ChatPage); ok {
+ // If editor is focused (not chatFocused), filter out mouse wheel/motion events
+ if !chatPage.IsChatFocused() {
+ return nil // Filter out the event
+ }
+ }
+ }
+ }
+ }
+ // Allow all other events to pass through
+ return msg
+}
+
// appModel represents the main application model that manages pages, dialogs, and UI state.
type appModel struct {
wWidth, wHeight int // Window dimensions
@@ -82,9 +105,6 @@ func (a appModel) Init() tea.Cmd {
return nil
})
- // Enable mouse support.- cmds = append(cmds, tea.EnableMouseAllMotion)-
return tea.Batch(cmds...)
}