aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/displayapp/DisplayApp.cpp4
-rw-r--r--src/displayapp/LittleVgl.cpp9
-rw-r--r--src/displayapp/LittleVgl.h1
3 files changed, 14 insertions, 0 deletions
diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp
index 98a28258..5d33f76e 100644
--- a/src/displayapp/DisplayApp.cpp
+++ b/src/displayapp/DisplayApp.cpp
@@ -313,6 +313,10 @@ void DisplayApp::Refresh() {
while (!lv_task_handler()) {
};
}
+ // Clear any ongoing touch pressed events
+ // Without this LVGL gets stuck in the pressed state and will keep refreshing the
+ // display activity timer causing the screen to never sleep after timeout
+ lvgl.ClearTouchState();
if (msg == Messages::GoToAOD) {
lcd.LowPowerOn();
// Record idle entry time
diff --git a/src/displayapp/LittleVgl.cpp b/src/displayapp/LittleVgl.cpp
index c70a0856..c6f6f784 100644
--- a/src/displayapp/LittleVgl.cpp
+++ b/src/displayapp/LittleVgl.cpp
@@ -248,6 +248,8 @@ void LittleVgl::SetNewTouchPoint(int16_t x, int16_t y, bool contact) {
}
}
+// Cancel an ongoing tap
+// Signifies that LVGL should not handle the current tap
void LittleVgl::CancelTap() {
if (tapped) {
isCancelled = true;
@@ -255,6 +257,13 @@ void LittleVgl::CancelTap() {
}
}
+// Clear the current tapped state
+// Signifies that touch input processing is suspended
+void LittleVgl::ClearTouchState() {
+ touchPoint = {-1, -1};
+ tapped = false;
+}
+
bool LittleVgl::GetTouchPadInfo(lv_indev_data_t* ptr) {
ptr->point.x = touchPoint.x;
ptr->point.y = touchPoint.y;
diff --git a/src/displayapp/LittleVgl.h b/src/displayapp/LittleVgl.h
index 9a15ae15..54505b36 100644
--- a/src/displayapp/LittleVgl.h
+++ b/src/displayapp/LittleVgl.h
@@ -26,6 +26,7 @@ namespace Pinetime {
void SetFullRefresh(FullRefreshDirections direction);
void SetNewTouchPoint(int16_t x, int16_t y, bool contact);
void CancelTap();
+ void ClearTouchState();
bool GetFullRefresh() {
bool returnValue = fullRefresh;