summaryrefslogtreecommitdiff
path: root/uisimulator/sdl/button.c
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2006-02-19 13:34:12 +0000
committerJens Arnold <amiconn@rockbox.org>2006-02-19 13:34:12 +0000
commit237d3c4c4b9d4ae1ee48ab812b83009761811604 (patch)
tree0222738324467191968fe1d3ee81d7130c390a6c /uisimulator/sdl/button.c
parent1b45b130dcee36b1f9f7965fd0b062789bb99bc0 (diff)
Adaptive button repeat: adapts repeat rate depending on the ability of the application to cope. Avoids afterscroll and similar effects. * Yield while scrolling through lists.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8738 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'uisimulator/sdl/button.c')
-rw-r--r--uisimulator/sdl/button.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/uisimulator/sdl/button.c b/uisimulator/sdl/button.c
index 671cf12d5c..72224315a2 100644
--- a/uisimulator/sdl/button.c
+++ b/uisimulator/sdl/button.c
@@ -39,7 +39,6 @@ static int btn = 0; /* Hopefully keeps track of currently pressed keys... */
void button_event(int key, bool pressed)
{
- bool post = false;
int new_btn = 0;
int diff = 0;
static int count = 0;
@@ -47,6 +46,7 @@ void button_event(int key, bool pressed)
static int repeat_speed = REPEAT_INTERVAL_START;
static int repeat_count = 0;
static bool repeat = false;
+ static bool post = false;
switch (key)
{
@@ -175,7 +175,8 @@ void button_event(int key, bool pressed)
{
if ( repeat )
{
- count--;
+ if (!post)
+ count--;
if (count == 0)
{
post = true;
@@ -203,9 +204,18 @@ void button_event(int key, bool pressed)
if ( post )
{
if(repeat)
- queue_post(&button_queue, BUTTON_REPEAT | btn, NULL);
+ {
+ if (queue_empty(&button_queue))
+ {
+ queue_post(&button_queue, BUTTON_REPEAT | btn, NULL);
+ post = false;
+ }
+ }
else
+ {
queue_post(&button_queue, btn, NULL);
+ post = false;
+ }
#ifdef HAVE_REMOTE_LCD
if(btn & BUTTON_REMOTE)