diff options
author | Jens Arnold <amiconn@rockbox.org> | 2005-05-17 23:34:16 +0000 |
---|---|---|
committer | Jens Arnold <amiconn@rockbox.org> | 2005-05-17 23:34:16 +0000 |
commit | 34232596e9b25bf69edb451a5f6d6366ac7912cf (patch) | |
tree | df1f13f340166f93f66dbee8210e75da458135b9 | |
parent | 27abc2a6411ac6f864529ff3783c8009e43074d0 (diff) | |
download | rockbox-34232596e9b25bf69edb451a5f6d6366ac7912cf.tar.gz rockbox-34232596e9b25bf69edb451a5f6d6366ac7912cf.zip |
Cleaned up button handling: Properly ignore button releases and repeats instead of excessive queue clearing. Fixes bug #1070590. Slightly more consistent button assigment in the bookmark selector.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6489 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | apps/bookmark.c | 58 |
1 files changed, 33 insertions, 25 deletions
diff --git a/apps/bookmark.c b/apps/bookmark.c index 4af4b967b9..545e2cf1eb 100644 --- a/apps/bookmark.c +++ b/apps/bookmark.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include "audio.h" | 29 | #include "audio.h" |
30 | #include "wps.h" | 30 | #include "wps.h" |
31 | #include "settings.h" | 31 | #include "settings.h" |
32 | #include "tree.h" | ||
32 | #include "bookmark.h" | 33 | #include "bookmark.h" |
33 | #include "dir.h" | 34 | #include "dir.h" |
34 | #include "status.h" | 35 | #include "status.h" |
@@ -482,7 +483,6 @@ bool bookmark_autoload(const char* file) | |||
482 | } | 483 | } |
483 | else | 484 | else |
484 | { | 485 | { |
485 | button_clear_queue(); /* clear button queue */ | ||
486 | /* Prompting user to confirm bookmark load */ | 486 | /* Prompting user to confirm bookmark load */ |
487 | lcd_clear_display(); | 487 | lcd_clear_display(); |
488 | #ifdef HAVE_LCD_BITMAP | 488 | #ifdef HAVE_LCD_BITMAP |
@@ -498,12 +498,8 @@ bool bookmark_autoload(const char* file) | |||
498 | #endif | 498 | #endif |
499 | lcd_update(); | 499 | lcd_update(); |
500 | 500 | ||
501 | sleep(100); | ||
502 | |||
503 | while(!done) | 501 | while(!done) |
504 | { | 502 | { |
505 | button_clear_queue(); | ||
506 | |||
507 | /* Wait for a key to be pushed */ | 503 | /* Wait for a key to be pushed */ |
508 | key = button_get(true); | 504 | key = button_get(true); |
509 | switch(key) | 505 | switch(key) |
@@ -516,12 +512,14 @@ bool bookmark_autoload(const char* file) | |||
516 | return bookmark_load(global_bookmark_file_name, true); | 512 | return bookmark_load(global_bookmark_file_name, true); |
517 | 513 | ||
518 | default: | 514 | default: |
519 | if(default_event_handler(key) == SYS_USB_CONNECTED) | 515 | /* Handle sys events, ignore button releases & repeats */ |
520 | return true; | 516 | if (default_event_handler(key) || |
521 | return false; | 517 | !(key & (BUTTON_REPEAT|BUTTON_REL))) |
518 | done = true; | ||
519 | break; | ||
522 | } | 520 | } |
523 | } | 521 | } |
524 | return true; | 522 | return false; |
525 | } | 523 | } |
526 | } | 524 | } |
527 | 525 | ||
@@ -601,6 +599,19 @@ static int get_bookmark_count(const char* bookmark_file_name) | |||
601 | 599 | ||
602 | } | 600 | } |
603 | 601 | ||
602 | #if CONFIG_KEYPAD == ONDIO_PAD | ||
603 | #define BOOKMARK_SELECT_PRE BUTTON_RIGHT | ||
604 | #define BOOKMARK_SELECT (BUTTON_RIGHT | BUTTON_REL) | ||
605 | #define BOOKMARK_DELETE (BUTTON_RIGHT | BUTTON_REPEAT) | ||
606 | |||
607 | #elif CONFIG_KEYPAD == IRIVER_H100_PAD | ||
608 | #define BOOKMARK_SELECT BUTTON_SELECT | ||
609 | #define BOOKMARK_DELETE (BUTTON_ON | BUTTON_SELECT) | ||
610 | |||
611 | #else /* player, recorder, gmini */ | ||
612 | #define BOOKMARK_SELECT BUTTON_PLAY | ||
613 | #define BOOKMARK_DELETE (BUTTON_ON | BUTTON_PLAY) | ||
614 | #endif | ||
604 | 615 | ||
605 | /* ----------------------------------------------------------------------- */ | 616 | /* ----------------------------------------------------------------------- */ |
606 | /* This displays a the bookmarks in a file and allows the user to */ | 617 | /* This displays a the bookmarks in a file and allows the user to */ |
@@ -610,7 +621,8 @@ static char* select_bookmark(const char* bookmark_file_name) | |||
610 | { | 621 | { |
611 | int bookmark_id = 0; | 622 | int bookmark_id = 0; |
612 | int bookmark_id_prev = -1; | 623 | int bookmark_id_prev = -1; |
613 | int key = 0; | 624 | int key; |
625 | int lastkey = BUTTON_NONE; | ||
614 | char* bookmark = NULL; | 626 | char* bookmark = NULL; |
615 | int bookmark_count = 0; | 627 | int bookmark_count = 0; |
616 | 628 | ||
@@ -618,7 +630,6 @@ static char* select_bookmark(const char* bookmark_file_name) | |||
618 | lcd_setmargins(0, 0); | 630 | lcd_setmargins(0, 0); |
619 | #endif | 631 | #endif |
620 | 632 | ||
621 | button_clear_queue(); /* clear button queue */ | ||
622 | bookmark_count = get_bookmark_count(bookmark_file_name); | 633 | bookmark_count = get_bookmark_count(bookmark_file_name); |
623 | 634 | ||
624 | while(true) | 635 | while(true) |
@@ -641,7 +652,6 @@ static char* select_bookmark(const char* bookmark_file_name) | |||
641 | { | 652 | { |
642 | splash(HZ, true, str(LANG_BOOKMARK_LOAD_EMPTY)); | 653 | splash(HZ, true, str(LANG_BOOKMARK_LOAD_EMPTY)); |
643 | remove(bookmark_file_name); | 654 | remove(bookmark_file_name); |
644 | button_clear_queue(); /* clear button queue */ | ||
645 | return NULL; | 655 | return NULL; |
646 | } | 656 | } |
647 | else | 657 | else |
@@ -661,7 +671,11 @@ static char* select_bookmark(const char* bookmark_file_name) | |||
661 | key = button_get(true); | 671 | key = button_get(true); |
662 | switch(key) | 672 | switch(key) |
663 | { | 673 | { |
664 | case SETTINGS_OK: | 674 | case BOOKMARK_SELECT: |
675 | #ifdef BOOKMARK_SELECT_PRE | ||
676 | if (lastkey != BOOKMARK_SELECT_PRE) | ||
677 | break; | ||
678 | #endif | ||
665 | /* User wants to use this bookmark */ | 679 | /* User wants to use this bookmark */ |
666 | #ifdef HAVE_LCD_BITMAP | 680 | #ifdef HAVE_LCD_BITMAP |
667 | if (global_settings.statusbar) | 681 | if (global_settings.statusbar) |
@@ -671,33 +685,26 @@ static char* select_bookmark(const char* bookmark_file_name) | |||
671 | #endif | 685 | #endif |
672 | return bookmark; | 686 | return bookmark; |
673 | 687 | ||
674 | #if CONFIG_KEYPAD == ONDIO_PAD | 688 | case BOOKMARK_DELETE: |
675 | case BUTTON_MENU | BUTTON_RIGHT: | ||
676 | #elif CONFIG_KEYPAD == IRIVER_H100_PAD | ||
677 | case BUTTON_ON | BUTTON_SELECT: | ||
678 | #else | ||
679 | case BUTTON_ON | BUTTON_PLAY: | ||
680 | #endif | ||
681 | /* User wants to delete this bookmark */ | 689 | /* User wants to delete this bookmark */ |
682 | delete_bookmark(bookmark_file_name, bookmark_id); | 690 | delete_bookmark(bookmark_file_name, bookmark_id); |
683 | bookmark_id_prev=-2; | 691 | bookmark_id_prev=-2; |
684 | bookmark_count--; | 692 | bookmark_count--; |
685 | if(bookmark_id >= bookmark_count) | 693 | if(bookmark_id >= bookmark_count) |
686 | bookmark_id = bookmark_count -1; | 694 | bookmark_id = bookmark_count -1; |
687 | button_clear_queue(); /* clear button queue */ | ||
688 | break; | 695 | break; |
689 | 696 | ||
690 | case SETTINGS_INC: | 697 | case SETTINGS_DEC: |
698 | case SETTINGS_DEC | BUTTON_REPEAT: | ||
691 | bookmark_id--; | 699 | bookmark_id--; |
692 | break; | 700 | break; |
693 | 701 | ||
694 | case SETTINGS_DEC: | 702 | case SETTINGS_INC: |
703 | case SETTINGS_INC | BUTTON_REPEAT: | ||
695 | bookmark_id++; | 704 | bookmark_id++; |
696 | break; | 705 | break; |
697 | 706 | ||
698 | #if CONFIG_KEYPAD != ONDIO_PAD | ||
699 | case SETTINGS_CANCEL: | 707 | case SETTINGS_CANCEL: |
700 | #endif | ||
701 | #ifdef SETTINGS_CANCEL2 | 708 | #ifdef SETTINGS_CANCEL2 |
702 | case SETTINGS_CANCEL2: | 709 | case SETTINGS_CANCEL2: |
703 | #endif | 710 | #endif |
@@ -711,6 +718,7 @@ static char* select_bookmark(const char* bookmark_file_name) | |||
711 | return NULL; | 718 | return NULL; |
712 | break; | 719 | break; |
713 | } | 720 | } |
721 | lastkey = key; | ||
714 | } | 722 | } |
715 | 723 | ||
716 | return NULL; | 724 | return NULL; |