mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
after a project is opened, schedule hiding of all non-sticky balloons
This commit is contained in:
@@ -25,6 +25,7 @@ import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.util.ui.update.Activatable;
|
||||
import com.intellij.util.ui.update.UiNotifyConnector;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
@@ -100,7 +101,7 @@ public class Alarm implements Disposable {
|
||||
_addRequest(request, delay, ModalityState.stateForComponent(myActivationComponent));
|
||||
}
|
||||
|
||||
public void addRequest(final Runnable request, int delayMillis, final ModalityState modalityState) {
|
||||
public void addRequest(final Runnable request, int delayMillis, @Nullable final ModalityState modalityState) {
|
||||
LOG.assertTrue(myThreadToUse == ThreadToUse.SWING_THREAD);
|
||||
_addRequest(request, delayMillis, modalityState);
|
||||
}
|
||||
|
||||
+17
-5
@@ -22,6 +22,7 @@ import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.components.ApplicationComponent;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ProjectManager;
|
||||
import com.intellij.openapi.project.ProjectManagerAdapter;
|
||||
import com.intellij.openapi.startup.StartupManager;
|
||||
import com.intellij.openapi.ui.MessageType;
|
||||
import com.intellij.openapi.ui.popup.*;
|
||||
@@ -30,6 +31,7 @@ import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.wm.ToolWindowManager;
|
||||
import com.intellij.openapi.wm.WindowManager;
|
||||
import com.intellij.openapi.wm.impl.IdeFrameImpl;
|
||||
import com.intellij.ui.BalloonImpl;
|
||||
import com.intellij.ui.components.panels.NonOpaquePanel;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.PairFunction;
|
||||
@@ -179,9 +181,6 @@ public class NotificationsManagerImpl extends NotificationsManager implements No
|
||||
(toolWindowId == null || project == null || !Arrays.asList(ToolWindowManager.getInstance(project).getToolWindowIds()).contains(toolWindowId))) {
|
||||
type = NotificationDisplayType.BALLOON;
|
||||
}
|
||||
if (type == NotificationDisplayType.BALLOON && ProjectManager.getInstance().getOpenProjects().length == 0) {
|
||||
type = NotificationDisplayType.STICKY_BALLOON;
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
case NONE:
|
||||
@@ -219,10 +218,23 @@ public class NotificationsManagerImpl extends NotificationsManager implements No
|
||||
|
||||
Window window = findWindowForBalloon(project);
|
||||
if (window instanceof IdeFrameImpl) {
|
||||
boolean sticky = NotificationDisplayType.STICKY_BALLOON == displayType;
|
||||
Balloon balloon = createBalloon(notification, false, !sticky, !sticky);
|
||||
final ProjectManager projectManager = ProjectManager.getInstance();
|
||||
boolean noProjects = projectManager.getOpenProjects().length == 0;
|
||||
boolean sticky = NotificationDisplayType.STICKY_BALLOON == displayType || noProjects;
|
||||
final Balloon balloon = createBalloon(notification, false, !sticky, !sticky);
|
||||
Disposer.register(project != null ? project : ApplicationManager.getApplication(), balloon);
|
||||
((IdeFrameImpl)window).getBalloonLayout().add(balloon);
|
||||
if (noProjects && NotificationDisplayType.BALLOON == displayType) {
|
||||
projectManager.addProjectManagerListener(new ProjectManagerAdapter() {
|
||||
@Override
|
||||
public void projectOpened(Project project) {
|
||||
projectManager.removeProjectManagerListener(this);
|
||||
if (!balloon.isDisposed()) {
|
||||
((BalloonImpl)balloon).startFadeoutTimer(300);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -569,7 +569,7 @@ public class BalloonImpl implements Disposable, Balloon, LightweightWindow, Posi
|
||||
|
||||
myFadedIn = true;
|
||||
|
||||
startFadeoutTimer();
|
||||
startFadeoutTimer((int)BalloonImpl.this.myFadeoutTime);
|
||||
}
|
||||
else {
|
||||
layeredPane.remove(myComp);
|
||||
@@ -592,14 +592,13 @@ public class BalloonImpl implements Disposable, Balloon, LightweightWindow, Posi
|
||||
myAnimator.resume();
|
||||
}
|
||||
|
||||
private void startFadeoutTimer() {
|
||||
if (myFadeoutTime > 0) {
|
||||
Alarm fadeoutAlarm = new Alarm(this);
|
||||
fadeoutAlarm.addRequest(new Runnable() {
|
||||
public void startFadeoutTimer(final int fadeoutTime) {
|
||||
if (fadeoutTime > 0) {
|
||||
new Alarm(this).addRequest(new Runnable() {
|
||||
public void run() {
|
||||
hide();
|
||||
}
|
||||
}, (int)myFadeoutTime, null);
|
||||
}, fadeoutTime, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user