From 22ec5389ba8bf6e1e09f52565fea94b191bdb4b8 Mon Sep 17 00:00:00 2001 From: Anton Makeev Date: Wed, 22 Aug 2012 13:16:41 +0200 Subject: [PATCH] Platform: empty text was not clickable in JBTables (IDEA-84737) (cherry-picked from b21afdb) --- .../intellij/ui/components/JBViewport.java | 2 +- .../src/com/intellij/util/ui/StatusText.java | 26 ++++++++++++------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/platform/platform-api/src/com/intellij/ui/components/JBViewport.java b/platform/platform-api/src/com/intellij/ui/components/JBViewport.java index 0ab304d1ef13..4e9887771d93 100644 --- a/platform/platform-api/src/com/intellij/ui/components/JBViewport.java +++ b/platform/platform-api/src/com/intellij/ui/components/JBViewport.java @@ -36,7 +36,7 @@ public class JBViewport extends JViewport implements ZoomableViewport { Component child = e.getChild(); if (child instanceof JBTable) { myEmptyText = ((ComponentWithEmptyText)child).getEmptyText(); - myEmptyText.attachTo(JBViewport.this); + myEmptyText.attachTo(JBViewport.this, child); } } diff --git a/platform/platform-api/src/com/intellij/util/ui/StatusText.java b/platform/platform-api/src/com/intellij/util/ui/StatusText.java index c66370ea6959..7893f72c9c57 100644 --- a/platform/platform-api/src/com/intellij/util/ui/StatusText.java +++ b/platform/platform-api/src/com/intellij/util/ui/StatusText.java @@ -34,6 +34,7 @@ public abstract class StatusText { @Nullable private Component myOwner; + private Component myMouseTarget; private final MouseMotionListener myMouseMotionListener; private final ClickListener myClickListener; @@ -67,10 +68,10 @@ public abstract class StatusText { @Override public void mouseMoved(final MouseEvent e) { if (findActionListenerAt(e.getPoint()) != null) { - myOwner.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + myMouseTarget.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); } else { - myOwner.setCursor(Cursor.getDefaultCursor()); + myMouseTarget.setCursor(Cursor.getDefaultCursor()); } } }; @@ -82,25 +83,32 @@ public abstract class StatusText { } public void attachTo(@Nullable Component owner) { - if (myOwner != null) { - myClickListener.uninstall(myOwner); - myOwner.removeMouseMotionListener(myMouseMotionListener); + attachTo(owner, owner); + } + + public void attachTo(@Nullable Component owner, @Nullable Component mouseTarget) { + if (myMouseTarget != null) { + myClickListener.uninstall(myMouseTarget); + myMouseTarget.removeMouseMotionListener(myMouseMotionListener); } myOwner = owner; + myMouseTarget = mouseTarget; - if (myOwner != null) { - myClickListener.installOn(myOwner); - myOwner.addMouseMotionListener(myMouseMotionListener); + if (myMouseTarget != null) { + myClickListener.installOn(myMouseTarget); + myMouseTarget.addMouseMotionListener(myMouseMotionListener); } } protected abstract boolean isStatusVisible(); @Nullable - private ActionListener findActionListenerAt(final Point point) { + private ActionListener findActionListenerAt(Point point) { if (!isStatusVisible()) return null; + point = SwingUtilities.convertPoint(myMouseTarget, point, myOwner); + Rectangle b = getTextComponentBound(); if (b.contains(point)) { int index = myComponent.findFragmentAt(point.x - b.x);