From 9c8e2c8e1e9f3d35239ec46f1cbbb95455fffccb Mon Sep 17 00:00:00 2001 From: Jonathan Gordon Date: Thu, 17 Nov 2011 12:00:58 +0000 Subject: [PATCH] skin engine: Fix %if() when comparing against a number. If the tag being checked returns a number as a string (i.e %pv) but doesnt set the intval try to convert the string to a number so the comparisson operators work git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31003 a1c6a512-1295-4272-9138-f99709370657 --- apps/gui/skin_engine/skin_tokens.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c index bb9466c134..48d79600d2 100644 --- a/apps/gui/skin_engine/skin_tokens.c +++ b/apps/gui/skin_engine/skin_tokens.c @@ -733,10 +733,14 @@ static const char* NOINLINE get_lif_token_value(struct gui_wps *gwps, { int a = lif->num_options; int b; + bool number_set = true; struct wps_token *liftoken = SKINOFFSETTOPTR(get_skin_buffer(gwps->data), lif->token); const char* out_text = get_token_value(gwps, liftoken, offset, buf, buf_size, &a); if (a == -1 && liftoken->type != SKIN_TOKEN_VOLUME) + { a = (out_text && *out_text) ? 1 : 0; + number_set = false; + } switch (lif->operand.type) { case STRING: @@ -749,6 +753,9 @@ static const char* NOINLINE get_lif_token_value(struct gui_wps *gwps, break; } case INTEGER: + if (!number_set && out_text && *out_text >= '0' && *out_text <= '9') + a = atoi(out_text); + /* fall through */ case DECIMAL: b = lif->operand.data.number; break;