diff --git a/libs/pyTermTk/TermTk/TTkCore/ttk.py b/libs/pyTermTk/TermTk/TTkCore/ttk.py index a171bf5e..c48f4243 100644 --- a/libs/pyTermTk/TermTk/TTkCore/ttk.py +++ b/libs/pyTermTk/TermTk/TTkCore/ttk.py @@ -320,21 +320,15 @@ class TTk(_TTkRootContainer): # - Drag # - Release focusWidget = self._getFocusWidget() - if ( focusWidget is not None and - ( mevt.evt == TTkK.Drag or - mevt.evt == TTkK.Release ) and - not TTkHelper.isDnD() ) : - x,y = TTkHelper.absPos(focusWidget) + pendingReleaseWidget = self._getPendingMouseReleaseWidget() + + if ( pendingReleaseWidget is not None and + mevt.evt in (TTkK.Drag,TTkK.Release) and + not TTkHelper.isDnD() ) : + x,y = TTkHelper.absPos(pendingReleaseWidget) nmevt = mevt.clone(pos=(mevt.x-x, mevt.y-y)) - focusWidget.mouseEvent(nmevt) + pendingReleaseWidget.mouseEvent(nmevt) else: - # Sometimes the release event is not retrieved - if ( ( _pmr:=self._getPendingMouseReleaseWidget() ) and - not TTkHelper.isDnD() ): - x,y = TTkHelper.absPos(_pmr) - rmevt = mevt.clone(evt=TTkK.Release, pos=(mevt.x-x, mevt.y-y)) - _pmr.mouseEvent(rmevt) - self._setPendingMouseReleaseWidget(None) # Adding this Crappy logic to handle a corner case in the drop routine # where the mouse is leaving any widget able to handle the drop event if not self.mouseEvent(mevt): @@ -348,6 +342,7 @@ class TTk(_TTkRootContainer): # Clean the Drag and Drop in case of mouse release if mevt.evt == TTkK.Release: TTkHelper.dndEnd() + self._setPendingMouseReleaseWidget(None) def _time_event(self): # Event.{wait and clear} should be atomic, diff --git a/libs/pyTermTk/TermTk/TTkWidgets/tabwidget.py b/libs/pyTermTk/TermTk/TTkWidgets/tabwidget.py index e696a937..69f762f8 100644 --- a/libs/pyTermTk/TermTk/TTkWidgets/tabwidget.py +++ b/libs/pyTermTk/TermTk/TTkWidgets/tabwidget.py @@ -367,7 +367,7 @@ class TTkTabButton(_TTkTabColorButton): if self._closable and y == offY and w-4<=x bool: @@ -379,7 +379,7 @@ class TTkTabButton(_TTkTabColorButton): elif self._closable and y == offY and w-4<=x