From d6373dcea46b836a96e27e3cbfc30a558c80e1d8 Mon Sep 17 00:00:00 2001 From: Kirill Kalishev Date: Wed, 18 Nov 2009 10:10:13 +0100 Subject: [PATCH] click handler for frameless notifications --- .../com/intellij/ui/popup/FramelessNotificationPopup.java | 13 +++++++++++-- .../src/com/intellij/ui/popup/NotificationPopup.java | 6 +----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ui/popup/FramelessNotificationPopup.java b/platform/platform-impl/src/com/intellij/ui/popup/FramelessNotificationPopup.java index 5b26ebbef2..0bed117e3d 100644 --- a/platform/platform-impl/src/com/intellij/ui/popup/FramelessNotificationPopup.java +++ b/platform/platform-impl/src/com/intellij/ui/popup/FramelessNotificationPopup.java @@ -23,6 +23,7 @@ import com.intellij.openapi.ui.popup.LightweightWindowEvent; import com.intellij.ui.ListenerUtil; import com.intellij.ui.ScreenUtil; import com.intellij.ui.awt.RelativePoint; +import com.intellij.util.ui.UIUtil; import javax.swing.*; import java.awt.*; @@ -64,15 +65,19 @@ public class FramelessNotificationPopup { } }; private final Timer myFadeInTimer = new Timer(10, myFadeTracker); + private ActionListener myActionListener; public FramelessNotificationPopup(final JComponent owner, final JComponent content, Color backgroud) { - this(owner, content, backgroud, true); + this(owner, content, backgroud, true, null); } - public FramelessNotificationPopup(final JComponent owner, final JComponent content, Color backgroud, boolean useDefaultPreferredSize) { + public FramelessNotificationPopup(final JComponent owner, final JComponent content, Color backgroud, boolean useDefaultPreferredSize, final ActionListener listener) { myBackgroud = backgroud; myUseDefaultPreferredSize = useDefaultPreferredSize; myContent = new ContentComponent(content); + + myActionListener = listener; + myPopup = JBPopupFactory.getInstance().createComponentPopupBuilder(myContent, null) .setForceHeavyweight(true) .setRequestFocus(false) @@ -117,6 +122,10 @@ public class FramelessNotificationPopup { public void mouseClicked(final MouseEvent e) { if (e.getButton() == MouseEvent.BUTTON3) { myPopup.cancel(); + } else if (UIUtil.isActionClick(e)) { + if (myActionListener != null) { + myActionListener.actionPerformed(new ActionEvent(FramelessNotificationPopup.this, ActionEvent.ACTION_PERFORMED, null)); + } } } diff --git a/platform/platform-impl/src/com/intellij/ui/popup/NotificationPopup.java b/platform/platform-impl/src/com/intellij/ui/popup/NotificationPopup.java index 604224a648..21a2d196d7 100644 --- a/platform/platform-impl/src/com/intellij/ui/popup/NotificationPopup.java +++ b/platform/platform-impl/src/com/intellij/ui/popup/NotificationPopup.java @@ -46,11 +46,7 @@ public class NotificationPopup { public NotificationPopup(final JComponent owner, final JComponent content, Color backgroud, final boolean useDefaultPreferredSize, ActionListener clickHandler, boolean closeOnClick) { final IdeFrameImpl frame = findFrame(owner); if (frame == null || !frame.isShowing()) { - //todo kirillk - if (clickHandler != null) { - throw new UnsupportedOperationException("Click handler is not supported in frameless mode"); - } - final FramelessNotificationPopup popup = new FramelessNotificationPopup(owner, content, backgroud, useDefaultPreferredSize); + final FramelessNotificationPopup popup = new FramelessNotificationPopup(owner, content, backgroud, useDefaultPreferredSize, clickHandler); myImpl = new Impl() { public void addListener(JBPopupListener listener) { -- 2.11.4.GIT