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:
Adam
2020-05-23 20:10:57 -04:00
parent c2a9ac443b
commit e9aac02a43
2 changed files with 8 additions and 104 deletions

View File

@@ -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);
}
}
}

View File

@@ -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);