diff --git a/runelite-api/src/main/java/net/runelite/api/Client.java b/runelite-api/src/main/java/net/runelite/api/Client.java index 7c40a86f11..8b03591b67 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -2042,4 +2042,12 @@ public interface Client extends GameShell * Gets whether the flames on the login screen should be rendered */ boolean shouldRenderLoginScreenFire(); + + /** + * Test if a key is pressed + * @param keycode the keycode + * @return + * @see KeyCode + */ + boolean isKeyPressed(int keycode); } diff --git a/runelite-api/src/main/java/net/runelite/api/KeyCode.java b/runelite-api/src/main/java/net/runelite/api/KeyCode.java new file mode 100644 index 0000000000..66770d8b6a --- /dev/null +++ b/runelite-api/src/main/java/net/runelite/api/KeyCode.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2020, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.api; + +/** + * Jagex key codes + */ +public final class KeyCode +{ + public static final int KC_SHIFT = 81; +} 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 6c9157b992..073f33b56c 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 @@ -230,7 +230,6 @@ public class ClientUI currentButton.setSelected(false); currentNavButton.setSelected(false); currentButton = null; - currentNavButton = null; } else { @@ -403,7 +402,6 @@ public class ClientUI toggleSidebar(); } }; - sidebarListener.setEnabledOnLogin(true); keyManager.registerKeyListener(sidebarListener); @@ -415,7 +413,7 @@ public class ClientUI togglePluginPanel(); } }; - + pluginPanelListener.setEnabledOnLogin(true); keyManager.registerKeyListener(pluginPanelListener); // Add mouse listener @@ -433,7 +431,6 @@ public class ClientUI return mouseEvent; } }; - mouseManager.registerMouseListener(mouseListener); // Decorate window with custom chrome and titlebar if needed diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java index bcbca38cbb..f7d9aa21d7 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java @@ -135,8 +135,12 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener { if (!event.isFocused()) { - inOverlayManagingMode = false; - resetOverlayManagementMode(); + if (inOverlayManagingMode) + { + inOverlayManagingMode = false; + resetOverlayManagementMode(); + } + inMenuEntryMode = false; menuEntries = null; } @@ -616,7 +620,7 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener @Override public void keyReleased(KeyEvent e) { - if (!e.isAltDown()) + if (!e.isAltDown() && inOverlayManagingMode) { inOverlayManagingMode = false; resetOverlayManagementMode(); diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/KeyHandlerMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/KeyHandlerMixin.java new file mode 100644 index 0000000000..13e9c340ec --- /dev/null +++ b/runelite-mixins/src/main/java/net/runelite/mixins/KeyHandlerMixin.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2020, Owain van Brakel + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.mixins; + +import net.runelite.api.mixins.Inject; +import net.runelite.api.mixins.Mixin; +import net.runelite.api.mixins.Shadow; +import net.runelite.rs.api.RSClient; + +@Mixin(RSClient.class) +public abstract class KeyHandlerMixin implements RSClient +{ + @Shadow("client") + private static RSClient client; + + @Inject + public boolean isKeyPressed(int keycode) + { + boolean[] pressedKeys = client.getPressedKeys(); + return pressedKeys[keycode]; + } +}