diff --git a/runelite-client/src/main/java/net/runelite/client/config/RuneLiteConfig.java b/runelite-client/src/main/java/net/runelite/client/config/RuneLiteConfig.java index f90ecf43b1..81ccc10c7c 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/RuneLiteConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/config/RuneLiteConfig.java @@ -312,4 +312,15 @@ public interface RuneLiteConfig extends Config { return new Keybind(KeyEvent.VK_F11, InputEvent.CTRL_DOWN_MASK); } + + @ConfigItem( + keyName = "panelToggleKey", + name = "Plugin Panel Toggle Key", + description = "The key that will toggle the current or last opened plugin panel (accepts modifiers)", + position = 45 + ) + default Keybind panelToggleKey() + { + return new Keybind(KeyEvent.VK_F12, InputEvent.CTRL_DOWN_MASK); + } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java index c47c0f892b..55fc4940b8 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java @@ -353,6 +353,17 @@ public class ClientUI keyManager.registerKeyListener(sidebarListener); + final HotkeyListener pluginPanelListener = new HotkeyListener(config::panelToggleKey) + { + @Override + public void hotkeyPressed() + { + togglePluginPanel(); + } + }; + + keyManager.registerKeyListener(pluginPanelListener); + // Add mouse listener final MouseListener mouseListener = new MouseAdapter() { @@ -738,6 +749,26 @@ public class ClientUI } } + private void togglePluginPanel() + { + // Toggle plugin panel open + final boolean pluginPanelOpen = pluginPanel != null; + + if (currentButton != null) + { + currentButton.setSelected(!pluginPanelOpen); + } + + if (pluginPanelOpen) + { + contract(); + } + else + { + expand(currentNavButton); + } + } + private void expand(@Nullable NavigationButton button) { if (button == null)