keyremapping: use modified key map for mapping key release
This cleans up the code some and is more-correct since it will eg. no longer remap fkeys on keyrelease even when it was not remapped on keypress.
This commit is contained in:
@@ -156,7 +156,7 @@ class KeyRemappingListener implements KeyListener
|
||||
}
|
||||
}
|
||||
|
||||
if (mappedKeyCode != KeyEvent.VK_UNDEFINED)
|
||||
if (mappedKeyCode != KeyEvent.VK_UNDEFINED && mappedKeyCode != e.getKeyCode())
|
||||
{
|
||||
final char keyChar = e.getKeyChar();
|
||||
modified.put(e.getKeyCode(), mappedKeyCode);
|
||||
@@ -217,115 +217,19 @@ class KeyRemappingListener implements KeyListener
|
||||
@Override
|
||||
public void keyReleased(KeyEvent e)
|
||||
{
|
||||
final int keyCode = e.getKeyCode();
|
||||
final char keyChar = e.getKeyChar();
|
||||
|
||||
if (keyChar != KeyEvent.CHAR_UNDEFINED)
|
||||
{
|
||||
blockedChars.remove(keyChar);
|
||||
}
|
||||
|
||||
if (client.getGameState() == GameState.LOGIN_SCREEN)
|
||||
final Integer mappedKeyCode = modified.remove(keyCode);
|
||||
if (mappedKeyCode != null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (plugin.chatboxFocused() && !plugin.isTyping())
|
||||
{
|
||||
modified.remove(e.getKeyCode());
|
||||
|
||||
int mappedKeyCode = KeyEvent.VK_UNDEFINED;
|
||||
|
||||
if (config.cameraRemap())
|
||||
{
|
||||
if (config.up().matches(e))
|
||||
{
|
||||
mappedKeyCode = KeyEvent.VK_UP;
|
||||
}
|
||||
else if (config.down().matches(e))
|
||||
{
|
||||
mappedKeyCode = KeyEvent.VK_DOWN;
|
||||
}
|
||||
else if (config.left().matches(e))
|
||||
{
|
||||
mappedKeyCode = KeyEvent.VK_LEFT;
|
||||
}
|
||||
else if (config.right().matches(e))
|
||||
{
|
||||
mappedKeyCode = KeyEvent.VK_RIGHT;
|
||||
}
|
||||
}
|
||||
|
||||
if (config.fkeyRemap())
|
||||
{
|
||||
if (config.f1().matches(e))
|
||||
{
|
||||
mappedKeyCode = KeyEvent.VK_F1;
|
||||
}
|
||||
else if (config.f2().matches(e))
|
||||
{
|
||||
mappedKeyCode = KeyEvent.VK_F2;
|
||||
}
|
||||
else if (config.f3().matches(e))
|
||||
{
|
||||
mappedKeyCode = KeyEvent.VK_F3;
|
||||
}
|
||||
else if (config.f4().matches(e))
|
||||
{
|
||||
mappedKeyCode = KeyEvent.VK_F4;
|
||||
}
|
||||
else if (config.f5().matches(e))
|
||||
{
|
||||
mappedKeyCode = KeyEvent.VK_F5;
|
||||
}
|
||||
else if (config.f6().matches(e))
|
||||
{
|
||||
mappedKeyCode = KeyEvent.VK_F6;
|
||||
}
|
||||
else if (config.f7().matches(e))
|
||||
{
|
||||
mappedKeyCode = KeyEvent.VK_F7;
|
||||
}
|
||||
else if (config.f8().matches(e))
|
||||
{
|
||||
mappedKeyCode = KeyEvent.VK_F8;
|
||||
}
|
||||
else if (config.f9().matches(e))
|
||||
{
|
||||
mappedKeyCode = KeyEvent.VK_F9;
|
||||
}
|
||||
else if (config.f10().matches(e))
|
||||
{
|
||||
mappedKeyCode = KeyEvent.VK_F10;
|
||||
}
|
||||
else if (config.f11().matches(e))
|
||||
{
|
||||
mappedKeyCode = KeyEvent.VK_F11;
|
||||
}
|
||||
else if (config.f12().matches(e))
|
||||
{
|
||||
mappedKeyCode = KeyEvent.VK_F12;
|
||||
}
|
||||
else if (config.esc().matches(e))
|
||||
{
|
||||
mappedKeyCode = KeyEvent.VK_ESCAPE;
|
||||
}
|
||||
}
|
||||
|
||||
if (mappedKeyCode != KeyEvent.VK_UNDEFINED)
|
||||
{
|
||||
e.setKeyCode(mappedKeyCode);
|
||||
e.setKeyChar(KeyEvent.CHAR_UNDEFINED);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// press d + enter + release d - causes the right arrow to never be released
|
||||
Integer m = modified.get(e.getKeyCode());
|
||||
if (m != null)
|
||||
{
|
||||
modified.remove(e.getKeyCode());
|
||||
e.setKeyCode(m);
|
||||
e.setKeyChar(KeyEvent.CHAR_UNDEFINED);
|
||||
}
|
||||
e.setKeyCode(mappedKeyCode);
|
||||
e.setKeyChar(KeyEvent.CHAR_UNDEFINED);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,9 +99,9 @@ public class KeyRemappingListenerTest
|
||||
|
||||
verify(event).consume();
|
||||
|
||||
lenient().when(keyRemappingPlugin.isTyping()).thenReturn(true); // release handler no longer checks this
|
||||
// with the plugin now in typing mode, previously pressed and remapped keys should still be mapped
|
||||
// on key release regardless
|
||||
when(keyRemappingPlugin.isTyping()).thenReturn(true);
|
||||
event = mock(KeyEvent.class);
|
||||
when(event.getKeyCode()).thenReturn(KeyEvent.VK_D);
|
||||
keyRemappingListener.keyReleased(event);
|
||||
|
||||
Reference in New Issue
Block a user