mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-133828 Regression: middle-clicking on tool window header doesn't close it anymore
This commit is contained in:
@@ -30,10 +30,7 @@ import com.intellij.openapi.wm.ToolWindow;
|
||||
import com.intellij.openapi.wm.ToolWindowAnchor;
|
||||
import com.intellij.openapi.wm.ToolWindowType;
|
||||
import com.intellij.openapi.wm.impl.content.ToolWindowContentUi;
|
||||
import com.intellij.ui.DoubleClickListener;
|
||||
import com.intellij.ui.InplaceButton;
|
||||
import com.intellij.ui.PopupHandler;
|
||||
import com.intellij.ui.UIBundle;
|
||||
import com.intellij.ui.*;
|
||||
import com.intellij.ui.components.panels.Wrapper;
|
||||
import com.intellij.ui.tabs.TabsUtil;
|
||||
import com.intellij.util.BitUtil;
|
||||
@@ -224,6 +221,7 @@ public abstract class ToolWindowHeader extends JPanel implements Disposable, UIS
|
||||
return true;
|
||||
}
|
||||
}.installOn(westPanel);
|
||||
MouseForwarder.installOn(westPanel, this, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
package com.intellij.ui;
|
||||
|
||||
import com.intellij.openapi.Disposable;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseListener;
|
||||
|
||||
public class MouseForwarder implements MouseListener{
|
||||
@NotNull private Component myTarget;
|
||||
private boolean myLater;
|
||||
|
||||
public static Disposable installOn(@NotNull final Component component, @NotNull Component target, boolean later) {
|
||||
final MouseForwarder forwarder = new MouseForwarder(target, later);
|
||||
component.addMouseListener(forwarder);
|
||||
return new Disposable() {
|
||||
@Override
|
||||
public void dispose() {
|
||||
component.removeMouseListener(forwarder);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private MouseForwarder(@NotNull Component target, boolean later) {
|
||||
myTarget = target;
|
||||
myLater = later;
|
||||
}
|
||||
private void redispatch(final MouseEvent e) {
|
||||
Runnable runnable = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
myTarget.dispatchEvent(SwingUtilities.convertMouseEvent(e.getComponent(), e, myTarget));
|
||||
}
|
||||
};
|
||||
if (myLater) {
|
||||
//noinspection SSBasedInspection
|
||||
SwingUtilities.invokeLater(runnable);
|
||||
}
|
||||
else {
|
||||
runnable.run();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
redispatch(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
redispatch(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent e) {
|
||||
redispatch(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseEntered(MouseEvent e) {
|
||||
redispatch(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseExited(MouseEvent e) {
|
||||
redispatch(e);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user