mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
CR-IC-875 (border tampering replaced by event redirection)
This commit is contained in:
@@ -38,7 +38,6 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.Border;
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import java.awt.geom.AffineTransform;
|
||||
@@ -87,7 +86,6 @@ public class IdeMenuBar extends JMenuBar {
|
||||
myDataManager = dataManager;
|
||||
|
||||
if (WindowManagerImpl.isFloatingMenuBarSupported()) {
|
||||
addMouseListener(new MouseAdapter() {}); // event catcher for "floating" full screen menu
|
||||
myAnimator = new MyAnimator();
|
||||
Toolkit.getDefaultToolkit().addAWTEventListener(new MyAWTEventListener(), AWTEvent.MOUSE_MOTION_EVENT_MASK | AWTEvent.MOUSE_EVENT_MASK);
|
||||
myActivationWatcher = new Timer(100, new MyActionListener());
|
||||
@@ -98,6 +96,7 @@ public class IdeMenuBar extends JMenuBar {
|
||||
updateState();
|
||||
}
|
||||
});
|
||||
addMouseListener(new MyMouseListener());
|
||||
}
|
||||
else {
|
||||
myAnimator = null;
|
||||
@@ -144,14 +143,6 @@ public class IdeMenuBar extends JMenuBar {
|
||||
super.menuSelectionChanged(isIncluded);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBorder(Border border) {
|
||||
if (border != null && myAnimator != null) {
|
||||
border = new MyBorderDelegator(border);
|
||||
}
|
||||
super.setBorder(border);
|
||||
}
|
||||
|
||||
private static boolean isDescendingFrom(@Nullable Component a, @NotNull Component b) {
|
||||
while (a != null) {
|
||||
if (a == b) {
|
||||
@@ -417,33 +408,6 @@ public class IdeMenuBar extends JMenuBar {
|
||||
}
|
||||
}
|
||||
|
||||
private class MyBorderDelegator implements Border {
|
||||
@NotNull private final Border mySource;
|
||||
|
||||
private MyBorderDelegator(@NotNull Border source) {
|
||||
mySource = source;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
|
||||
mySource.paintBorder(c, g, x, y, width, height);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Insets getBorderInsets(Component c) {
|
||||
Insets insets = mySource.getBorderInsets(c);
|
||||
if (myState != State.EXPANDED) {
|
||||
insets.top = 0; // get rid of "passive top pixel" in full screen mode
|
||||
}
|
||||
return insets;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isBorderOpaque() {
|
||||
return mySource.isBorderOpaque();
|
||||
}
|
||||
}
|
||||
|
||||
private class MyAnimator extends Animator {
|
||||
public MyAnimator() {
|
||||
super("MenuBarAnimator", 16, 300, false);
|
||||
@@ -527,4 +491,28 @@ public class IdeMenuBar extends JMenuBar {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static class MyMouseListener extends MouseAdapter {
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
Component c = e.getComponent();
|
||||
if (c instanceof IdeMenuBar) {
|
||||
Dimension size = c.getSize();
|
||||
Insets insets = ((IdeMenuBar)c).getInsets();
|
||||
Point p = e.getPoint();
|
||||
if (p.y < insets.top || p.y >= size.height - insets.bottom) {
|
||||
Component item = ((IdeMenuBar)c).findComponentAt(p.x, size.height / 2);
|
||||
if (item instanceof JMenuItem) {
|
||||
// re-target border clicks as a menu item ones
|
||||
item.dispatchEvent(
|
||||
new MouseEvent(item, e.getID(), e.getWhen(), e.getModifiers(), 1, 1, e.getClickCount(), e.isPopupTrigger(), e.getButton()));
|
||||
e.consume();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
super.mouseClicked(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user