summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2012-04-05 13:00:05 +0200
committerThomas Martitz <kugel@rockbox.org>2012-04-05 15:01:59 +0200
commitbb0e4cc543e4c7bed6dff3a41d092b6867632535 (patch)
treea62dca3c50fa09cfe609df088e9eee9bf2ac2853
parentf458888a4c4fd8601ff4690388e2fc06fecb9fc2 (diff)
downloadrockbox-bb0e4cc543e4c7bed6dff3a41d092b6867632535.tar.gz
rockbox-bb0e4cc543e4c7bed6dff3a41d092b6867632535.zip
touchscreen: Fix kinetic scrolling when the statusbar is off.
The scrolling code cannot differentiate between the BUTTON_TOUCHSCREEN post from normal touches and the one posted in the timeout callback. To fix introduce a global special button (BUTTON_REDRAW) that results in the desired redraw. This existed already as a local kludge for android and is now generalized. Change-Id: I6bfa6c66431c48f5042fcd8fce2ea72cd3457f58
-rw-r--r--apps/action.c4
-rw-r--r--apps/gui/bitmap/list.c2
-rw-r--r--apps/keymaps/keymap-android.c3
-rw-r--r--firmware/export/button.h12
-rw-r--r--firmware/target/hosted/android/app/button-target.h2
-rw-r--r--firmware/target/hosted/android/lcd-android.c2
6 files changed, 13 insertions, 12 deletions
diff --git a/apps/action.c b/apps/action.c
index ee6cbaa4cf..5ebcbf771b 100644
--- a/apps/action.c
+++ b/apps/action.c
@@ -233,6 +233,10 @@ static int get_action_worker(int context, int timeout,
* multimedia button presses don't go through the action system */
if (button == BUTTON_NONE || button & (SYS_EVENT|BUTTON_MULTIMEDIA))
return button;
+ /* the special redraw button should result in a screen refresh */
+ if (button == BUTTON_REDRAW)
+ return ACTION_REDRAW;
+
/* Don't send any buttons through untill we see the release event */
if (wait_for_release)
{
diff --git a/apps/gui/bitmap/list.c b/apps/gui/bitmap/list.c
index 09a66f3386..2f13d8ba53 100644
--- a/apps/gui/bitmap/list.c
+++ b/apps/gui/bitmap/list.c
@@ -587,7 +587,7 @@ static int kinetic_callback(struct timeout *tmo)
data->velocity = 0;
}
- queue_post(&button_queue, BUTTON_TOUCHSCREEN, 0);
+ queue_post(&button_queue, BUTTON_REDRAW, 0);
/* stop if the velocity hit or crossed zero */
if (!data->velocity)
{
diff --git a/apps/keymaps/keymap-android.c b/apps/keymaps/keymap-android.c
index b7b93ac1f0..ea1abbc83a 100644
--- a/apps/keymaps/keymap-android.c
+++ b/apps/keymaps/keymap-android.c
@@ -50,9 +50,6 @@ static const struct button_mapping button_context_standard[] = {
{ ACTION_STD_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
{ ACTION_STD_CONTEXT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU },
- /* special hack to get a redraw on activity resume, see lcd-android.c */
- { ACTION_REDRAW, BUTTON_FORCE_REDRAW, BUTTON_NONE },
-
LAST_ITEM_IN_LIST
}; /* button_context_standard */
diff --git a/firmware/export/button.h b/firmware/export/button.h
index 3f6052a309..6276a033cc 100644
--- a/firmware/export/button.h
+++ b/firmware/export/button.h
@@ -81,13 +81,15 @@ void wheel_send_events(bool send);
int button_apply_acceleration(const unsigned int data);
#endif
-#define BUTTON_NONE 0x00000000
+#define BUTTON_NONE 0x00000000
/* Button modifiers */
-#define BUTTON_REL 0x02000000
-#define BUTTON_REPEAT 0x04000000
-#define BUTTON_TOUCHSCREEN 0x08000000
-#define BUTTON_MULTIMEDIA 0x10000000
+#define BUTTON_REL 0x02000000
+#define BUTTON_REPEAT 0x04000000
+/* Special buttons */
+#define BUTTON_TOUCHSCREEN 0x08000000
+#define BUTTON_MULTIMEDIA 0x10000000
+#define BUTTON_REDRAW 0x20000000
#define BUTTON_MULTIMEDIA_PLAYPAUSE (BUTTON_MULTIMEDIA|0x01)
#define BUTTON_MULTIMEDIA_STOP (BUTTON_MULTIMEDIA|0x02)
diff --git a/firmware/target/hosted/android/app/button-target.h b/firmware/target/hosted/android/app/button-target.h
index 326d65872d..5430d7f600 100644
--- a/firmware/target/hosted/android/app/button-target.h
+++ b/firmware/target/hosted/android/app/button-target.h
@@ -56,6 +56,4 @@ void android_ignore_back_button(bool yes);
#define BUTTON_BOTTOMMIDDLE 0x00080000
#define BUTTON_BOTTOMRIGHT 0x00100000
-#define BUTTON_FORCE_REDRAW 0x00200000
-
#endif /* _BUTTON_TARGET_H_ */
diff --git a/firmware/target/hosted/android/lcd-android.c b/firmware/target/hosted/android/lcd-android.c
index bb0331db69..2b383741d1 100644
--- a/firmware/target/hosted/android/lcd-android.c
+++ b/firmware/target/hosted/android/lcd-android.c
@@ -146,7 +146,7 @@ Java_org_rockbox_RockboxFramebuffer_surfaceCreated(JNIEnv *env, jobject this,
send_event(LCD_EVENT_ACTIVATION, NULL);
/* Force an update, since the newly created surface is initially black
* waiting for the next normal update results in a longish black screen */
- queue_post(&button_queue, BUTTON_FORCE_REDRAW, 0);
+ queue_post(&button_queue, BUTTON_REDRAW, 0);
}
/*