Merge pull request #1541 from reicast/fh/dpad-fix

Avoid opposite dpad buttons being both down. Ignore android key repeats
This commit is contained in:
flyinghead 2019-04-05 15:42:34 +02:00 committed by GitHub
commit 7e11e7aff6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 47 additions and 13 deletions

View File

@ -51,7 +51,39 @@ bool GamepadDevice::gamepad_btn_input(u32 code, bool pressed)
if (key < 0x10000) if (key < 0x10000)
{ {
if (pressed) if (pressed)
{
kcode[_maple_port] &= ~(u16)key; kcode[_maple_port] &= ~(u16)key;
// Avoid two opposite dpad keys being pressed simultaneously
switch (key)
{
case DC_DPAD_UP:
kcode[_maple_port] |= (u16)DC_DPAD_DOWN;
break;
case DC_DPAD_DOWN:
kcode[_maple_port] |= (u16)DC_DPAD_UP;
break;
case DC_DPAD_LEFT:
kcode[_maple_port] |= (u16)DC_DPAD_RIGHT;
break;
case DC_DPAD_RIGHT:
kcode[_maple_port] |= (u16)DC_DPAD_LEFT;
break;
case DC_DPAD2_UP:
kcode[_maple_port] |= (u16)DC_DPAD2_DOWN;
break;
case DC_DPAD2_DOWN:
kcode[_maple_port] |= (u16)DC_DPAD2_UP;
break;
case DC_DPAD2_LEFT:
kcode[_maple_port] |= (u16)DC_DPAD2_RIGHT;
break;
case DC_DPAD2_RIGHT:
kcode[_maple_port] |= (u16)DC_DPAD2_LEFT;
break;
default:
break;
}
}
else else
kcode[_maple_port] |= (u16)key; kcode[_maple_port] |= (u16)key;
} }

View File

@ -228,22 +228,24 @@ public abstract class BaseGLActivity extends Activity implements ActivityCompat.
@Override @Override
public boolean onKeyDown(int keyCode, KeyEvent event) { public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) { if (event.getRepeatCount() == 0) {
if (!JNIdc.guiIsOpen()) { if (keyCode == KeyEvent.KEYCODE_BACK) {
showMenu(); if (!JNIdc.guiIsOpen()) {
return true; showMenu();
return true;
}
else if (JNIdc.guiIsContentBrowser()) {
finish();
return true;
}
} }
else if (JNIdc.guiIsContentBrowser()) { if (InputDeviceManager.getInstance().joystickButtonEvent(event.getDeviceId(), keyCode, true))
finish();
return true; return true;
}
}
if (InputDeviceManager.getInstance().joystickButtonEvent(event.getDeviceId(), keyCode, true))
return true;
if (ViewConfiguration.get(this).hasPermanentMenuKey()) { if (ViewConfiguration.get(this).hasPermanentMenuKey()) {
if (keyCode == KeyEvent.KEYCODE_MENU) { if (keyCode == KeyEvent.KEYCODE_MENU) {
return showMenu(); return showMenu();
}
} }
} }
return super.onKeyDown(keyCode, event); return super.onKeyDown(keyCode, event);