summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/gui/skin_engine/skin_parser.c45
-rw-r--r--apps/gui/skin_engine/skin_render.c4
2 files changed, 18 insertions, 31 deletions
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c
index 92615ac7ee..e364cf1c76 100644
--- a/apps/gui/skin_engine/skin_parser.c
+++ b/apps/gui/skin_engine/skin_parser.c
@@ -80,11 +80,6 @@
80#define WPS_ERROR_INVALID_PARAM -1 80#define WPS_ERROR_INVALID_PARAM -1
81 81
82static char* skin_buffer = NULL; 82static char* skin_buffer = NULL;
83void skinparser_set_buffer(char* pointer)
84{
85 skin_buffer = pointer;
86}
87
88#if (LCD_DEPTH > 1) || (defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1)) 83#if (LCD_DEPTH > 1) || (defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1))
89static char *backdrop_filename; 84static char *backdrop_filename;
90#endif 85#endif
@@ -158,7 +153,6 @@ void *skin_find_item(const char *label, enum skin_find_what what,
158 struct wps_data *data) 153 struct wps_data *data)
159{ 154{
160 const char *itemlabel = NULL; 155 const char *itemlabel = NULL;
161 char *old_skin_buffer = skin_buffer;
162 char *databuf = get_skin_buffer(data); 156 char *databuf = get_skin_buffer(data);
163 union { 157 union {
164 struct skin_token_list *linkedlist; 158 struct skin_token_list *linkedlist;
@@ -166,28 +160,28 @@ void *skin_find_item(const char *label, enum skin_find_what what,
166 } list = {NULL}; 160 } list = {NULL};
167 bool isvplist = false; 161 bool isvplist = false;
168 void *ret = NULL; 162 void *ret = NULL;
169 if (databuf && databuf != skin_buffer) 163 if (!databuf)
170 skin_buffer = get_skin_buffer(data); 164 databuf = skin_buffer;
171 switch (what) 165 switch (what)
172 { 166 {
173 case SKIN_FIND_UIVP: 167 case SKIN_FIND_UIVP:
174 case SKIN_FIND_VP: 168 case SKIN_FIND_VP:
175 list.vplist = SKINOFFSETTOPTR(skin_buffer, data->tree); 169 list.vplist = SKINOFFSETTOPTR(databuf, data->tree);
176 isvplist = true; 170 isvplist = true;
177 break; 171 break;
178#ifdef HAVE_LCD_BITMAP 172#ifdef HAVE_LCD_BITMAP
179 case SKIN_FIND_IMAGE: 173 case SKIN_FIND_IMAGE:
180 list.linkedlist = SKINOFFSETTOPTR(skin_buffer, data->images); 174 list.linkedlist = SKINOFFSETTOPTR(databuf, data->images);
181 break; 175 break;
182#endif 176#endif
183#ifdef HAVE_TOUCHSCREEN 177#ifdef HAVE_TOUCHSCREEN
184 case SKIN_FIND_TOUCHREGION: 178 case SKIN_FIND_TOUCHREGION:
185 list.linkedlist = SKINOFFSETTOPTR(skin_buffer, data->touchregions); 179 list.linkedlist = SKINOFFSETTOPTR(databuf, data->touchregions);
186 break; 180 break;
187#endif 181#endif
188#ifdef HAVE_SKIN_VARIABLES 182#ifdef HAVE_SKIN_VARIABLES
189 case SKIN_VARIABLE: 183 case SKIN_VARIABLE:
190 list.linkedlist = SKINOFFSETTOPTR(skin_buffer, data->skinvars); 184 list.linkedlist = SKINOFFSETTOPTR(databuf, data->skinvars);
191 break; 185 break;
192#endif 186#endif
193 } 187 }
@@ -198,54 +192,50 @@ void *skin_find_item(const char *label, enum skin_find_what what,
198#ifdef HAVE_LCD_BITMAP 192#ifdef HAVE_LCD_BITMAP
199 struct wps_token *token = NULL; 193 struct wps_token *token = NULL;
200 if (!isvplist) 194 if (!isvplist)
201 token = SKINOFFSETTOPTR(skin_buffer, list.linkedlist->token); 195 token = SKINOFFSETTOPTR(databuf, list.linkedlist->token);
202#endif 196#endif
203 switch (what) 197 switch (what)
204 { 198 {
205 case SKIN_FIND_UIVP: 199 case SKIN_FIND_UIVP:
206 case SKIN_FIND_VP: 200 case SKIN_FIND_VP:
207 ret = SKINOFFSETTOPTR(skin_buffer, list.vplist->data); 201 ret = SKINOFFSETTOPTR(databuf, list.vplist->data);
208 if (((struct skin_viewport *)ret)->label == VP_DEFAULT_LABEL) 202 if (((struct skin_viewport *)ret)->label == VP_DEFAULT_LABEL)
209 itemlabel = VP_DEFAULT_LABEL_STRING; 203 itemlabel = VP_DEFAULT_LABEL_STRING;
210 else 204 else
211 itemlabel = SKINOFFSETTOPTR(skin_buffer, ((struct skin_viewport *)ret)->label); 205 itemlabel = SKINOFFSETTOPTR(databuf, ((struct skin_viewport *)ret)->label);
212 skip = !(((struct skin_viewport *)ret)->is_infovp == 206 skip = !(((struct skin_viewport *)ret)->is_infovp ==
213 (what==SKIN_FIND_UIVP)); 207 (what==SKIN_FIND_UIVP));
214 break; 208 break;
215#ifdef HAVE_LCD_BITMAP 209#ifdef HAVE_LCD_BITMAP
216 case SKIN_FIND_IMAGE: 210 case SKIN_FIND_IMAGE:
217 ret = SKINOFFSETTOPTR(skin_buffer, token->value.data); 211 ret = SKINOFFSETTOPTR(databuf, token->value.data);
218 itemlabel = SKINOFFSETTOPTR(skin_buffer, ((struct gui_img *)ret)->label); 212 itemlabel = SKINOFFSETTOPTR(databuf, ((struct gui_img *)ret)->label);
219 break; 213 break;
220#endif 214#endif
221#ifdef HAVE_TOUCHSCREEN 215#ifdef HAVE_TOUCHSCREEN
222 case SKIN_FIND_TOUCHREGION: 216 case SKIN_FIND_TOUCHREGION:
223 ret = SKINOFFSETTOPTR(skin_buffer, token->value.data); 217 ret = SKINOFFSETTOPTR(databuf, token->value.data);
224 itemlabel = SKINOFFSETTOPTR(skin_buffer, ((struct touchregion *)ret)->label); 218 itemlabel = SKINOFFSETTOPTR(databuf, ((struct touchregion *)ret)->label);
225 break; 219 break;
226#endif 220#endif
227#ifdef HAVE_SKIN_VARIABLES 221#ifdef HAVE_SKIN_VARIABLES
228 case SKIN_VARIABLE: 222 case SKIN_VARIABLE:
229 ret = SKINOFFSETTOPTR(skin_buffer, token->value.data); 223 ret = SKINOFFSETTOPTR(databuf, token->value.data);
230 itemlabel = SKINOFFSETTOPTR(skin_buffer, ((struct skin_var *)ret)->label); 224 itemlabel = SKINOFFSETTOPTR(databuf, ((struct skin_var *)ret)->label);
231 break; 225 break;
232#endif 226#endif
233 227
234 } 228 }
235 if (!skip && itemlabel && !strcmp(itemlabel, label)) 229 if (!skip && itemlabel && !strcmp(itemlabel, label))
236 { 230 {
237 if (old_skin_buffer != skin_buffer)
238 skin_buffer = old_skin_buffer;
239 return ret; 231 return ret;
240 } 232 }
241 233
242 if (isvplist) 234 if (isvplist)
243 list.vplist = SKINOFFSETTOPTR(skin_buffer, list.vplist->next); 235 list.vplist = SKINOFFSETTOPTR(databuf, list.vplist->next);
244 else 236 else
245 list.linkedlist = SKINOFFSETTOPTR(skin_buffer, list.linkedlist->next); 237 list.linkedlist = SKINOFFSETTOPTR(databuf, list.linkedlist->next);
246 } 238 }
247 if (old_skin_buffer != skin_buffer)
248 skin_buffer = old_skin_buffer;
249 return NULL; 239 return NULL;
250} 240}
251 241
@@ -2330,5 +2320,6 @@ bool skin_data_load(enum screen_type screen, struct wps_data *wps_data,
2330#else 2320#else
2331 wps_data->wps_loaded = wps_data->tree >= 0; 2321 wps_data->wps_loaded = wps_data->tree >= 0;
2332#endif 2322#endif
2323 skin_buffer = NULL;
2333 return true; 2324 return true;
2334} 2325}
diff --git a/apps/gui/skin_engine/skin_render.c b/apps/gui/skin_engine/skin_render.c
index 0f5e5fa106..bf7f03d738 100644
--- a/apps/gui/skin_engine/skin_render.c
+++ b/apps/gui/skin_engine/skin_render.c
@@ -84,8 +84,6 @@ static void skin_render_playlistviewer(struct playlistviewer* viewer,
84#endif 84#endif
85 85
86static char* skin_buffer; 86static char* skin_buffer;
87/* hack alert: fix skin_parser.c's skin_buffer pointer */
88void skinparser_set_buffer(char* pointer);
89 87
90static inline struct skin_element* 88static inline struct skin_element*
91get_child(OFFSETTYPE(struct skin_element**) children, int child) 89get_child(OFFSETTYPE(struct skin_element**) children, int child)
@@ -720,7 +718,6 @@ void skin_render_viewport(struct skin_element* viewport, struct gui_wps *gwps,
720 struct align_pos * align = &info.align; 718 struct align_pos * align = &info.align;
721 bool needs_update; 719 bool needs_update;
722 skin_buffer = get_skin_buffer(gwps->data); 720 skin_buffer = get_skin_buffer(gwps->data);
723 skinparser_set_buffer(skin_buffer);
724#ifdef HAVE_LCD_BITMAP 721#ifdef HAVE_LCD_BITMAP
725 /* Set images to not to be displayed */ 722 /* Set images to not to be displayed */
726 struct skin_token_list *imglist = SKINOFFSETTOPTR(skin_buffer, gwps->data->images); 723 struct skin_token_list *imglist = SKINOFFSETTOPTR(skin_buffer, gwps->data->images);
@@ -805,7 +802,6 @@ void skin_render(struct gui_wps *gwps, unsigned refresh_mode)
805 802
806 int old_refresh_mode = refresh_mode; 803 int old_refresh_mode = refresh_mode;
807 skin_buffer = get_skin_buffer(gwps->data); 804 skin_buffer = get_skin_buffer(gwps->data);
808 skinparser_set_buffer(skin_buffer);
809 805
810#ifdef HAVE_LCD_CHARCELLS 806#ifdef HAVE_LCD_CHARCELLS
811 int i; 807 int i;