From 237d3c4c4b9d4ae1ee48ab812b83009761811604 Mon Sep 17 00:00:00 2001 From: Jens Arnold Date: Sun, 19 Feb 2006 13:34:12 +0000 Subject: 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 --- uisimulator/sdl/button.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'uisimulator/sdl/button.c') 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) -- cgit v1.2.3