diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLite.java b/runelite-client/src/main/java/net/runelite/client/RuneLite.java index c25d767db6..b507f796d5 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLite.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLite.java @@ -55,6 +55,8 @@ import net.runelite.client.game.ItemManager; import net.runelite.client.game.LootManager; import net.runelite.client.game.chatbox.ChatboxPanelManager; import net.runelite.client.menus.MenuManager; +import net.runelite.client.plugins.Plugin; +import net.runelite.client.plugins.PluginInstantiationException; import net.runelite.client.plugins.PluginManager; import net.runelite.client.rs.ClientUpdateCheckMode; import net.runelite.client.ui.ClientUI; @@ -294,6 +296,18 @@ public class RuneLite configManager.sendConfig(); clientSessionManager.shutdown(); discordService.close(); + + for (final Plugin plugin : pluginManager.getPlugins()) + { + try + { + pluginManager.stopPlugin(plugin); + } + catch (PluginInstantiationException e) + { + log.warn("Failed to gracefully close plugin", e); + } + } } @VisibleForTesting diff --git a/runelite-client/src/main/java/net/runelite/client/util/SwingUtil.java b/runelite-client/src/main/java/net/runelite/client/util/SwingUtil.java index 39fc738f1f..5080db032a 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/SwingUtil.java +++ b/runelite-client/src/main/java/net/runelite/client/util/SwingUtil.java @@ -216,10 +216,16 @@ public class SwingUtil if (result == JOptionPane.OK_OPTION) { - callback.run(); - System.exit(0); + frame.dispose(); } } + + @Override + public void windowClosed(WindowEvent event) + { + callback.run(); + System.exit(0); + } }); }