diff -Naur ./rockbox/firmware/target/hosted/android/app/button-application.c ./rockbox.fixes/firmware/target/hosted/android/app/button-application.c --- ./rockbox/firmware/target/hosted/android/app/button-application.c 2011-01-24 02:41:27.000000000 -0600 +++ ./rockbox.fixes/firmware/target/hosted/android/app/button-application.c 2011-01-25 02:52:19.000000000 -0600 @@ -39,6 +39,14 @@ return BUTTON_MENU; case KEYCODE_DPAD_CENTER: return BUTTON_DPAD_CENTER; + case KEYCODE_DPAD_UP: + return BUTTON_DPAD_UP; + case KEYCODE_DPAD_DOWN: + return BUTTON_DPAD_DOWN; + case KEYCODE_DPAD_LEFT: + return BUTTON_DPAD_LEFT; + case KEYCODE_DPAD_RIGHT: + return BUTTON_DPAD_RIGHT; default: return BUTTON_NONE; } @@ -63,26 +71,4 @@ default: return 0; } -} - -unsigned dpad_to_button(int keyboard_key) -{ - switch (keyboard_key) - { - /* These buttons only post a single release event. - * doing otherwise will cause action.c to lock up waiting for - * a release (because android sends press/unpress to us too quickly - */ - case KEYCODE_DPAD_UP: - return BUTTON_DPAD_UP|BUTTON_REL; - case KEYCODE_DPAD_DOWN: - return BUTTON_DPAD_DOWN|BUTTON_REL; - case KEYCODE_DPAD_LEFT: - return BUTTON_DPAD_LEFT|BUTTON_REL; - case KEYCODE_DPAD_RIGHT: - return BUTTON_DPAD_RIGHT|BUTTON_REL; - default: - return BUTTON_NONE; - } -} - +} diff -Naur ./rockbox/firmware/target/hosted/android/button-android.c ./rockbox.fixes/firmware/target/hosted/android/button-android.c --- ./rockbox/firmware/target/hosted/android/button-android.c 2011-01-24 02:41:27.000000000 -0600 +++ ./rockbox.fixes/firmware/target/hosted/android/button-android.c 2011-01-25 02:52:21.000000000 -0600 @@ -67,13 +67,11 @@ (void)env; (void)this; - unsigned button = 0; + signed button = 0; if (!state) { button = multimedia_to_button((int)keycode); - if (!button) - button = dpad_to_button((int)keycode); if (button) queue_post(&button_queue, button, 0); } @@ -83,6 +81,11 @@ button = key_to_button(keycode); } + if (button == last_btns) + { + button = key_to_button(last_btns); + } + if (button == BUTTON_NONE) { last_btns = button;