diff --git a/android/native/jni/input_android.c b/android/native/jni/input_android.c index 019fe0d8ec..1c673bd847 100644 --- a/android/native/jni/input_android.c +++ b/android/native/jni/input_android.c @@ -32,8 +32,8 @@ static unsigned pads_connected; static int state_device_ids[MAX_PADS]; -static int back_exits[MAX_PADS]; static uint64_t state[MAX_PADS]; +static bool ignore_p1_back; struct input_pointer { @@ -120,18 +120,17 @@ static void android_input_poll(void *data) { state_id = pads_connected; state_device_ids[pads_connected++] = id; - bool back_exit = true; - input_autodetect_setup(android_app, msg, sizeof(msg), state_id, id, source, &back_exit); + input_autodetect_setup(android_app, msg, sizeof(msg), state_id, id, source); long_msg_enable = true; - back_exits[state_id] = back_exit; + if (state_id == 0) + ignore_p1_back = (keycode_lut[AKEYCODE_BACK] != 0); } - if (keycode == AKEYCODE_BACK) + if (keycode == AKEYCODE_BACK && (!ignore_p1_back || state_id != 0)) { - if (back_exits[state_id]) - *lifecycle_state |= (1ULL << RARCH_QUIT_KEY); + *lifecycle_state |= (1ULL << RARCH_QUIT_KEY); AInputQueue_finishEvent(android_app->inputQueue, event, handled); break; } diff --git a/android/native/jni/input_autodetect.c b/android/native/jni/input_autodetect.c index 1c4e9d1111..d9b1d3147a 100644 --- a/android/native/jni/input_autodetect.c +++ b/android/native/jni/input_autodetect.c @@ -96,7 +96,7 @@ void input_autodetect_init (void) } } -void input_autodetect_setup (void *data, char *msg, size_t sizeof_msg, unsigned port, unsigned id, int source, bool *back_exits) +void input_autodetect_setup (void *data, char *msg, size_t sizeof_msg, unsigned port, unsigned id, int source) { struct android_app *android_app = (struct android_app*)data; // Hack - we have to add '1' to the bit mask here because @@ -364,7 +364,6 @@ void input_autodetect_setup (void *data, char *msg, size_t sizeof_msg, unsigned keycode_lut[AKEYCODE_BACK] |= ((RETRO_DEVICE_ID_JOYPAD_SELECT+1) << shift); keycode_lut[AKEYCODE_BUTTON_THUMBL] |= ((RETRO_DEVICE_ID_JOYPAD_L3+1) << shift); keycode_lut[AKEYCODE_BUTTON_THUMBR] |= ((RETRO_DEVICE_ID_JOYPAD_R3+1) << shift); - *back_exits = false; } else if (strstr(name_buf, "USB,2-axis 8-button gamepad") || strstr(name_buf, "BUFFALO BGC-FC801")) @@ -497,7 +496,6 @@ void input_autodetect_setup (void *data, char *msg, size_t sizeof_msg, unsigned /* Xperia Play */ /* TODO: menu button */ /* Menu : 82 */ - *back_exits = false; keycode_lut[AKEYCODE_DPAD_CENTER] |= ((RETRO_DEVICE_ID_JOYPAD_B+1) << shift); keycode_lut[AKEYCODE_BACK] |= ((RETRO_DEVICE_ID_JOYPAD_A+1) << shift); keycode_lut[AKEYCODE_BUTTON_X] |= ((RETRO_DEVICE_ID_JOYPAD_Y+1) << shift); @@ -521,7 +519,6 @@ void input_autodetect_setup (void *data, char *msg, size_t sizeof_msg, unsigned * RStick Right: 40 */ /* Red Samurai */ - *back_exits = false; keycode_lut[AKEYCODE_W] |= ((RETRO_DEVICE_ID_JOYPAD_UP+1) << shift); keycode_lut[AKEYCODE_S] |= ((RETRO_DEVICE_ID_JOYPAD_DOWN+1) << shift); keycode_lut[AKEYCODE_A] |= ((RETRO_DEVICE_ID_JOYPAD_LEFT+1) << shift); diff --git a/android/native/jni/input_autodetect.h b/android/native/jni/input_autodetect.h index 9fe1260310..0cb8ae7378 100644 --- a/android/native/jni/input_autodetect.h +++ b/android/native/jni/input_autodetect.h @@ -64,6 +64,6 @@ extern uint64_t keycode_lut[LAST_KEYCODE]; extern bool volume_enable; void input_autodetect_init (void); -void input_autodetect_setup (void *data, char *msg, size_t sizeof_msg, unsigned port, unsigned id, int source, bool *back_exit); +void input_autodetect_setup (void *data, char *msg, size_t sizeof_msg, unsigned port, unsigned id, int source); #endif