}
if (NotificationsConfigurationImpl.getNotificationsConfigurationImpl().SHOW_BALLOONS) {
- showWhenVisible(notification, project);
- }
- }
-
- private static void showWhenVisible(final Notification notification, final Project project) {
- FrameStateManager.getInstance().getApplicationActive().doWhenDone(new Runnable() {
- @Override
- public void run() {
- if (project != null) {
- if (project.isDisposed()) {
- return;
- }
-
- if (!project.isInitialized()) {
- StartupManager.getInstance(project).runWhenProjectIsInitialized(new Runnable() {
- @Override
- public void run() {
- showWhenVisible(notification, project);
- }
- });
- return;
- }
+ final Runnable runnable = new Runnable() {
+ @Override
+ public void run() {
+ showNotification(notification, project);
}
- showNotification(notification, project);
+ };
+ if (project == null) {
+ runnable.run();
+ } else if (!project.isDisposed()) {
+ StartupManager.getInstance(project).runWhenProjectIsInitialized(runnable);
}
- });
+ }
}
private static void showNotification(final Notification notification, @Nullable final Project project) {
Window window = findWindowForBalloon(project);
if (window instanceof IdeFrameImpl) {
final ProjectManager projectManager = ProjectManager.getInstance();
- boolean noProjects = projectManager.getOpenProjects().length == 0;
- boolean sticky = NotificationDisplayType.STICKY_BALLOON == displayType || noProjects;
- final Balloon balloon = createBalloon(notification, false, false, !sticky);
+ final boolean noProjects = projectManager.getOpenProjects().length == 0;
+ final boolean sticky = NotificationDisplayType.STICKY_BALLOON == displayType || noProjects;
+ final Balloon balloon = createBalloon(notification, false, false);
Disposer.register(project != null ? project : ApplicationManager.getApplication(), balloon);
((IdeFrameImpl)window).getBalloonLayout().add(balloon);
- if (noProjects && NotificationDisplayType.BALLOON == displayType) {
- projectManager.addProjectManagerListener(new ProjectManagerAdapter() {
+ if (NotificationDisplayType.BALLOON == displayType) {
+ FrameStateManager.getInstance().getApplicationActive().doWhenDone(new Runnable() {
@Override
- public void projectOpened(Project project) {
- projectManager.removeProjectManagerListener(this);
- if (!balloon.isDisposed()) {
- ((BalloonImpl)balloon).startFadeoutTimer(300);
+ public void run() {
+ if (balloon.isDisposed()) {
+ return;
+ }
+
+ if (!sticky) {
+ ((BalloonImpl)balloon).startFadeoutTimer(3000);
+ }
+ else //noinspection ConstantConditions
+ if (noProjects) {
+ projectManager.addProjectManagerListener(new ProjectManagerAdapter() {
+ @Override
+ public void projectOpened(Project project) {
+ projectManager.removeProjectManagerListener(this);
+ if (!balloon.isDisposed()) {
+ ((BalloonImpl)balloon).startFadeoutTimer(300);
+ }
+ }
+ });
}
}
});
return frame;
}
- public static Balloon createBalloon(final Notification notification, final boolean showCallout, final boolean hideOnClickOutside, final boolean fadeOut) {
+ public static Balloon createBalloon(final Notification notification, final boolean showCallout, final boolean hideOnClickOutside) {
final JEditorPane text = new JEditorPane();
text.setEditorKit(UIUtil.getHTMLEditorKit());
.setHideOnAction(hideOnClickOutside)
.setHideOnKeyOutside(hideOnClickOutside).setHideOnFrameResize(false);
- if (fadeOut) {
- builder.setFadeoutTime(3000);
- }
-
final Balloon balloon = builder.createBalloon();
balloon.addListener(new JBPopupAdapter() {
@Override
package com.intellij.openapi.wm.impl;
import com.intellij.Patches;
+import com.intellij.ide.FrameStateManager;
import com.intellij.ide.IdeEventQueue;
import com.intellij.ide.ui.LafManager;
import com.intellij.ide.ui.LafManagerListener;
import com.intellij.openapi.wm.*;
import com.intellij.openapi.wm.ex.*;
import com.intellij.openapi.wm.impl.commands.*;
+import com.intellij.ui.BalloonImpl;
import com.intellij.ui.awt.RelativePoint;
import com.intellij.ui.switcher.QuickAccessSettings;
import com.intellij.ui.switcher.SwitchManager;
final BalloonHyperlinkListener listenerWrapper = new BalloonHyperlinkListener(listener);
final Balloon balloon =
JBPopupFactory.getInstance().createHtmlTextBalloonBuilder(text.replace("\n", "<br>"), actualIcon, type.getPopupBackground(), listenerWrapper)
- .setHideOnClickOutside(true).setHideOnFrameResize(false).createBalloon();
+ .setHideOnClickOutside(false).setHideOnFrameResize(false).createBalloon();
+ FrameStateManager.getInstance().getApplicationActive().doWhenDone(new Runnable() {
+ @Override
+ public void run() {
+ ((BalloonImpl)balloon).setHideOnClickOutside(true);
+ }
+ });
listenerWrapper.myBalloon = balloon;
myWindow2Balloon.put(toolWindowId, balloon);
Disposer.register(balloon, new Disposable() {
import com.intellij.ide.IdeEventQueue;
import com.intellij.ide.IdeTooltip;
-import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.ActionManager;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.ui.impl.ShadowBorderPainter;
import com.intellij.openapi.ui.popup.Balloon;
import com.intellij.openapi.ui.popup.JBPopupListener;
-import com.intellij.openapi.ui.popup.LightweightWindow;
import com.intellij.openapi.ui.popup.LightweightWindowEvent;
import com.intellij.openapi.util.*;
import com.intellij.openapi.util.registry.Registry;
private boolean myDisposed;
private final JComponent myContent;
- private final boolean myHideOnMouse;
+ private boolean myHideOnMouse;
private final boolean myHideOnKey;
private boolean myHideOnAction;
private final boolean myEnableCloseButton;
return myVisible;
}
+ public void setHideOnClickOutside(boolean hideOnMouse) {
+ myHideOnMouse = hideOnMouse;
+ }
+
public void setShowPointer(final boolean show) {
myShowPointer = show;
}