summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2005-05-17 23:34:16 +0000
committerJens Arnold <amiconn@rockbox.org>2005-05-17 23:34:16 +0000
commit34232596e9b25bf69edb451a5f6d6366ac7912cf (patch)
treedf1f13f340166f93f66dbee8210e75da458135b9
parent27abc2a6411ac6f864529ff3783c8009e43074d0 (diff)
downloadrockbox-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.c58
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;