mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
process mouse wheel event by parent scroll pane if it is not processed by a scroll pane
This commit is contained in:
@@ -406,7 +406,7 @@ class DefaultScrollBarUI extends ScrollBarUI {
|
||||
Point point = event.getLocationOnScreen();
|
||||
SwingUtilities.convertPointFromScreen(point, view);
|
||||
Component target = SwingUtilities.getDeepestComponentAt(view, point.x, point.y);
|
||||
if (target != null) target.dispatchEvent(MouseEventAdapter.convert(event, target));
|
||||
MouseEventAdapter.redispatch(event, target);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
||||
@@ -243,6 +243,9 @@ public class JBScrollBar extends JScrollBar implements TopComponent, Interpolabl
|
||||
setValue(value + valueAdjusted);
|
||||
}
|
||||
}
|
||||
else if (delta != 0.0) {
|
||||
return true; // do not consume event if it can be processed by parent component
|
||||
}
|
||||
event.consume();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.ReflectionUtil;
|
||||
import com.intellij.util.ui.ButtonlessScrollBarUI;
|
||||
import com.intellij.util.ui.JBInsets;
|
||||
import com.intellij.util.ui.MouseEventAdapter;
|
||||
import com.intellij.util.ui.RegionPainter;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -177,6 +178,10 @@ public class JBScrollPane extends JScrollPane {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!event.isConsumed()) {
|
||||
// try to process a mouse wheel event by outer scroll pane
|
||||
MouseEventAdapter.redispatch(event, UIUtil.getParentOfType(JScrollPane.class, pane.getParent()));
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -86,7 +86,7 @@ public abstract class AbstractExpandableItemsHandler<KeyType, ComponentType exte
|
||||
MouseEventHandler dispatcher = new MouseEventHandler() {
|
||||
@Override
|
||||
protected void handle(MouseEvent event) {
|
||||
myComponent.dispatchEvent(MouseEventAdapter.convert(event, myComponent));
|
||||
MouseEventAdapter.redispatch(event, myComponent);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -128,7 +128,8 @@ public class MouseEventAdapter<T> extends MouseAdapter implements MouseInputList
|
||||
event.isPopupTrigger(),
|
||||
event.getScrollType(),
|
||||
event.getScrollAmount(),
|
||||
event.getWheelRotation());
|
||||
event.getWheelRotation(),
|
||||
event.getPreciseWheelRotation());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -139,4 +140,17 @@ public class MouseEventAdapter<T> extends MouseAdapter implements MouseInputList
|
||||
event.getPath(),
|
||||
event.getMenuSelectionManager());
|
||||
}
|
||||
|
||||
private static boolean dispatch(Component component, @NotNull MouseEvent event) {
|
||||
component.dispatchEvent(event);
|
||||
return event.isConsumed();
|
||||
}
|
||||
|
||||
public static void redispatch(@NotNull MouseEvent event, Component source) {
|
||||
if (source != null && dispatch(source, convert(event, source))) event.consume();
|
||||
}
|
||||
|
||||
public static void redispatch(@NotNull MouseEvent event, Component source, int x, int y) {
|
||||
if (source != null && dispatch(source, convert(event, source, x, y))) event.consume();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user