diff --git a/input/drivers/android_input.c b/input/drivers/android_input.c index dd1e7150a2..48da3a8405 100644 --- a/input/drivers/android_input.c +++ b/input/drivers/android_input.c @@ -1112,8 +1112,10 @@ static int16_t android_input_state(void *data, switch (device) { case RETRO_DEVICE_JOYPAD: - return input_joypad_pressed(android->joypad, port, binds[port], id) || - android_keyboard_port_input_pressed(binds[port],id); + if (binds[port][id].valid) + return input_joypad_pressed(android->joypad, port, binds[port], id) || + android_keyboard_port_input_pressed(binds[port],id); + break; case RETRO_DEVICE_ANALOG: return input_joypad_analog(android->joypad, port, idx, id, binds[port]); @@ -1166,12 +1168,14 @@ static bool android_input_key_pressed(void *data, int key) if (settings->input.all_users_control_menu) { for (port = 0; port < MAX_USERS; port++) - if (input_joypad_pressed(android->joypad, + if (settings->input.binds[0][key].valid && + input_joypad_pressed(android->joypad, port, settings->input.binds[0], key)) return true; } else - if (input_joypad_pressed(android->joypad, + if (settings->input.binds[0][key].valid && + input_joypad_pressed(android->joypad, 0, settings->input.binds[0], key)) return true; diff --git a/input/drivers/cocoa_input.c b/input/drivers/cocoa_input.c index ce891e71b9..57f3181690 100644 --- a/input/drivers/cocoa_input.c +++ b/input/drivers/cocoa_input.c @@ -277,12 +277,16 @@ static int16_t cocoa_input_state(void *data, switch (device) { case RETRO_DEVICE_JOYPAD: - return apple_input_is_pressed(port, binds[port], id) || - input_joypad_pressed(apple->joypad, port, binds[port], id) + if (binds[port][id].valid) + { + return apple_input_is_pressed(port, binds[port], id) || + input_joypad_pressed(apple->joypad, port, binds[port], id) #ifdef HAVE_MFI - || input_joypad_pressed(apple->sec_joypad, port, binds[port], id) + || input_joypad_pressed(apple->sec_joypad, port, binds[port], id) #endif - ; + ; + } + break; case RETRO_DEVICE_ANALOG: #ifdef HAVE_MFI ret = input_joypad_analog(apple->sec_joypad, port, @@ -318,26 +322,34 @@ static bool cocoa_input_key_pressed(void *data, int key) if (settings->input.all_users_control_menu) { for (port = 0; port < MAX_USERS; port++) + { + if (settings->input.binds[0][key].valid) + { + if (input_joypad_pressed(apple->joypad, + port, settings->input.binds[0], key)) + return true; + +#ifdef HAVE_MFI + if (input_joypad_pressed(apple->sec_joypad, port, settings->input.binds[0], key)) + return true; +#endif + } + } + } + else + { + if (settings->input.binds[0][key].valid) { if (input_joypad_pressed(apple->joypad, - port, settings->input.binds[0], key)) + 0, settings->input.binds[0], key)) return true; #ifdef HAVE_MFI - if (input_joypad_pressed(apple->sec_joypad, port, settings->input.binds[0], key)) + if (input_joypad_pressed(apple->sec_joypad, 0, settings->input.binds[0], key)) return true; #endif } } - else - if (input_joypad_pressed(apple->joypad, - 0, settings->input.binds[0], key)) - return true; - -#ifdef HAVE_MFI - if (input_joypad_pressed(apple->sec_joypad, 0, settings->input.binds[0], key)) - return true; -#endif return false; } diff --git a/input/drivers/ctr_input.c b/input/drivers/ctr_input.c index aebfd91805..254bb6dc3d 100644 --- a/input/drivers/ctr_input.c +++ b/input/drivers/ctr_input.c @@ -57,7 +57,9 @@ static int16_t ctr_input_state(void *data, const struct retro_keybind **binds, switch (device) { case RETRO_DEVICE_JOYPAD: - return input_joypad_pressed(ctr->joypad, port, binds[port], id); + if (binds[port][id].valid) + return input_joypad_pressed(ctr->joypad, port, binds[port], id); + break; case RETRO_DEVICE_ANALOG: return input_joypad_analog(ctr->joypad, port, idx, id, binds[port]); } @@ -96,12 +98,14 @@ static bool ctr_input_key_pressed(void *data, int key) if (settings->input.all_users_control_menu) { for (port = 0; port < MAX_USERS; port++) - if (input_joypad_pressed(ctr->joypad, + if (settings->input.binds[0][key].valid && + input_joypad_pressed(ctr->joypad, port, settings->input.binds[0], key)) return true; } else - if (input_joypad_pressed(ctr->joypad, + if (settings->input.binds[0][key].valid && + input_joypad_pressed(ctr->joypad, 0, settings->input.binds[0], key)) return true; diff --git a/input/drivers/dinput.c b/input/drivers/dinput.c index 65833d1032..07e3b7b467 100644 --- a/input/drivers/dinput.c +++ b/input/drivers/dinput.c @@ -281,7 +281,7 @@ static bool dinput_is_pressed(struct dinput_input *di, if (!di->blocked && dinput_keyboard_pressed(di, bind->key)) return true; - if (input_joypad_pressed(di->joypad, port, binds, id)) + if (binds[port][id].valid && input_joypad_pressed(di->joypad, port, binds, id)) return true; return false; diff --git a/input/drivers/gx_input.c b/input/drivers/gx_input.c index 2f25210978..af15d514e9 100644 --- a/input/drivers/gx_input.c +++ b/input/drivers/gx_input.c @@ -51,7 +51,9 @@ static int16_t gx_input_state(void *data, const struct retro_keybind **binds, switch (device) { case RETRO_DEVICE_JOYPAD: - return input_joypad_pressed(gx->joypad, port, binds[port], id); + if (binds[port][id].valid) + return input_joypad_pressed(gx->joypad, port, binds[port], id); + break; case RETRO_DEVICE_ANALOG: return input_joypad_analog(gx->joypad, port, idx, id, binds[port]); } @@ -101,12 +103,14 @@ static bool gx_input_key_pressed(void *data, int key) if (settings->input.all_users_control_menu) { for (port = 0; port < MAX_USERS; port++) - if (input_joypad_pressed(gx->joypad, + if (settings->input.binds[0][key].valid && + input_joypad_pressed(gx->joypad, port, settings->input.binds[0], key)) return true; } else - if (input_joypad_pressed(gx->joypad, + if (settings->input.binds[0][key].valid && + input_joypad_pressed(gx->joypad, 0, settings->input.binds[0], key)) return true; diff --git a/input/drivers/linuxraw_input.c b/input/drivers/linuxraw_input.c index f46c248513..ccb868eca5 100644 --- a/input/drivers/linuxraw_input.c +++ b/input/drivers/linuxraw_input.c @@ -119,12 +119,14 @@ static bool linuxraw_input_key_pressed(void *data, int key) if (settings->input.all_users_control_menu) { for (port = 0; port < MAX_USERS; port++) - if (input_joypad_pressed(linuxraw->joypad, + if (settings->input.binds[0][key].valid && + input_joypad_pressed(linuxraw->joypad, port, settings->input.binds[0], key)) return true; } else - if (input_joypad_pressed(linuxraw->joypad, + if (settings->input.binds[0][key].valid && + input_joypad_pressed(linuxraw->joypad, 0, settings->input.binds[0], key)) return true; @@ -146,9 +148,10 @@ static int16_t linuxraw_input_state(void *data, switch (device) { case RETRO_DEVICE_JOYPAD: - return linuxraw_is_pressed(linuxraw, binds[port], id) || - input_joypad_pressed(linuxraw->joypad, port, binds[port], id); - + if (binds[port][id].valid) + return linuxraw_is_pressed(linuxraw, binds[port], id) || + input_joypad_pressed(linuxraw->joypad, port, binds[port], id); + break; case RETRO_DEVICE_ANALOG: ret = linuxraw_analog_pressed(linuxraw, binds[port], idx, id); if (!ret) diff --git a/input/drivers/ps3_input.c b/input/drivers/ps3_input.c index c9236538bc..803d3d6784 100644 --- a/input/drivers/ps3_input.c +++ b/input/drivers/ps3_input.c @@ -112,7 +112,9 @@ static int16_t ps3_input_state(void *data, switch (device) { case RETRO_DEVICE_JOYPAD: - return input_joypad_pressed(ps3->joypad, port, binds[port], id); + if (binds[port][id].valid) + return input_joypad_pressed(ps3->joypad, port, binds[port], id); + break; case RETRO_DEVICE_ANALOG: return input_joypad_analog(ps3->joypad, port, idx, id, binds[port]); #if 0 diff --git a/input/drivers/psp_input.c b/input/drivers/psp_input.c index 49ff9cf46a..93d781b1d0 100644 --- a/input/drivers/psp_input.c +++ b/input/drivers/psp_input.c @@ -74,7 +74,9 @@ static int16_t psp_input_state(void *data, const struct retro_keybind **binds, switch (device) { case RETRO_DEVICE_JOYPAD: - return input_joypad_pressed(psp->joypad, port, binds[port], id); + if (binds[port][id].valid) + return input_joypad_pressed(psp->joypad, port, binds[port], id); + break; case RETRO_DEVICE_ANALOG: return input_joypad_analog(psp->joypad, port, idx, id, binds[port]); } diff --git a/input/drivers/qnx_input.c b/input/drivers/qnx_input.c index a8b7d33f61..91cb2b13ea 100644 --- a/input/drivers/qnx_input.c +++ b/input/drivers/qnx_input.c @@ -780,7 +780,9 @@ static int16_t qnx_input_state(void *data, switch (device) { case RETRO_DEVICE_JOYPAD: - return input_joypad_pressed(qnx->joypad, port, binds[port], id); + if (binds[port][id].valid) + return input_joypad_pressed(qnx->joypad, port, binds[port], id); + break; case RETRO_DEVICE_ANALOG: return qnx_analog_input_state(qnx, port, idx, id); case RARCH_DEVICE_POINTER_SCREEN: diff --git a/input/drivers/rwebinput_input.c b/input/drivers/rwebinput_input.c index 2a41bd35d0..33c94e7713 100644 --- a/input/drivers/rwebinput_input.c +++ b/input/drivers/rwebinput_input.c @@ -149,8 +149,9 @@ static int16_t rwebinput_input_state(void *data, const struct retro_keybind **bi switch (device) { case RETRO_DEVICE_JOYPAD: - return rwebinput_is_pressed(rwebinput, binds[port], id); - + if (binds[port][id].valid) + return rwebinput_is_pressed(rwebinput, binds[port], id); + break; case RETRO_DEVICE_ANALOG: return rwebinput_analog_pressed(rwebinput, binds[port], idx, id); diff --git a/input/drivers/sdl_input.c b/input/drivers/sdl_input.c index 446a998797..67a41fcd7c 100644 --- a/input/drivers/sdl_input.c +++ b/input/drivers/sdl_input.c @@ -121,12 +121,14 @@ static bool sdl_input_key_pressed(void *data, int key) if (settings->input.all_users_control_menu) { for (port = 0; port < MAX_USERS; port++) - if (input_joypad_pressed(sdl->joypad, + if (settings->input.binds[0][key].valid && + input_joypad_pressed(sdl->joypad, port, settings->input.binds[0], key)) return true; } else - if (input_joypad_pressed(sdl->joypad, + if (settings->input.binds[0][key].valid && + input_joypad_pressed(sdl->joypad, 0, settings->input.binds[0], key)) return true; } diff --git a/input/drivers/udev_input.c b/input/drivers/udev_input.c index bf2306dc1e..3bcdf275cc 100644 --- a/input/drivers/udev_input.c +++ b/input/drivers/udev_input.c @@ -467,9 +467,9 @@ static int16_t udev_analog_pressed(const struct retro_keybind *binds, unsigned i input_conv_analog_id_to_bind_id(idx, id, &id_minus, &id_plus); - if (udev_input_is_pressed(binds, id_minus)) + if (binds[id_minus].valid && udev_input_is_pressed(binds, id_minus)) pressed_minus = -0x7fff; - if (udev_input_is_pressed(binds, id_plus)) + if (binds[id_plus].valid && udev_input_is_pressed(binds, id_plus)) pressed_plus = 0x7fff; return pressed_plus + pressed_minus; @@ -523,9 +523,10 @@ static int16_t udev_input_state(void *data, const struct retro_keybind **binds, switch (device) { case RETRO_DEVICE_JOYPAD: - return udev_input_is_pressed(binds[port], id) || - input_joypad_pressed(udev->joypad, port, binds[port], id); - + if (binds[port][id].valid) + return udev_input_is_pressed(binds[port], id) || + input_joypad_pressed(udev->joypad, port, binds[port], id); + break; case RETRO_DEVICE_ANALOG: ret = udev_analog_pressed(binds[port], idx, id); if (!ret) @@ -555,18 +556,21 @@ static bool udev_input_key_pressed(void *data, int key) settings_t *settings = config_get_ptr(); int port = 0; - if (udev_input_is_pressed(settings->input.binds[0], key)) + if (settings->input.binds[0][key].valid + && udev_input_is_pressed(settings->input.binds[0], key)) return true; if (settings->input.all_users_control_menu) { for (port = 0; port < MAX_USERS; port++) - if (input_joypad_pressed(udev->joypad, + if (settings->input.binds[0][key].valid && + input_joypad_pressed(udev->joypad, port, settings->input.binds[0], key)) return true; } else - if (input_joypad_pressed(udev->joypad, + if (settings->input.binds[0][key].valid && + input_joypad_pressed(udev->joypad, 0, settings->input.binds[0], key)) return true; diff --git a/input/drivers/x11_input.c b/input/drivers/x11_input.c index 73ceb6aac1..28b2cbf4e8 100644 --- a/input/drivers/x11_input.c +++ b/input/drivers/x11_input.c @@ -96,7 +96,7 @@ static bool x_is_pressed(x11_input_t *x11, if (id < RARCH_BIND_LIST_END) { const struct retro_keybind *bind = &binds[id]; - return bind->valid && x_key_pressed(x11, binds[id].key); + return x_key_pressed(x11, binds[id].key); } return false; @@ -111,9 +111,9 @@ static int16_t x_pressed_analog(x11_input_t *x11, input_conv_analog_id_to_bind_id(idx, id, &id_minus, &id_plus); - if (x_is_pressed(x11, binds, id_minus)) + if (binds[id_minus].valid && x_is_pressed(x11, binds, id_minus)) pressed_minus = -0x7fff; - if (x_is_pressed(x11, binds, id_plus)) + if (binds[id_plus].valid && x_is_pressed(x11, binds, id_plus)) pressed_plus = 0x7fff; return pressed_plus + pressed_minus; @@ -125,7 +125,7 @@ static bool x_input_key_pressed(void *data, int key) settings_t *settings = config_get_ptr(); int port = 0; - if (x_is_pressed(x11, settings->input.binds[0], key)) + if (settings->input.binds[0][key].valid && x_is_pressed(x11, settings->input.binds[0], key)) return true; if (settings->input.all_users_control_menu) @@ -257,12 +257,12 @@ static int16_t x_input_state(void *data, switch (device) { case RETRO_DEVICE_JOYPAD: - return x_is_pressed(x11, binds[port], id) || - input_joypad_pressed(x11->joypad, port, binds[port], id); - + if (binds[port][id].valid) + return x_is_pressed(x11, binds[port], id) || + input_joypad_pressed(x11->joypad, port, binds[port], id); + break; case RETRO_DEVICE_KEYBOARD: return x_key_pressed(x11, id); - case RETRO_DEVICE_ANALOG: ret = x_pressed_analog(x11, binds[port], idx, id); if (!ret) diff --git a/input/drivers/xdk_xinput_input.c b/input/drivers/xdk_xinput_input.c index 5ca8627d6f..9765bd3809 100644 --- a/input/drivers/xdk_xinput_input.c +++ b/input/drivers/xdk_xinput_input.c @@ -59,7 +59,9 @@ static int16_t xdk_input_state(void *data, const struct retro_keybind **binds, switch (device) { case RETRO_DEVICE_JOYPAD: - return input_joypad_pressed(xdk->joypad, port, binds[port], id); + if (binds[port][id].valid) + return input_joypad_pressed(xdk->joypad, port, binds[port], id); + break; case RETRO_DEVICE_ANALOG: return input_joypad_analog(xdk->joypad, port, index, id, binds[port]); } @@ -101,12 +103,14 @@ static bool xdk_input_key_pressed(void *data, int key) if (settings->input.all_users_control_menu) { for (port = 0; port < MAX_USERS; port++) - if (input_joypad_pressed(xdk->joypad, + if (settings->input.binds[0][key].valid && + input_joypad_pressed(xdk->joypad, port, settings->input.binds[0], key)) return true; } else - if (input_joypad_pressed(xdk->joypad, + if (settings->input.binds[0][key].valid && + input_joypad_pressed(xdk->joypad, 0, settings->input.binds[0], key)) return true; diff --git a/input/drivers_keyboard/keyboard_event_udev.c b/input/drivers_keyboard/keyboard_event_udev.c index a2d1274388..b027ef4f9c 100644 --- a/input/drivers_keyboard/keyboard_event_udev.c +++ b/input/drivers_keyboard/keyboard_event_udev.c @@ -69,7 +69,7 @@ bool udev_input_is_pressed(const struct retro_keybind *binds, unsigned id) { const struct retro_keybind *bind = &binds[id]; unsigned bit = input_keymaps_translate_rk_to_keysym(binds[id].key); - return bind->valid && BIT_GET(udev_key_state, bit); + return BIT_GET(udev_key_state, bit); } return false; } diff --git a/input/input_joypad_driver.c b/input/input_joypad_driver.c index df37b1f35f..9cc9ab7467 100644 --- a/input/input_joypad_driver.c +++ b/input/input_joypad_driver.c @@ -239,31 +239,24 @@ bool input_joypad_pressed( const void *binds_data, unsigned key) { - float scaled_axis; - int16_t axis; - uint32_t joyaxis; - uint64_t joykey; settings_t *settings = config_get_ptr(); - const struct retro_keybind *binds = (const struct retro_keybind*) - binds_data; unsigned joy_idx = settings->input.joypad_map[port]; + const struct retro_keybind *binds = (const struct retro_keybind*)binds_data; /* Auto-binds are per joypad, not per user. */ const struct retro_keybind *auto_binds = settings->input.autoconf_binds[joy_idx]; - - if (!drv || !binds[key].valid) - return false; - - joykey = (binds[key].joykey != NO_BTN) + uint64_t joykey = (binds[key].joykey != NO_BTN) ? binds[key].joykey : auto_binds[key].joykey; - if (drv->button(joy_idx, (uint16_t)joykey)) - return true; + if (!drv->button(joy_idx, (uint16_t)joykey)) + { + uint32_t joyaxis = (binds[key].joyaxis != AXIS_NONE) + ? binds[key].joyaxis : auto_binds[key].joyaxis; + int16_t axis = drv->axis(joy_idx, joyaxis); + float scaled_axis = (float)abs(axis) / 0x8000; + return scaled_axis > settings->input.axis_threshold; + } - joyaxis = (binds[key].joyaxis != AXIS_NONE) - ? binds[key].joyaxis : auto_binds[key].joyaxis; - axis = drv->axis(joy_idx, joyaxis); - scaled_axis = (float)abs(axis) / 0x8000; - return scaled_axis > settings->input.axis_threshold; + return true; } /**