From 169cf49c67e4ac51d2c7f70546d38f467cddba4d Mon Sep 17 00:00:00 2001 From: Denis Zaichenko Date: Mon, 20 Oct 2025 16:05:30 +0200 Subject: [PATCH] [remote dev] IJPL-213823 Added sheduleApply method to PluginManagerConfigurable In cases when a user closes the plugin manager from the welcome screen, disposal of the configurable was executed before plugin application, which prevented the plugin from being applied. Added a schedule method that saves the plugin model in a lambda for subsequent plugin application. GitOrigin-RevId: 94cabbb7e588e569c54ed4f67b9b315460ad2f67 --- .../ide/plugins/PluginManagerConfigurable.java | 6 ++++++ .../plugins/PluginManagerConfigurablePanel.java | 15 +++++++++++++++ .../wm/impl/welcomeScreen/PluginsTabFactory.java | 11 +---------- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerConfigurable.java b/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerConfigurable.java index 9d524a82c3b6..945ceeb1d4e0 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerConfigurable.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerConfigurable.java @@ -259,6 +259,12 @@ public final class PluginManagerConfigurable } } + public void scheduleApply() { + if (myPanel != null) { + myPanel.scheduleApply(); + } + } + @Override public void reset() { if (myPanel != null) { diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerConfigurablePanel.java b/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerConfigurablePanel.java index 89572a21d2cc..db268e82c384 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerConfigurablePanel.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerConfigurablePanel.java @@ -47,6 +47,8 @@ import com.intellij.openapi.util.NlsContexts; import com.intellij.openapi.util.NlsSafe; import com.intellij.openapi.util.text.HtmlChunk; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.wm.impl.welcomeScreen.PluginsTabFactory; +import com.intellij.openapi.wm.impl.welcomeScreen.WelcomeScreenEventCollector; import com.intellij.ui.GotItTooltip; import com.intellij.ui.SimpleTextAttributes; import com.intellij.ui.components.JBScrollPane; @@ -1979,6 +1981,19 @@ public final class PluginManagerConfigurablePanel implements Disposable { return myPluginModelFacade.getModel().isModified(); } + public void scheduleApply() { + ApplicationManager.getApplication().invokeLater(() -> { + try { + apply(); + WelcomeScreenEventCollector.logPluginsModified(); + InstalledPluginsState.getInstance().runShutdownCallback(); + } + catch (ConfigurationException exception) { + Logger.getInstance(PluginsTabFactory.class).error(exception); + } + }, ModalityState.nonModal()); + } + public void apply() throws ConfigurationException { if (myPluginsAutoUpdateEnabled != null) { UpdateOptions state = UpdateSettings.getInstance().getState(); diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/PluginsTabFactory.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/PluginsTabFactory.java index 0db6298854aa..c0b5756e4eff 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/PluginsTabFactory.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/PluginsTabFactory.java @@ -86,16 +86,7 @@ public final class PluginsTabFactory implements WelcomeTabFactory { if (!configurable.isModified()) { return; } - ApplicationManager.getApplication().invokeLater(() -> { - try { - configurable.apply(); - WelcomeScreenEventCollector.logPluginsModified(); - InstalledPluginsState.getInstance().runShutdownCallback(); - } - catch (ConfigurationException exception) { - Logger.getInstance(PluginsTabFactory.class).error(exception); - } - }, ModalityState.nonModal()); + configurable.scheduleApply(); } });