Browse Source

chore: reworked the release and drag events

pull/609/head
Parodi, Eugenio 🌶 4 weeks ago
parent
commit
01d9b402ae
  1. 21
      libs/pyTermTk/TermTk/TTkCore/ttk.py
  2. 4
      libs/pyTermTk/TermTk/TTkWidgets/tabwidget.py

21
libs/pyTermTk/TermTk/TTkCore/ttk.py

@ -320,21 +320,15 @@ class TTk(_TTkRootContainer):
# - Drag # - Drag
# - Release # - Release
focusWidget = self._getFocusWidget() focusWidget = self._getFocusWidget()
if ( focusWidget is not None and pendingReleaseWidget = self._getPendingMouseReleaseWidget()
( mevt.evt == TTkK.Drag or
mevt.evt == TTkK.Release ) and if ( pendingReleaseWidget is not None and
not TTkHelper.isDnD() ) : mevt.evt in (TTkK.Drag,TTkK.Release) and
x,y = TTkHelper.absPos(focusWidget) not TTkHelper.isDnD() ) :
x,y = TTkHelper.absPos(pendingReleaseWidget)
nmevt = mevt.clone(pos=(mevt.x-x, mevt.y-y)) nmevt = mevt.clone(pos=(mevt.x-x, mevt.y-y))
focusWidget.mouseEvent(nmevt) pendingReleaseWidget.mouseEvent(nmevt)
else: 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 # 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 # where the mouse is leaving any widget able to handle the drop event
if not self.mouseEvent(mevt): if not self.mouseEvent(mevt):
@ -348,6 +342,7 @@ class TTk(_TTkRootContainer):
# Clean the Drag and Drop in case of mouse release # Clean the Drag and Drop in case of mouse release
if mevt.evt == TTkK.Release: if mevt.evt == TTkK.Release:
TTkHelper.dndEnd() TTkHelper.dndEnd()
self._setPendingMouseReleaseWidget(None)
def _time_event(self): def _time_event(self):
# Event.{wait and clear} should be atomic, # Event.{wait and clear} should be atomic,

4
libs/pyTermTk/TermTk/TTkWidgets/tabwidget.py

@ -367,7 +367,7 @@ class TTkTabButton(_TTkTabColorButton):
if self._closable and y == offY and w-4<=x<w-1: if self._closable and y == offY and w-4<=x<w-1:
self._closeButtonPressed = True self._closeButtonPressed = True
self.update() self.update()
return False return True
return super().mouseReleaseEvent(evt) return super().mouseReleaseEvent(evt)
def mouseReleaseEvent(self, evt:TTkMouseEvent) -> bool: def mouseReleaseEvent(self, evt:TTkMouseEvent) -> bool:
@ -379,7 +379,7 @@ class TTkTabButton(_TTkTabColorButton):
elif self._closable and y == offY and w-4<=x<w-1 and self._closeButtonPressed: elif self._closable and y == offY and w-4<=x<w-1 and self._closeButtonPressed:
self.closeClicked.emit() self.closeClicked.emit()
self._closeButtonPressed = False self._closeButtonPressed = False
return False return True
def leaveEvent(self, evt): def leaveEvent(self, evt):
self._closeHovered = False self._closeHovered = False

Loading…
Cancel
Save