Index: apps/gui/skin_engine/skin_parser.c =================================================================== --- apps/gui/skin_engine/skin_parser.c (revision 24567) +++ apps/gui/skin_engine/skin_parser.c (working copy) @@ -377,6 +377,7 @@ { WPS_TOKEN_LANG_IS_RTL , "Sr", WPS_REFRESH_STATIC, NULL }, { WPS_TOKEN_LASTTOUCH, "Tl", WPS_REFRESH_DYNAMIC, parse_timeout }, + { WPS_TOKEN_LASTRELEASE, "Tk", WPS_REFRESH_DYNAMIC, parse_timeout }, { WPS_TOKEN_CURRENT_SCREEN, "cs", WPS_REFRESH_DYNAMIC, NULL }, { WPS_NO_TOKEN, "T", 0, parse_touchregion }, Index: apps/gui/skin_engine/skin_tokens.c =================================================================== --- apps/gui/skin_engine/skin_tokens.c (revision 24567) +++ apps/gui/skin_engine/skin_tokens.c (working copy) @@ -891,6 +891,7 @@ token->value.i * TIMEOUT_UNIT)) return "v"; return NULL; + case WPS_TOKEN_LASTTOUCH: #ifdef HAVE_TOUCHSCREEN if (TIME_BEFORE(current_tick, token->value.i * TIMEOUT_UNIT + @@ -898,6 +899,13 @@ return "t"; #endif return NULL; + case WPS_TOKEN_LASTRELEASE: +#ifdef HAVE_TOUCHSCREEN + if (TIME_BEFORE(current_tick, token->value.i * TIMEOUT_UNIT + + touchscreen_last_release())) + return "t"; +#endif + return NULL; case WPS_TOKEN_SETTING: { Index: apps/gui/skin_engine/skin_tokens.h =================================================================== --- apps/gui/skin_engine/skin_tokens.h (revision 24567) +++ apps/gui/skin_engine/skin_tokens.h (working copy) @@ -191,6 +191,7 @@ TOKEN_MARKER_MISC, WPS_TOKEN_BUTTON_VOLUME, WPS_TOKEN_LASTTOUCH, + WPS_TOKEN_LASTRELEASE, #if (CONFIG_LED == LED_VIRTUAL) || defined(HAVE_REMOTE_LCD) /* Virtual LED */ WPS_TOKEN_VLED_HDD, Index: firmware/drivers/button.c =================================================================== --- firmware/drivers/button.c (revision 24567) +++ firmware/drivers/button.c (working copy) @@ -86,6 +86,7 @@ #ifdef HAVE_TOUCHSCREEN static int last_touchscreen_touch; +static int last_touchscreen_release; static int lastdata = 0; #endif #if defined(HAVE_HEADPHONE_DETECTION) @@ -420,6 +421,7 @@ #endif #ifdef HAVE_TOUCHSCREEN last_touchscreen_touch = 0xffff; + last_touchscreen_release = 0xffff; #endif /* Start polling last */ tick_add_task(button_tick); @@ -556,6 +558,8 @@ #ifdef HAVE_TOUCHSCREEN if (btn & BUTTON_TOUCHSCREEN) last_touchscreen_touch = current_tick; + if (btn == 0 && (lastbtn & BUTTON_TOUCHSCREEN)) + last_touchscreen_release = current_tick; #endif /* Filter the button status. It is only accepted if we get the same status twice in a row. */ @@ -593,6 +597,11 @@ { return last_touchscreen_touch; } + +int touchscreen_last_release(void) +{ + return last_touchscreen_release; +} #endif #ifdef HAVE_WHEEL_ACCELERATION Index: firmware/export/button.h =================================================================== --- firmware/export/button.h (revision 24567) +++ firmware/export/button.h (working copy) @@ -72,6 +72,7 @@ #ifdef HAVE_TOUCHSCREEN int touchscreen_last_touch(void); +int touchscreen_last_release(void); #if (!defined(BUTTON_TOPLEFT) || !defined(BUTTON_TOPMIDDLE) \ || !defined(BUTTON_TOPRIGHT) || !defined(BUTTON_MIDLEFT) \