From 28e53a00afa42ac084928c52ea3a8992842a994f Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Thu, 16 Jul 2015 17:32:31 +0300 Subject: [PATCH] Reuse utility method to convert mouse events --- .../actionSystem/ex/ComboBoxAction.java | 16 ++--- .../com/intellij/ui/treeStructure/Tree.java | 3 +- .../src/com/intellij/ide/IdeEventQueue.java | 6 +- .../openapi/wm/impl/IdeGlassPaneImpl.java | 16 +---- .../intellij/openapi/wm/impl/IdeMenuBar.java | 4 +- .../impl/welcomeScreen/FlatWelcomeFrame.java | 4 +- .../ui/AbstractExpandableItemsHandler.java | 72 +++++++++---------- .../intellij/util/ui/MouseEventAdapter.java | 21 ++++-- 8 files changed, 65 insertions(+), 77 deletions(-) diff --git a/platform/platform-api/src/com/intellij/openapi/actionSystem/ex/ComboBoxAction.java b/platform/platform-api/src/com/intellij/openapi/actionSystem/ex/ComboBoxAction.java index 8353a893cacb..9733f4762b7b 100644 --- a/platform/platform-api/src/com/intellij/openapi/actionSystem/ex/ComboBoxAction.java +++ b/platform/platform-api/src/com/intellij/openapi/actionSystem/ex/ComboBoxAction.java @@ -36,6 +36,7 @@ import com.intellij.ui.JBColor; import com.intellij.ui.UserActivityProviderComponent; import com.intellij.util.ui.JBSwingUtilities; import com.intellij.util.ui.JBUI; +import com.intellij.util.ui.MouseEventAdapter; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -194,15 +195,12 @@ public abstract class ComboBoxAction extends AnAction implements CustomComponent addMouseMotionListener(new MouseMotionListener() { @Override public void mouseDragged(MouseEvent e) { - mouseMoved(new MouseEvent(e.getComponent(), - MouseEvent.MOUSE_MOVED, - e.getWhen(), - e.getModifiers(), - e.getX(), - e.getY(), - e.getClickCount(), - e.isPopupTrigger(), - e.getButton())); + mouseMoved(MouseEventAdapter.convert(e, e.getComponent(), + MouseEvent.MOUSE_MOVED, + e.getWhen(), + e.getModifiers(), + e.getX(), + e.getY())); } @Override diff --git a/platform/platform-api/src/com/intellij/ui/treeStructure/Tree.java b/platform/platform-api/src/com/intellij/ui/treeStructure/Tree.java index 67bfb2fed12f..a8cfc8789952 100644 --- a/platform/platform-api/src/com/intellij/ui/treeStructure/Tree.java +++ b/platform/platform-api/src/com/intellij/ui/treeStructure/Tree.java @@ -412,8 +412,7 @@ public class Tree extends JTree implements ComponentWithEmptyText, ComponentWith (e.getX() >= bounds.x + bounds.width || e.getX() < bounds.x && !isLocationInExpandControl(path, e.getX(), e.getY()))) { int newX = bounds.x + bounds.width - 2; - e2 = new MouseEvent(e.getComponent(), e.getID(), e.getWhen(), e.getModifiers(), newX, e.getY(), e.getClickCount(), - e.isPopupTrigger(), e.getButton()); + e2 = MouseEventAdapter.convert(e, e.getComponent(), newX, e.getY()); } } } diff --git a/platform/platform-impl/src/com/intellij/ide/IdeEventQueue.java b/platform/platform-impl/src/com/intellij/ide/IdeEventQueue.java index 4509777a8ffa..716c5267a459 100644 --- a/platform/platform-impl/src/com/intellij/ide/IdeEventQueue.java +++ b/platform/platform-impl/src/com/intellij/ide/IdeEventQueue.java @@ -47,6 +47,7 @@ import com.intellij.util.Alarm; import com.intellij.util.ReflectionUtil; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashMap; +import com.intellij.util.ui.MouseEventAdapter; import com.intellij.util.ui.UIUtil; import com.sun.java.swing.plaf.windows.WindowsLookAndFeel; import org.jetbrains.annotations.NotNull; @@ -350,9 +351,8 @@ public class IdeEventQueue extends EventQueue { } lastMouseWheel = System.currentTimeMillis(); - MouseWheelEvent newMouseWheelEvent = new MouseWheelEvent( - wheelDestinationComponent, mwe.getID(), lastMouseWheel, mwe.getModifiers(), mwe.getX(), mwe.getY(), - mwe.getClickCount(), mwe.isPopupTrigger(), mwe.getScrollType(), mwe.getScrollAmount(), mwe.getWheelRotation() + MouseWheelEvent newMouseWheelEvent = MouseEventAdapter.convert(mwe, + wheelDestinationComponent, mwe.getID(), lastMouseWheel, mwe.getModifiers(), mwe.getX(), mwe.getY() ); return newMouseWheelEvent; } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeGlassPaneImpl.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeGlassPaneImpl.java index 0545f7d90f42..7e31dbeeea43 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeGlassPaneImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeGlassPaneImpl.java @@ -30,6 +30,7 @@ import com.intellij.openapi.wm.IdeGlassPane; import com.intellij.openapi.wm.IdeGlassPaneUtil; import com.intellij.util.containers.FactoryMap; import com.intellij.util.ui.JBUI; +import com.intellij.util.ui.MouseEventAdapter; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -405,20 +406,7 @@ public class IdeGlassPaneImpl extends JPanel implements IdeGlassPaneEx, IdeEvent private static MouseEvent convertEvent(final MouseEvent e, final Component target) { final Point point = SwingUtilities.convertPoint(e.getComponent(), e.getPoint(), target); - if (e instanceof MouseWheelEvent) { - final MouseWheelEvent mwe = (MouseWheelEvent)e; - return new MouseWheelEvent(target, mwe.getID(), mwe.getWhen(), mwe.getModifiersEx(), point.x, point.y, mwe.getClickCount(), - mwe.isPopupTrigger(), mwe.getScrollType(), mwe.getScrollAmount(), mwe.getWheelRotation()); - } - else if (e instanceof MenuDragMouseEvent) { - final MenuDragMouseEvent de = (MenuDragMouseEvent)e; - return new MenuDragMouseEvent(target, de.getID(), de.getWhen(), de.getModifiersEx(), point.x, point.y, e.getClickCount(), - e.isPopupTrigger(), de.getPath(), de.getMenuSelectionManager()); - } - else { - return new MouseEvent(target, e.getID(), e.getWhen(), e.getModifiersEx(), point.x, point.y, e.getClickCount(), e.isPopupTrigger(), - e.getButton()); - } + return MouseEventAdapter.convert(e, target, e.getID(), e.getWhen(), e.getModifiersEx(), point.x, point.y); } private static void fireMouseEvent(final MouseListener listener, final MouseEvent event) { diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeMenuBar.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeMenuBar.java index ec32bd1a6f2c..004b665e2d56 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeMenuBar.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeMenuBar.java @@ -39,6 +39,7 @@ import com.intellij.ui.Gray; import com.intellij.ui.ScreenUtil; import com.intellij.ui.border.CustomLineBorder; import com.intellij.util.ui.Animator; +import com.intellij.util.ui.MouseEventAdapter; import com.intellij.util.ui.UIUtil; import org.java.ayatana.ApplicationMenu; import org.jetbrains.annotations.NotNull; @@ -553,8 +554,7 @@ public class IdeMenuBar extends JMenuBar implements IdeEventQueue.EventDispatche 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())); + item.dispatchEvent(MouseEventAdapter.convert(e, item, 1, 1)); e.consume(); return; } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java index 2ccbcb687e08..0b4ae75751f8 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java @@ -52,6 +52,7 @@ import com.intellij.util.IconUtil; import com.intellij.util.NotNullFunction; import com.intellij.util.ui.JBInsets; import com.intellij.util.ui.JBUI; +import com.intellij.util.ui.MouseEventAdapter; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -625,8 +626,7 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { new ClickListener() { @Override public boolean onClick(@NotNull MouseEvent e, int clickCount) { - final MouseEvent newEvent = new MouseEvent(link, e.getID(), e.getWhen(), e.getModifiers(), e.getX(), e.getY(), e.getClickCount(), - e.isPopupTrigger(), e.getButton()); + final MouseEvent newEvent = MouseEventAdapter.convert(e, link, e.getX(), e.getY()); link.doClick(newEvent); return true; } diff --git a/platform/platform-impl/src/com/intellij/ui/AbstractExpandableItemsHandler.java b/platform/platform-impl/src/com/intellij/ui/AbstractExpandableItemsHandler.java index b97a6d134e42..deaf623f672c 100644 --- a/platform/platform-impl/src/com/intellij/ui/AbstractExpandableItemsHandler.java +++ b/platform/platform-impl/src/com/intellij/ui/AbstractExpandableItemsHandler.java @@ -26,6 +26,7 @@ import com.intellij.ui.popup.AbstractPopup; import com.intellij.ui.popup.MovablePopup; import com.intellij.util.Alarm; import com.intellij.util.ObjectUtils; +import com.intellij.util.ui.MouseEventAdapter; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -73,68 +74,53 @@ public abstract class AbstractExpandableItemsHandler getCellRendererAndBounds(KeyType key); protected abstract KeyType getCellKeyForPoint(Point point); + + private static void dispatchEvent(JComponent component, MouseEvent event) { + if (component != null && event != null) { + Point point = event.getLocationOnScreen(); + SwingUtilities.convertPointFromScreen(point, component); + component.dispatchEvent(MouseEventAdapter.convert(event, component, point.x, point.y)); + } + } } \ No newline at end of file diff --git a/platform/util/src/com/intellij/util/ui/MouseEventAdapter.java b/platform/util/src/com/intellij/util/ui/MouseEventAdapter.java index bc80ca674b22..a7aedde544e4 100644 --- a/platform/util/src/com/intellij/util/ui/MouseEventAdapter.java +++ b/platform/util/src/com/intellij/util/ui/MouseEventAdapter.java @@ -15,6 +15,7 @@ */ package com.intellij.util.ui; +import javax.swing.event.MenuDragMouseEvent; import java.awt.*; import java.awt.event.*; @@ -101,12 +102,12 @@ public class MouseEventAdapter implements MouseListener, MouseMotionListener, } public static MouseEvent convert(MouseEvent event, Component source, int id, long when, int modifiers, int x, int y) { - return event instanceof MouseWheelEvent - ? convert((MouseWheelEvent)event, source, id, when, modifiers, x, y) - : new MouseEvent(source, id, when, modifiers, x, y, - event.getClickCount(), - event.isPopupTrigger(), - event.getButton()); + if (event instanceof MouseWheelEvent) return convert((MouseWheelEvent)event, source, id, when, modifiers, x, y); + if (event instanceof MenuDragMouseEvent) return convert((MenuDragMouseEvent)event, source, id, when, modifiers, x, y); + return new MouseEvent(source, id, when, modifiers, x, y, + event.getClickCount(), + event.isPopupTrigger(), + event.getButton()); } public static MouseWheelEvent convert(MouseWheelEvent event, Component source, int id, long when, int modifiers, int x, int y) { @@ -117,4 +118,12 @@ public class MouseEventAdapter implements MouseListener, MouseMotionListener, event.getScrollAmount(), event.getWheelRotation()); } + + public static MenuDragMouseEvent convert(MenuDragMouseEvent event, Component source, int id, long when, int modifiers, int x, int y) { + return new MenuDragMouseEvent(source, id, when, modifiers, x, y, + event.getClickCount(), + event.isPopupTrigger(), + event.getPath(), + event.getMenuSelectionManager()); + } }