From 1dd586df01004795faa973e5e74ffcd55216cbe8 Mon Sep 17 00:00:00 2001 From: "simon.kagstrom" Date: Mon, 25 May 2009 17:48:07 +0000 Subject: [PATCH] Fix bug where classic UP is mis-identified as nunchuk Z (same key code) --- SDL/src/joystick/wii/SDL_sysjoystick.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/SDL/src/joystick/wii/SDL_sysjoystick.c b/SDL/src/joystick/wii/SDL_sysjoystick.c index fd9f7e0..2dd29f4 100644 --- a/SDL/src/joystick/wii/SDL_sysjoystick.c +++ b/SDL/src/joystick/wii/SDL_sysjoystick.c @@ -97,9 +97,9 @@ static const u32 sdl_buttons_wii[] = WPAD_BUTTON_MINUS, WPAD_BUTTON_PLUS, WPAD_BUTTON_HOME, - WPAD_NUNCHUK_BUTTON_Z, - WPAD_NUNCHUK_BUTTON_C, - WPAD_CLASSIC_BUTTON_A, + WPAD_NUNCHUK_BUTTON_Z, /* 7 */ + WPAD_NUNCHUK_BUTTON_C, /* 8 */ + WPAD_CLASSIC_BUTTON_A, /* 9 */ WPAD_CLASSIC_BUTTON_B, WPAD_CLASSIC_BUTTON_X, WPAD_CLASSIC_BUTTON_Y, @@ -131,6 +131,16 @@ static int __numgcjoysticks = 4; static int __num_joysticks_open = 0; +static int wii_button_is_nunchuk(int idx) +{ + return idx == 7 || idx == 8; +} + +static int wii_button_is_classic(int idx) +{ + return idx >= 9; +} + /* Function to scan the system for joysticks. * This function should return the number of available * joysticks. Joystick 0 should be the system default joystick. @@ -301,6 +311,10 @@ static void _HandleWiiJoystickUpdate(SDL_Joystick* joystick) for(i = 0; i < (sizeof(sdl_buttons_wii) / sizeof(sdl_buttons_wii[0])); i++) { + if ( (exp_type == WPAD_EXP_CLASSIC && wii_button_is_nunchuk(i)) || + (exp_type == WPAD_EXP_NUNCHUK && wii_button_is_classic(i)) ) + continue; + if (changed & sdl_buttons_wii[i]) SDL_PrivateJoystickButton(joystick, i, (buttons & sdl_buttons_wii[i]) ? SDL_PRESSED : SDL_RELEASED);