diff options
author | Jens Arnold <amiconn@rockbox.org> | 2006-02-19 13:34:12 +0000 |
---|---|---|
committer | Jens Arnold <amiconn@rockbox.org> | 2006-02-19 13:34:12 +0000 |
commit | 237d3c4c4b9d4ae1ee48ab812b83009761811604 (patch) | |
tree | 0222738324467191968fe1d3ee81d7130c390a6c /uisimulator/x11/button-x11.c | |
parent | 1b45b130dcee36b1f9f7965fd0b062789bb99bc0 (diff) | |
download | rockbox-237d3c4c4b9d4ae1ee48ab812b83009761811604.tar.gz rockbox-237d3c4c4b9d4ae1ee48ab812b83009761811604.zip |
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/x11/button-x11.c')
-rw-r--r-- | uisimulator/x11/button-x11.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/uisimulator/x11/button-x11.c b/uisimulator/x11/button-x11.c index 08b09cf8cb..673f71ea7b 100644 --- a/uisimulator/x11/button-x11.c +++ b/uisimulator/x11/button-x11.c | |||
@@ -55,13 +55,13 @@ static void button_tick(void) | |||
55 | static int repeat_speed = REPEAT_INTERVAL_START; | 55 | static int repeat_speed = REPEAT_INTERVAL_START; |
56 | static int repeat_count = 0; | 56 | static int repeat_count = 0; |
57 | static bool repeat = false; | 57 | static bool repeat = false; |
58 | static bool post = false; | ||
58 | int diff; | 59 | int diff; |
59 | int btn; | 60 | int btn; |
60 | 61 | ||
61 | /* only poll every X ticks */ | 62 | /* only poll every X ticks */ |
62 | if ( ++tick >= POLL_FREQUENCY ) | 63 | if ( ++tick >= POLL_FREQUENCY ) |
63 | { | 64 | { |
64 | bool post = false; | ||
65 | button_read(); | 65 | button_read(); |
66 | btn = button_state; | 66 | btn = button_state; |
67 | 67 | ||
@@ -115,9 +115,18 @@ static void button_tick(void) | |||
115 | if ( post ) | 115 | if ( post ) |
116 | { | 116 | { |
117 | if (repeat) | 117 | if (repeat) |
118 | queue_post(&button_queue, BUTTON_REPEAT | btn, NULL); | 118 | { |
119 | if (queue_empty(&button_queue)) | ||
120 | { | ||
121 | queue_post(&button_queue, BUTTON_REPEAT | btn, NULL); | ||
122 | post = false; | ||
123 | } | ||
124 | } | ||
119 | else | 125 | else |
126 | { | ||
120 | queue_post(&button_queue, btn, NULL); | 127 | queue_post(&button_queue, btn, NULL); |
128 | post = false; | ||
129 | } | ||
121 | #ifdef HAVE_REMOTE_LCD | 130 | #ifdef HAVE_REMOTE_LCD |
122 | if(btn & BUTTON_REMOTE) | 131 | if(btn & BUTTON_REMOTE) |
123 | remote_backlight_on(); | 132 | remote_backlight_on(); |