--- rockbox.unmod/firmware/target/hosted/android/button-android.c 2011-01-26 09:58:36.000000000 -0600 +++ rockbox.fixes/firmware/target/hosted/android/button-android.c 2011-01-26 11:12:20.000000000 -0600 @@ -69,37 +69,32 @@ unsigned button = 0; - if (!state) + if (state) /* on button press */ { - button = multimedia_to_button((int)keycode); + button = multimedia_to_button((int)keycode); /*load multimedia key to button */ + if (!button) - button = dpad_to_button((int)keycode); - if (button) - queue_post(&button_queue, button, 0); - } + { + button = key_to_button(keycode); - if (!button) - { - button = key_to_button(keycode); - } + if (button == BUTTON_NONE) + { + button = !button; /* reset button */ + return false; /* if button was not handled return false */ + } + } - if (button == BUTTON_NONE) - { - last_btns = button; - return false; + queue_post(&button_queue, button, 0); /* if we made it to here post button to queue */ + return true; } - if (state) - { - last_btns |= button; - } - else + + if (!state) /* on button release do not queue button releases */ { - last_btns &= (~button); - return false; + return true; /* but say we handlesd it */ } - - return true; + + return false; /* we did not handle key press or release */ } void button_init_device(void)