IDEA-298163 Wanted: "true" frame activation/deactivation events

follow-up: migrate off newly deprecated API methods

GitOrigin-RevId: 1226e32d071876f70e2a224c2d50782ffe57ebfb
This commit is contained in:
Dmitry Batrak
2022-08-11 14:50:35 +00:00
committed by intellij-monorepo-bot
parent ce7cb0f3e1
commit 4e3f372f8d
13 changed files with 56 additions and 40 deletions
@@ -2,15 +2,16 @@
package com.intellij.debugger.ui.impl;
import com.intellij.application.Topics;
import com.intellij.ide.FrameStateListener;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonShortcuts;
import com.intellij.openapi.application.ApplicationActivationListener;
import com.intellij.openapi.keymap.KeymapUtil;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.Weighted;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.wm.IdeFrame;
import com.intellij.openapi.wm.IdeGlassPane;
import com.intellij.openapi.wm.IdeGlassPaneUtil;
import com.intellij.util.Alarm;
@@ -88,9 +89,9 @@ public final class TipManager implements Disposable, PopupMenuListener {
}
}
private class MyFrameStateListener implements FrameStateListener {
private class MyFrameStateListener implements ApplicationActivationListener {
@Override
public void onFrameDeactivated() {
public void applicationDeactivated(@NotNull IdeFrame ideFrame) {
hideTooltip(true);
}
}
@@ -291,7 +292,7 @@ public final class TipManager implements Disposable, PopupMenuListener {
myHideCanceller = new MyAwtPreprocessor();
Toolkit.getDefaultToolkit().addAWTEventListener(myHideCanceller, AWTEvent.MOUSE_MOTION_EVENT_MASK | AWTEvent.KEY_EVENT_MASK | AWTEvent.MOUSE_EVENT_MASK);
Topics.subscribe(FrameStateListener.TOPIC, this, new MyFrameStateListener());
Topics.subscribe(ApplicationActivationListener.TOPIC, this, new MyFrameStateListener());
}
@Override
@@ -4,7 +4,10 @@ package com.intellij.configurationStore
import com.intellij.CommonBundle
import com.intellij.codeWithMe.ClientId
import com.intellij.conversion.ConversionService
import com.intellij.ide.*
import com.intellij.ide.GeneralSettings
import com.intellij.ide.IdeEventQueue
import com.intellij.ide.SaveAndSyncHandler
import com.intellij.ide.SaveAndSyncHandlerListener
import com.intellij.openapi.Disposable
import com.intellij.openapi.application.*
import com.intellij.openapi.application.impl.LaterInvocator
@@ -27,6 +30,7 @@ import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.vfs.newvfs.ManagingFS
import com.intellij.openapi.vfs.newvfs.NewVirtualFile
import com.intellij.openapi.vfs.newvfs.RefreshQueue
import com.intellij.openapi.wm.IdeFrame
import com.intellij.project.stateStore
import com.intellij.util.SingleAlarm
import com.intellij.util.application
@@ -140,8 +144,8 @@ internal class SaveAndSyncHandlerImpl : SaveAndSyncHandler(), Disposable {
}
val busConnection = ApplicationManager.getApplication().messageBus.connect(this)
busConnection.subscribe(FrameStateListener.TOPIC, object : FrameStateListener {
override fun onFrameDeactivated() {
busConnection.subscribe(ApplicationActivationListener.TOPIC, object : ApplicationActivationListener {
override fun applicationDeactivated(ideFrame: IdeFrame) {
externalChangesModificationTracker.incModificationCount()
if (!settings.isSaveOnFrameDeactivation || !canSyncOrSave()) {
return
@@ -155,7 +159,7 @@ internal class SaveAndSyncHandlerImpl : SaveAndSyncHandler(), Disposable {
}
}
override fun onFrameActivated() {
override fun applicationActivated(ideFrame: IdeFrame) {
if (!ApplicationManager.getApplication().isDisposed && settings.isSyncOnFrameActivation) {
scheduleRefresh()
}
@@ -5,7 +5,7 @@ import com.intellij.diff.DiffDialogHints;
import com.intellij.diff.requests.DiffRequest;
import com.intellij.diff.util.DiffUserDataKeys;
import com.intellij.diff.util.DiffUtil;
import com.intellij.ide.FrameStateListener;
import com.intellij.openapi.application.ApplicationActivationListener;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.WindowWrapper;
@@ -13,6 +13,7 @@ import com.intellij.openapi.ui.WindowWrapperBuilder;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.wm.IdeFrame;
import com.intellij.util.Consumer;
import com.intellij.util.ObjectUtils;
import com.intellij.util.messages.MessageBusConnection;
@@ -60,9 +61,9 @@ public abstract class DiffWindowBase {
if (wrapperHandler != null) wrapperHandler.consume(myWrapper);
MessageBusConnection appConnection = ApplicationManager.getApplication().getMessageBus().connect(myProcessor);
appConnection.subscribe(FrameStateListener.TOPIC, new FrameStateListener() {
appConnection.subscribe(ApplicationActivationListener.TOPIC, new ApplicationActivationListener() {
@Override
public void onFrameActivated() {
public void applicationActivated(@NotNull IdeFrame ideFrame) {
DiffRequest request = myProcessor.getActiveRequest();
if (request != null) {
VirtualFile[] files = VfsUtilCore.toVirtualFileArray(request.getFilesToRefresh());
@@ -1,6 +1,7 @@
// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.ide;
import com.intellij.openapi.application.ApplicationActivationListener;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileEditor.FileEditor;
@@ -16,6 +17,7 @@ import com.intellij.openapi.vfs.VirtualFileManager;
import com.intellij.openapi.vfs.VirtualFileSystem;
import com.intellij.openapi.vfs.newvfs.BulkFileListener;
import com.intellij.openapi.vfs.newvfs.events.VFileEvent;
import com.intellij.openapi.wm.IdeFrame;
import com.intellij.ui.EditorNotificationPanel;
import com.intellij.ui.EditorNotifications;
import com.intellij.util.containers.ContainerUtil;
@@ -32,9 +34,9 @@ public final class FileChangedNotificationProvider extends EditorNotifications.P
public FileChangedNotificationProvider() {
MessageBusConnection connection = ApplicationManager.getApplication().getMessageBus().connect();
connection.subscribe(FrameStateListener.TOPIC, new FrameStateListener() {
connection.subscribe(ApplicationActivationListener.TOPIC, new ApplicationActivationListener() {
@Override
public void onFrameActivated() {
public void applicationActivated(@NotNull IdeFrame ideFrame) {
if (GeneralSettings.getInstance().isSyncOnFrameActivation()) {
return;
}
@@ -1,11 +1,11 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.ide.plugins
import com.intellij.ide.FrameStateListener
import com.intellij.ide.IdeBundle
import com.intellij.notification.NotificationType
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.application.ApplicationActivationListener
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.PathManager
import com.intellij.openapi.application.PreloadingActivity
@@ -17,6 +17,7 @@ import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.vfs.newvfs.RefreshQueue
import com.intellij.openapi.vfs.newvfs.events.VFileContentChangeEvent
import com.intellij.openapi.vfs.newvfs.events.VFileEvent
import com.intellij.openapi.wm.IdeFrame
import java.nio.file.Path
private const val AUTO_RELOAD_PLUGINS_SYSTEM_PROPERTY = "idea.auto.reload.plugins"
@@ -105,8 +106,8 @@ internal class DynamicPluginVfsListener : AsyncFileListener {
}
}
class DynamicPluginsFrameStateListener : FrameStateListener {
override fun onFrameActivated() {
class DynamicPluginsFrameStateListener : ApplicationActivationListener {
override fun applicationActivated(ideFrame: IdeFrame) {
if (!java.lang.Boolean.getBoolean(AUTO_RELOAD_PLUGINS_SYSTEM_PROPERTY)) return
val pluginsRoot = LocalFileSystem.getInstance().findFileByPath(PathManager.getPluginsPath())
@@ -4,22 +4,24 @@ package com.intellij.internal.statistic.notification;
import com.intellij.application.Topics;
import com.intellij.featureStatistics.FeatureUsageTracker;
import com.intellij.featureStatistics.FeatureUsageTrackerImpl;
import com.intellij.ide.FrameStateListener;
import com.intellij.ide.StatisticsNotificationManager;
import com.intellij.ide.gdpr.ConsentOptions;
import com.intellij.internal.statistic.persistence.UsageStatisticsPersistenceComponent;
import com.intellij.internal.statistic.utils.StatisticsUploadAssistant;
import com.intellij.notification.impl.NotificationsConfigurationImpl;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationActivationListener;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.wm.IdeFrame;
import com.intellij.openapi.wm.ex.WindowManagerEx;
import com.intellij.openapi.wm.impl.ProjectFrameHelper;
import com.intellij.ui.AppUIUtil;
import com.intellij.ui.BalloonLayout;
import com.intellij.ui.BalloonLayoutImpl;
import com.intellij.util.Time;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.awt.*;
@@ -34,9 +36,9 @@ final class StatisticsNotificationManagerImpl implements StatisticsNotificationM
NotificationsConfigurationImpl.remove("SendUsagesStatistics");
Disposable disposable = Disposer.newDisposable();
Topics.subscribe(FrameStateListener.TOPIC, disposable, new FrameStateListener() {
Topics.subscribe(ApplicationActivationListener.TOPIC, disposable, new ApplicationActivationListener() {
@Override
public void onFrameActivated() {
public void applicationActivated(@NotNull IdeFrame ideFrame) {
if (isEmpty(WindowManagerEx.getInstanceEx().getMostRecentFocusedWindow())) {
ApplicationManager.getApplication().invokeLater(() -> showNotification());
Disposer.dispose(disposable);
@@ -4,7 +4,6 @@ package com.intellij.notification.impl;
import com.intellij.codeInsight.hint.TooltipController;
import com.intellij.icons.AllIcons;
import com.intellij.ide.DataManager;
import com.intellij.ide.FrameStateListener;
import com.intellij.ide.IdeBundle;
import com.intellij.ide.impl.ProjectUtil;
import com.intellij.ide.ui.LafManagerListener;
@@ -13,6 +12,7 @@ import com.intellij.notification.impl.ui.NotificationsUtil;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationActivationListener;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.diagnostic.Logger;
@@ -362,9 +362,9 @@ public final class NotificationsManagerImpl extends NotificationsManager {
Disposable listenerDisposable = Disposer.newDisposable();
Disposer.register(parentDisposable, listenerDisposable);
ApplicationManager.getApplication().getMessageBus().connect(listenerDisposable)
.subscribe(FrameStateListener.TOPIC, new FrameStateListener() {
.subscribe(ApplicationActivationListener.TOPIC, new ApplicationActivationListener() {
@Override
public void onFrameActivated() {
public void applicationActivated(@NotNull IdeFrame ideFrame) {
Disposer.dispose(listenerDisposable);
callback.run();
}
@@ -4,7 +4,6 @@ package com.intellij.ui;
import com.intellij.application.Topics;
import com.intellij.codeInsight.hint.HintManagerImpl;
import com.intellij.icons.AllIcons;
import com.intellij.ide.FrameStateListener;
import com.intellij.ide.IdeEventQueue;
import com.intellij.ide.IdeTooltip;
import com.intellij.ide.RemoteDesktopService;
@@ -16,6 +15,7 @@ import com.intellij.openapi.MnemonicHelper;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.ex.AnActionListener;
import com.intellij.openapi.application.ApplicationActivationListener;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.ui.GraphicsConfig;
@@ -26,6 +26,7 @@ import com.intellij.openapi.ui.popup.LightweightWindowEvent;
import com.intellij.openapi.util.*;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.wm.IdeFocusManager;
import com.intellij.openapi.wm.IdeFrame;
import com.intellij.openapi.wm.IdeGlassPane;
import com.intellij.openapi.wm.WeakFocusStackManager;
import com.intellij.ui.awt.RelativePoint;
@@ -970,9 +971,9 @@ public final class BalloonImpl implements Balloon, IdeTooltip.Ui, ScreenAreaCons
public void startSmartFadeoutTimer(int delay) {
mySmartFadeout = true;
mySmartFadeoutDelay = delay;
Topics.subscribe(FrameStateListener.TOPIC, this, new FrameStateListener() {
Topics.subscribe(ApplicationActivationListener.TOPIC, this, new ApplicationActivationListener() {
@Override
public void onFrameDeactivated() {
public void applicationDeactivated(@NotNull IdeFrame ideFrame) {
if (!myFadeoutAlarm.isEmpty()) {
myFadeoutAlarm.cancelAllRequests();
mySmartFadeoutDelay = myFadeoutRequestDelay - (int)(System.currentTimeMillis() - myFadeoutRequestMillis);
@@ -1383,7 +1383,7 @@
</extensions>
<applicationListeners>
<listener class="com.intellij.ide.plugins.DynamicPluginsFrameStateListener" topic="com.intellij.ide.FrameStateListener"/>
<listener class="com.intellij.ide.plugins.DynamicPluginsFrameStateListener" topic="com.intellij.openapi.application.ApplicationActivationListener"/>
<listener class="com.intellij.openapi.updateSettings.impl.UpdateCheckerService$MyAppLifecycleListener" topic="com.intellij.ide.AppLifecycleListener"/>
<listener class="com.intellij.openapi.updateSettings.impl.UpdateSettingsEntryPointActionProvider$LifecycleListener" topic="com.intellij.ide.AppLifecycleListener"/>
<listener class="com.intellij.ui.mac.MergeAllWindowsAction$RecentProjectsFullScreenTabSupport" topic="com.intellij.ide.AppLifecycleListener"/>
@@ -1,11 +1,11 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package git4idea.light
import com.intellij.ide.FrameStateListener
import com.intellij.ide.lightEdit.LightEditService
import com.intellij.ide.lightEdit.LightEditorInfo
import com.intellij.ide.lightEdit.LightEditorListener
import com.intellij.openapi.Disposable
import com.intellij.openapi.application.ApplicationActivationListener
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.util.Disposer
@@ -14,6 +14,7 @@ import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.vfs.VirtualFileManager
import com.intellij.openapi.vfs.newvfs.BulkFileListener
import com.intellij.openapi.vfs.newvfs.events.VFileEvent
import com.intellij.openapi.wm.IdeFrame
import com.intellij.util.EventDispatcher
import com.intellij.vcs.log.BaseSingleTaskController
import com.intellij.vcs.log.runInEdt
@@ -57,7 +58,7 @@ class LightGitTracker : Disposable {
init {
lightEditorManager.addListener(listener, this)
ApplicationManager.getApplication().messageBus.connect(this).subscribe(FrameStateListener.TOPIC,
ApplicationManager.getApplication().messageBus.connect(this).subscribe(ApplicationActivationListener.TOPIC,
MyFrameStateListener())
ApplicationManager.getApplication().messageBus.connect(this).subscribe(VirtualFileManager.VFS_CHANGES,
MyBulkFileListener())
@@ -149,8 +150,8 @@ class LightGitTracker : Disposable {
}
}
private inner class MyFrameStateListener : FrameStateListener {
override fun onFrameActivated() {
private inner class MyFrameStateListener : ApplicationActivationListener {
override fun applicationActivated(ideFrame: IdeFrame) {
singleTaskController.sendRequests(Request.CheckGit,
locationRequest(lightEditService.selectedFile),
statusRequest(lightEditorManager.openFiles))
@@ -41,7 +41,7 @@
</extensions>
<applicationListeners>
<listener class="com.intellij.settingsSync.SettingsSynchronizer" topic="com.intellij.ide.FrameStateListener"
<listener class="com.intellij.settingsSync.SettingsSynchronizer" topic="com.intellij.openapi.application.ApplicationActivationListener"
activeInTestMode="false" activeInHeadlessMode="false"/>
</applicationListeners>
@@ -1,11 +1,12 @@
package com.intellij.settingsSync
import com.intellij.ide.ApplicationInitializedListener
import com.intellij.ide.FrameStateListener
import com.intellij.openapi.application.ApplicationActivationListener
import com.intellij.openapi.application.PathManager
import com.intellij.openapi.diagnostic.logger
import com.intellij.openapi.extensions.ExtensionPointName
import com.intellij.openapi.util.registry.Registry
import com.intellij.openapi.wm.IdeFrame
import com.intellij.settingsSync.plugins.SettingsSyncPluginManager
import com.intellij.util.concurrency.AppExecutorUtil
import com.intellij.util.concurrency.annotations.RequiresEdt
@@ -13,7 +14,7 @@ import kotlinx.coroutines.CoroutineScope
import java.util.concurrent.ScheduledFuture
import java.util.concurrent.TimeUnit
internal class SettingsSynchronizer : ApplicationInitializedListener, FrameStateListener, SettingsSyncEnabledStateListener {
internal class SettingsSynchronizer : ApplicationInitializedListener, ApplicationActivationListener, SettingsSyncEnabledStateListener {
private val executorService = AppExecutorUtil.createBoundedScheduledExecutorService("Settings Sync Update", 1)
private val autoSyncDelay get() = Registry.intValue("settingsSync.autoSync.frequency.sec", 60).toLong()
@@ -47,7 +48,7 @@ internal class SettingsSynchronizer : ApplicationInitializedListener, FrameState
}
}
override fun onFrameActivated() {
override fun applicationActivated(ideFrame: IdeFrame) {
if (!isSettingsSyncEnabledByKey() || !isSettingsSyncEnabledInSettings() || !SettingsSyncMain.isAvailable()) {
return
}
@@ -61,7 +62,7 @@ internal class SettingsSynchronizer : ApplicationInitializedListener, FrameState
}
}
override fun onFrameDeactivated() {
override fun applicationDeactivated(ideFrame: IdeFrame) {
stopSyncingByTimer()
}
@@ -1,9 +1,10 @@
// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.idea.svn;
import com.intellij.ide.FrameStateListener;
import com.intellij.application.Topics;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationActivationListener;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.diagnostic.Logger;
@@ -27,6 +28,7 @@ import com.intellij.openapi.vcs.versionBrowser.ChangeBrowserSettings;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileManager;
import com.intellij.openapi.wm.IdeFrame;
import com.intellij.util.Consumer;
import com.intellij.util.ThreeState;
import com.intellij.util.messages.MessageBusConnection;
@@ -248,8 +250,8 @@ public final class SvnVcs extends AbstractVcs {
LoadedRevisionsCache.getInstance(myProject);
if (myFrameStateListenerDisposable == null && !myProject.isDefault()) {
myFrameStateListenerDisposable = Disposer.newDisposable();
busConnection.subscribe(FrameStateListener.TOPIC, new MyFrameStateListener(ChangeListManager.getInstance(myProject),
VcsDirtyScopeManager.getInstance(myProject)));
Topics.subscribe(ApplicationActivationListener.TOPIC, myFrameStateListenerDisposable,
new MyFrameStateListener(ChangeListManager.getInstance(myProject), VcsDirtyScopeManager.getInstance(myProject)));
}
mySvnBranchPointsCalculator = new SvnBranchPointsCalculator(this);
@@ -718,7 +720,7 @@ public final class SvnVcs extends AbstractVcs {
}
}
private static final class MyFrameStateListener implements FrameStateListener {
private static final class MyFrameStateListener implements ApplicationActivationListener {
private final ChangeListManager myClManager;
private final VcsDirtyScopeManager myDirtyScopeManager;
@@ -728,7 +730,7 @@ public final class SvnVcs extends AbstractVcs {
}
@Override
public void onFrameActivated() {
public void applicationActivated(@NotNull IdeFrame ideFrame) {
final List<VirtualFile> folders = ((ChangeListManagerImpl)myClManager).getLockedFolders();
if (!folders.isEmpty()) {
myDirtyScopeManager.filesDirty(null, folders);