TabbedPane: avoid scrolling selected tab back into visible area (after wheel scrolling) if the mouse is over a custom tab component that handles mouse events (e.g. a close button)

This commit is contained in:
Karl Tauber
2020-10-08 23:46:43 +02:00
parent 15ac77107f
commit 5b0c96cd6d
3 changed files with 74 additions and 14 deletions

View File

@@ -744,24 +744,14 @@ public class FlatTabbedPaneUI
@Override
public void mouseMoved( MouseEvent e ) {
lastMouseX = e.getX();
lastMouseY = e.getY();
boolean wasInViewport = inViewport;
inViewport = isInViewport( e.getX(), e.getY() );
if( inViewport != wasInViewport ) {
if( !inViewport )
viewportExited();
else if( timer != null )
timer.stop();
}
checkViewportExited( e.getX(), e.getY() );
}
@Override
public void mouseExited( MouseEvent e ) {
inViewport = false;
viewportExited();
// this event occurs also if mouse is moved to a custom tab component
// that handles mouse events (e.g. a close button)
checkViewportExited( e.getX(), e.getY() );
}
@Override
@@ -778,6 +768,21 @@ public class FlatTabbedPaneUI
setRolloverTab( tabForCoordinate( tabPane, x, y ) );
}
protected void checkViewportExited( int x, int y ) {
lastMouseX = x;
lastMouseY = y;
boolean wasInViewport = inViewport;
inViewport = isInViewport( x, y );
if( inViewport != wasInViewport ) {
if( !inViewport )
viewportExited();
else if( timer != null )
timer.stop();
}
}
protected void viewportExited() {
if( !scrolled )
return;