diff options
Diffstat (limited to 'uisimulator')
-rw-r--r-- | uisimulator/sdl/button.c | 60 |
1 files changed, 57 insertions, 3 deletions
diff --git a/uisimulator/sdl/button.c b/uisimulator/sdl/button.c index bf0396e18d..b371643c6f 100644 --- a/uisimulator/sdl/button.c +++ b/uisimulator/sdl/button.c | |||
@@ -44,6 +44,14 @@ void set_backlight_filter_keypress(bool value) | |||
44 | { | 44 | { |
45 | filter_first_keypress = value; | 45 | filter_first_keypress = value; |
46 | } | 46 | } |
47 | #ifdef HAVE_REMOTE_LCD | ||
48 | static bool remote_filter_first_keypress; | ||
49 | |||
50 | void set_remote_backlight_filter_keypress(bool value) | ||
51 | { | ||
52 | remote_filter_first_keypress = value; | ||
53 | } | ||
54 | #endif | ||
47 | #endif | 55 | #endif |
48 | 56 | ||
49 | void button_event(int key, bool pressed) | 57 | void button_event(int key, bool pressed) |
@@ -56,6 +64,12 @@ void button_event(int key, bool pressed) | |||
56 | static int repeat_count = 0; | 64 | static int repeat_count = 0; |
57 | static bool repeat = false; | 65 | static bool repeat = false; |
58 | static bool post = false; | 66 | static bool post = false; |
67 | #ifdef CONFIG_BACKLIGHT | ||
68 | static bool skip_release = false; | ||
69 | #ifdef HAVE_REMOTE_LCD | ||
70 | static bool skip_remote_release = false; | ||
71 | #endif | ||
72 | #endif | ||
59 | 73 | ||
60 | switch (key) | 74 | switch (key) |
61 | { | 75 | { |
@@ -169,11 +183,26 @@ void button_event(int key, bool pressed) | |||
169 | 183 | ||
170 | /* Find out if a key has been released */ | 184 | /* Find out if a key has been released */ |
171 | diff = btn ^ lastbtn; | 185 | diff = btn ^ lastbtn; |
172 | |||
173 | if(diff && (btn & diff) == 0) | 186 | if(diff && (btn & diff) == 0) |
174 | { | 187 | { |
188 | #ifdef CONFIG_BACKLIGHT | ||
189 | #ifdef HAVE_REMOTE_LCD | ||
190 | if(diff & BUTTON_REMOTE) | ||
191 | if(!skip_remote_release) | ||
192 | queue_post(&button_queue, BUTTON_REL | diff, NULL); | ||
193 | else | ||
194 | skip_remote_release = false; | ||
195 | else | ||
196 | #endif | ||
197 | if(!skip_release) | ||
198 | queue_post(&button_queue, BUTTON_REL | diff, NULL); | ||
199 | else | ||
200 | skip_release = false; | ||
201 | #else | ||
175 | queue_post(&button_queue, BUTTON_REL | diff, NULL); | 202 | queue_post(&button_queue, BUTTON_REL | diff, NULL); |
203 | #endif | ||
176 | } | 204 | } |
205 | |||
177 | else | 206 | else |
178 | { | 207 | { |
179 | if ( btn ) | 208 | if ( btn ) |
@@ -223,15 +252,40 @@ void button_event(int key, bool pressed) | |||
223 | if (queue_empty(&button_queue)) | 252 | if (queue_empty(&button_queue)) |
224 | { | 253 | { |
225 | queue_post(&button_queue, BUTTON_REPEAT | btn, NULL); | 254 | queue_post(&button_queue, BUTTON_REPEAT | btn, NULL); |
255 | #ifdef CONFIG_BACKLIGHT | ||
256 | #ifdef HAVE_REMOTE_LCD | ||
257 | if(btn & BUTTON_REMOTE) | ||
258 | { | ||
259 | if(skip_remote_release) | ||
260 | skip_remote_release = false; | ||
261 | } | ||
262 | else | ||
263 | #endif | ||
264 | if(skip_release) | ||
265 | skip_release = false; | ||
266 | #endif | ||
226 | post = false; | 267 | post = false; |
227 | } | 268 | } |
228 | } | 269 | } |
229 | else | 270 | else |
230 | { | 271 | { |
231 | #ifdef CONFIG_BACKLIGHT | 272 | #ifdef CONFIG_BACKLIGHT |
232 | if ( !filter_first_keypress || is_backlight_on()) | 273 | #ifdef HAVE_REMOTE_LCD |
233 | #endif | 274 | if (btn & BUTTON_REMOTE) { |
275 | if (!remote_filter_first_keypress || is_remote_backlight_on()) | ||
276 | queue_post(&button_queue, btn, NULL); | ||
277 | else | ||
278 | skip_remote_release = true; | ||
279 | } | ||
280 | else | ||
281 | #endif | ||
282 | if (!filter_first_keypress || is_backlight_on()) | ||
283 | queue_post(&button_queue, btn, NULL); | ||
284 | else | ||
285 | skip_release = true; | ||
286 | #else /* no backlight, nothing to skip */ | ||
234 | queue_post(&button_queue, btn, NULL); | 287 | queue_post(&button_queue, btn, NULL); |
288 | #endif | ||
235 | post = false; | 289 | post = false; |
236 | } | 290 | } |
237 | 291 | ||