fix: improve mouse divider dragging logic and event handling

This commit is contained in:
n loewen (aider) 2025-05-05 08:55:40 +01:00
parent cfdef57993
commit f58ae2783f
1 changed files with 11 additions and 10 deletions

View File

@ -81,34 +81,35 @@ def main(stdscr, filename):
if bstate & curses.BUTTON1_PRESSED: if bstate & curses.BUTTON1_PRESSED:
if mx == divider_col: if mx == divider_col:
dragging_divider = True dragging_divider = True
elif bstate & curses.BUTTON1_RELEASED:
dragging_divider = False
# Update divider position while dragging # Update divider position while dragging
if dragging_divider: if dragging_divider:
min_col = 10 min_col = 10
max_col = width - 20 # leave space for right pane max_col = width - 20 # leave space for right pane
divider_col = max(min_col, min(mx, max_col)) divider_col = max(min_col, min(mx, max_col))
elif bstate & curses.BUTTON1_CLICKED: if bstate & curses.BUTTON1_RELEASED:
dragging_divider = False
elif bstate & curses.BUTTON1_CLICKED and not dragging_divider:
focus = "left" if mx < divider_col else "right" focus = "left" if mx < divider_col else "right"
except curses.error: except curses.error:
pass pass
# Check for mouse release even when no explicit mouse event # Continue updating divider position even without explicit mouse events
# This helps catch mouse releases that might be missed
elif dragging_divider: elif dragging_divider:
try: try:
_, mx, my, _, bstate = curses.getmouse() _, mx, my, _, bstate = curses.getmouse()
# Update divider position while dragging
# Update divider position
min_col = 10 min_col = 10
max_col = width - 20 # leave space for right pane max_col = width - 20 # leave space for right pane
divider_col = max(min_col, min(mx, max_col)) divider_col = max(min_col, min(mx, max_col))
# Check if button is no longer pressed # Check for mouse button release
if not (bstate & curses.BUTTON1_PRESSED): if bstate & curses.BUTTON1_RELEASED or not (bstate & curses.BUTTON1_PRESSED):
dragging_divider = False dragging_divider = False
except curses.error: except curses.error:
# If we can't get mouse state, keep the divider where it is
pass pass
# #