From cfdef579936b7acbc0739f6da602ddcf7cabb6d9 Mon Sep 17 00:00:00 2001 From: "n loewen (aider)" Date: Mon, 5 May 2025 08:54:17 +0100 Subject: [PATCH] fix: improve mouse event handling for divider dragging --- git_time_machine.py | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/git_time_machine.py b/git_time_machine.py index 00d74ee..73e7c0b 100644 --- a/git_time_machine.py +++ b/git_time_machine.py @@ -81,29 +81,32 @@ def main(stdscr, filename): if bstate & curses.BUTTON1_PRESSED: if mx == divider_col: dragging_divider = True - elif dragging_divider: - # Update divider while dragging + elif bstate & curses.BUTTON1_RELEASED: + dragging_divider = False + + # Update divider position while dragging + if dragging_divider: min_col = 10 max_col = width - 20 # leave space for right pane divider_col = max(min_col, min(mx, max_col)) - - elif bstate & curses.BUTTON1_RELEASED: - dragging_divider = False - + elif bstate & curses.BUTTON1_CLICKED: focus = "left" if mx < divider_col else "right" except curses.error: pass + # Check for mouse release even when no explicit mouse event + # This helps catch mouse releases that might be missed elif dragging_divider: - # Force a mouse event check while dragging try: _, mx, my, _, bstate = curses.getmouse() - if 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)) - elif bstate & curses.BUTTON1_RELEASED: + # Update divider position while dragging + min_col = 10 + max_col = width - 20 # leave space for right pane + divider_col = max(min_col, min(mx, max_col)) + + # Check if button is no longer pressed + if not (bstate & curses.BUTTON1_PRESSED): dragging_divider = False except curses.error: pass