mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2025-12-06 05:50:53 +03:00
changed: when the mouse wheel event is not in the viewport, propagate the event to the nearest parent
Scenario: A JTabbedPane inside a JScrollPane Expectation: Moving the mouse wheel inside the TabbedPane's content should cause the outer ScrollPane to scroll Actual: Event dispatcher targets TabbedPane, but the TabbedPane's mouse listener does nothing because the event is not in the viewport. The only other target is the ancestor (Window), which discards the event. Fix: If the event does not occur in the viewport, delegate it up in the hierarchy to the nearest parent with a MouseWheelListener
This commit is contained in:
@@ -2707,8 +2707,22 @@ debug*/
|
||||
|
||||
// because this listener receives mouse events for the whole tabbed pane,
|
||||
// we have to check whether the mouse is located over the viewport
|
||||
if( !isInViewport( e.getX(), e.getY() ) )
|
||||
if( !isInViewport( e.getX(), e.getY() ) ) {
|
||||
// if it is not in the viewport, retarget the even to a parent container
|
||||
// which might support scrolling (e.g. a surrounding ScrollPane)
|
||||
Container parent = getParent();
|
||||
while (parent != null) {
|
||||
// informing the first parent with a mouse wheel listener should be sufficient.
|
||||
if (parent.getMouseWheelListeners().length > 0) {
|
||||
for (MouseWheelListener parentListener : parent.getMouseWheelListeners()) {
|
||||
parentListener.mouseWheelMoved(e);
|
||||
}
|
||||
return;
|
||||
}
|
||||
parent = parent.getContainer();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
lastMouseX = e.getX();
|
||||
lastMouseY = e.getY();
|
||||
|
||||
Reference in New Issue
Block a user