diff options
author | Jonathan Gordon <rockbox@jdgordon.info> | 2009-07-03 05:08:33 +0000 |
---|---|---|
committer | Jonathan Gordon <rockbox@jdgordon.info> | 2009-07-03 05:08:33 +0000 |
commit | 0e445fcef6a803e0b321964b3c739f6dc9f2a82d (patch) | |
tree | 2ab1303b93f85bf25ecb32a8c4396af52b599b5d | |
parent | c41f13f7d8d3c3fe4ee1ed8a94f5492f7adc6945 (diff) | |
download | rockbox-0e445fcef6a803e0b321964b3c739f6dc9f2a82d.tar.gz rockbox-0e445fcef6a803e0b321964b3c739f6dc9f2a82d.zip |
Fix the bug where the short-long fwd/back action would ffwd/rewind the next folder (consult the manual if that makes no sense)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21619 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | apps/action.c | 21 | ||||
-rw-r--r-- | apps/action.h | 6 | ||||
-rw-r--r-- | apps/gui/gwps.c | 2 |
3 files changed, 29 insertions, 0 deletions
diff --git a/apps/action.c b/apps/action.c index f493296a03..ee84706b09 100644 --- a/apps/action.c +++ b/apps/action.c @@ -40,6 +40,7 @@ static int last_button = BUTTON_NONE|BUTTON_REL; /* allow the ipod wheel to static intptr_t last_data = 0; static int last_action = ACTION_NONE; static bool repeated = false; +static bool wait_for_release = false; #ifdef HAVE_TOUCHSCREEN static bool short_press = false; @@ -127,6 +128,16 @@ static int get_action_worker(int context, int timeout, /* Data from sys events can be pulled with button_get_data */ if (button == BUTTON_NONE || button & SYS_EVENT) return button; + /* Don't send any buttons through untill we see the release event */ + if (wait_for_release) + { + if (button&BUTTON_REL) + { + wait_for_release = false; + } + return ACTION_NONE; + } + #if CONFIG_CODEC == SWCODEC /* Produce keyclick */ @@ -329,3 +340,13 @@ int action_get_touchscreen_press(short *x, short *y) return BUTTON_TOUCHSCREEN; } #endif + +/* Don't let get_action*() return any ACTION_* values untill the current buttons + * have ben release. SYS_* and BUTTON_NONE will go through. + * Any actions relying on _RELEASE won't get seen + */ +void action_wait_for_release(void) +{ + wait_for_release = true; +} + diff --git a/apps/action.h b/apps/action.h index 3e53b6d7a8..dd81d13818 100644 --- a/apps/action.h +++ b/apps/action.h @@ -295,4 +295,10 @@ intptr_t get_action_data(void); int action_get_touchscreen_press(short *x, short *y); #endif +/* Don't let get_action*() return any ACTION_* values untill the current buttons + * have ben release. SYS_* and BUTTON_NONE will go through. + * Any actions relying on _RELEASE won't get seen + */ +void action_wait_for_release(void); + #endif /* __ACTION_H__ */ diff --git a/apps/gui/gwps.c b/apps/gui/gwps.c index 50382a58ad..0b41f88cdc 100644 --- a/apps/gui/gwps.c +++ b/apps/gui/gwps.c @@ -135,6 +135,8 @@ static void change_dir(int direction) audio_prev_dir(); else if (direction > 0) audio_next_dir(); + /* prevent the next dir to immediatly start being ffw'd */ + action_wait_for_release(); } static void prev_track(unsigned long skip_thresh) |