refactor: Simplify mouse event handling and remove real-time divider tracking

This commit is contained in:
n loewen (aider) 2025-05-05 09:08:13 +01:00
parent 8fa0ed1fc5
commit 7b4b951025
1 changed files with 7 additions and 33 deletions

View File

@ -16,11 +16,9 @@ def get_file_at_commit(commit_hash, filename):
def main(stdscr, filename):
curses.curs_set(0)
curses.mousemask(curses.ALL_MOUSE_EVENTS | curses.REPORT_MOUSE_POSITION)
curses.mousemask(curses.ALL_MOUSE_EVENTS)
curses.mouseinterval(0)
stdscr.keypad(True)
# Default to blocking mode (-1)
stdscr.timeout(-1)
commits = get_commits(filename)
selected_commit = 0
@ -80,51 +78,27 @@ def main(stdscr, filename):
try:
_, mx, my, _, bstate = curses.getmouse()
# Start dragging when mouse is pressed on or near divider
# Handle divider dragging
if bstate & curses.BUTTON1_PRESSED:
if abs(mx - divider_col) <= 1: # Allow clicking within 1 column of divider
dragging_divider = True
# Set short timeout for responsive updates during dragging
stdscr.timeout(1)
# Update divider position while dragging
if dragging_divider:
# Update divider position on drag
elif dragging_divider and (bstate & curses.BUTTON1_PRESSED):
min_col = 10
max_col = width - 20 # leave space for right pane
divider_col = max(min_col, min(mx, max_col))
# Stop dragging when mouse is released
if bstate & curses.BUTTON1_RELEASED:
# Handle mouse release
elif bstate & curses.BUTTON1_RELEASED:
if dragging_divider:
dragging_divider = False
# Reset to blocking mode when done dragging
stdscr.timeout(-1)
else:
# Change focus on mouse click (when not dragging)
focus = "left" if mx < divider_col else "right"
except curses.error:
pass
# When no key is pressed but we're in dragging mode (timeout returns -1)
elif key == -1 and dragging_divider:
try:
# Get current mouse position and update divider
_, mx, my, _, bstate = curses.getmouse()
# Update divider position based on current mouse position
min_col = 10
max_col = width - 20 # leave space for right pane
divider_col = max(min_col, min(mx, max_col))
# Check for mouse button release
if not (bstate & curses.BUTTON1_PRESSED):
dragging_divider = False
# Reset to blocking mode when done dragging
stdscr.timeout(-1)
except curses.error:
# If we can't get mouse state, continue
pass
# Exit on 'q' or ESC
elif key in [ord('q'), 27]:
break