summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/gui/skin_engine/wps_internals.h5
-rw-r--r--apps/gui/skin_engine/wps_parser.c53
2 files changed, 39 insertions, 19 deletions
diff --git a/apps/gui/skin_engine/wps_internals.h b/apps/gui/skin_engine/wps_internals.h
index a64ec93..ffebed7 100644
--- a/apps/gui/skin_engine/wps_internals.h
+++ b/apps/gui/skin_engine/wps_internals.h
@@ -390,6 +390,11 @@ struct touchregion {
short int y; /* y-pos */
short int width; /* width */
short int height; /* height */
+ enum {
+ WPS_TOUCHREGION_ACTION,
+ WPS_TOUCHREGION_SCROLLBAR,
+ WPS_TOUCHREGION_VOLUME
+ } type; /* type of touch region */
bool repeat; /* requires the area be held for the action */
int action; /* action this button will return */
};
diff --git a/apps/gui/skin_engine/wps_parser.c b/apps/gui/skin_engine/wps_parser.c
index 3df2c5f..9671d7c 100644
--- a/apps/gui/skin_engine/wps_parser.c
+++ b/apps/gui/skin_engine/wps_parser.c
@@ -1093,6 +1093,8 @@ static int parse_touchregion(const char *wps_bufptr,
struct touchregion *region;
const char *ptr = wps_bufptr;
const char *action;
+ const char pb_string[] = "progressbar";
+ const char vol_string[] = "volume";
int x,y,w,h;
/* format: %T|x|y|width|height|action|
@@ -1132,28 +1134,41 @@ static int parse_touchregion(const char *wps_bufptr,
region->width = w;
region->height = h;
region->wvp = &wps_data->viewports[wps_data->num_viewports];
- i = 0;
- if (*action == '&')
- {
- action++;
- region->repeat = true;
- }
+
+ if(!strncmp(pb_string, action, sizeof(pb_string)-1)
+ && *(action + sizeof(pb_string)-1) == '|')
+ region->type = WPS_TOUCHREGION_SCROLLBAR;
+ else if(!strncmp(vol_string, action, sizeof(vol_string)-1)
+ && *(action + sizeof(vol_string)-1) == '|')
+ region->type = WPS_TOUCHREGION_VOLUME;
else
- region->repeat = false;
-
- imax = ARRAYLEN(touchactions);
- while ((region->action == ACTION_NONE) &&
- (i < imax))
{
- /* try to match with one of our touchregion screens */
- int len = strlen(touchactions[i].s);
- if (!strncmp(touchactions[i].s, action, len)
- && *(action+len) == '|')
- region->action = touchactions[i].action;
- i++;
+ region->type = WPS_TOUCHREGION_ACTION;
+
+ if (*action == '&')
+ {
+ action++;
+ region->repeat = true;
+ }
+ else
+ region->repeat = false;
+
+ i = 0;
+ imax = ARRAYLEN(touchactions);
+ while ((region->action == ACTION_NONE) &&
+ (i < imax))
+ {
+ /* try to match with one of our touchregion screens */
+ int len = strlen(touchactions[i].s);
+ if (!strncmp(touchactions[i].s, action, len)
+ && *(action+len) == '|')
+ region->action = touchactions[i].action;
+ i++;
+ }
+ if (region->action == ACTION_NONE)
+ return WPS_ERROR_INVALID_PARAM;
}
- if (region->action == ACTION_NONE)
- return WPS_ERROR_INVALID_PARAM;
+
wps_data->touchregion_count++;
return skip_end_of_line(wps_bufptr);
}