diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/gui/viewport.c | 77 | ||||
-rw-r--r-- | apps/menus/theme_menu.c | 1 |
2 files changed, 41 insertions, 37 deletions
diff --git a/apps/gui/viewport.c b/apps/gui/viewport.c index bb4c291cc0..78d517d58b 100644 --- a/apps/gui/viewport.c +++ b/apps/gui/viewport.c | |||
@@ -60,7 +60,7 @@ static int statusbar_enabled = 0; | |||
60 | 60 | ||
61 | static struct { | 61 | static struct { |
62 | struct viewport* vp; | 62 | struct viewport* vp; |
63 | int active; | 63 | int active[NB_SCREENS]; |
64 | } ui_vp_info; | 64 | } ui_vp_info; |
65 | 65 | ||
66 | static struct viewport custom_vp[NB_SCREENS]; | 66 | static struct viewport custom_vp[NB_SCREENS]; |
@@ -68,7 +68,7 @@ static struct viewport custom_vp[NB_SCREENS]; | |||
68 | /* callbacks for GUI_EVENT_* events */ | 68 | /* callbacks for GUI_EVENT_* events */ |
69 | static void viewportmanager_ui_vp_changed(void *param); | 69 | static void viewportmanager_ui_vp_changed(void *param); |
70 | static void statusbar_toggled(void* param); | 70 | static void statusbar_toggled(void* param); |
71 | static int viewport_init_ui_vp(void); | 71 | static unsigned viewport_init_ui_vp(void); |
72 | #endif | 72 | #endif |
73 | static void viewportmanager_redraw(void* data); | 73 | static void viewportmanager_redraw(void* data); |
74 | 74 | ||
@@ -148,12 +148,15 @@ void viewport_set_defaults(struct viewport *vp, enum screen_type screen) | |||
148 | 148 | ||
149 | void viewportmanager_init(void) | 149 | void viewportmanager_init(void) |
150 | { | 150 | { |
151 | viewportmanager_set_statusbar(VP_SB_ALLSCREENS); | ||
152 | #ifdef HAVE_LCD_BITMAP | 151 | #ifdef HAVE_LCD_BITMAP |
152 | int retval, i; | ||
153 | add_event(GUI_EVENT_STATUSBAR_TOGGLE, false, statusbar_toggled); | 153 | add_event(GUI_EVENT_STATUSBAR_TOGGLE, false, statusbar_toggled); |
154 | ui_vp_info.active = viewport_init_ui_vp(); | 154 | retval = viewport_init_ui_vp(); |
155 | FOR_NB_SCREENS(i) | ||
156 | ui_vp_info.active[i] = retval & BIT_N(i); | ||
155 | ui_vp_info.vp = custom_vp; | 157 | ui_vp_info.vp = custom_vp; |
156 | #endif | 158 | #endif |
159 | viewportmanager_set_statusbar(VP_SB_ALLSCREENS); | ||
157 | } | 160 | } |
158 | 161 | ||
159 | int viewportmanager_get_statusbar(void) | 162 | int viewportmanager_get_statusbar(void) |
@@ -204,10 +207,15 @@ static void statusbar_toggled(void* param) | |||
204 | 207 | ||
205 | void viewportmanager_theme_changed(int which) | 208 | void viewportmanager_theme_changed(int which) |
206 | { | 209 | { |
210 | int i; | ||
207 | if (which & THEME_UI_VIEWPORT) | 211 | if (which & THEME_UI_VIEWPORT) |
208 | { | 212 | { |
213 | int retval = viewport_init_ui_vp(); | ||
209 | /* reset the ui viewport */ | 214 | /* reset the ui viewport */ |
210 | if ((ui_vp_info.active = viewport_init_ui_vp())) | 215 | FOR_NB_SCREENS(i) |
216 | ui_vp_info.active[i] = retval & BIT_N(i); | ||
217 | |||
218 | if (retval != 0) | ||
211 | add_event(GUI_EVENT_REFRESH, false, viewportmanager_ui_vp_changed); | 219 | add_event(GUI_EVENT_REFRESH, false, viewportmanager_ui_vp_changed); |
212 | else | 220 | else |
213 | remove_event(GUI_EVENT_REFRESH, viewportmanager_ui_vp_changed); | 221 | remove_event(GUI_EVENT_REFRESH, viewportmanager_ui_vp_changed); |
@@ -216,23 +224,24 @@ void viewportmanager_theme_changed(int which) | |||
216 | } | 224 | } |
217 | if (which & THEME_STATUSBAR) | 225 | if (which & THEME_STATUSBAR) |
218 | { | 226 | { |
219 | statusbar_enabled = 0; | 227 | statusbar_enabled = VP_SB_HIDE_ALL; |
220 | if (global_settings.statusbar != STATUSBAR_OFF) | 228 | |
221 | statusbar_enabled = VP_SB_ONSCREEN(SCREEN_MAIN); | 229 | FOR_NB_SCREENS(i) |
222 | #ifdef HAVE_REMOTE_LCD | 230 | { |
223 | if (global_settings.remote_statusbar != STATUSBAR_OFF) | 231 | if (statusbar_position(i) != STATUSBAR_OFF) |
224 | statusbar_enabled |= VP_SB_ONSCREEN(SCREEN_REMOTE); | 232 | statusbar_enabled |= VP_SB_ONSCREEN(i); |
225 | #endif | 233 | } |
226 | if (statusbar_enabled) | 234 | |
235 | if (statusbar_enabled != VP_SB_HIDE_ALL) | ||
227 | add_event(GUI_EVENT_ACTIONUPDATE, false, viewportmanager_redraw); | 236 | add_event(GUI_EVENT_ACTIONUPDATE, false, viewportmanager_redraw); |
228 | else | 237 | else |
229 | remove_event(GUI_EVENT_ACTIONUPDATE, viewportmanager_redraw); | 238 | remove_event(GUI_EVENT_ACTIONUPDATE, viewportmanager_redraw); |
230 | 239 | ||
231 | /* reposition viewport to fit statusbar, only if not using the ui vp */ | 240 | /* reposition viewport to fit statusbar, only if not using the ui vp */ |
232 | if (!ui_vp_info.active) | 241 | |
242 | FOR_NB_SCREENS(i) | ||
233 | { | 243 | { |
234 | int i; | 244 | if (!ui_vp_info.active[i]) |
235 | FOR_NB_SCREENS(i) | ||
236 | viewport_set_fullscreen(&custom_vp[i], i); | 245 | viewport_set_fullscreen(&custom_vp[i], i); |
237 | } | 246 | } |
238 | } | 247 | } |
@@ -365,35 +374,29 @@ const char* viewport_parse_viewport(struct viewport *vp, | |||
365 | /* | 374 | /* |
366 | * (re)parse the UI vp from the settings | 375 | * (re)parse the UI vp from the settings |
367 | * - Returns | 376 | * - Returns |
368 | * 0 if no UI vp is used | 377 | * 0 if no UI vp is used at all |
369 | * >0 if it's used at least partly (on multiscreen targets) | 378 | * else the bit for the screen (1<<screen) is set |
370 | * NB_SCREENS if all screens have a UI vp | ||
371 | */ | 379 | */ |
372 | static int viewport_init_ui_vp(void) | 380 | static unsigned viewport_init_ui_vp(void) |
373 | { | 381 | { |
374 | int screen, ret = NB_SCREENS; | 382 | int screen; |
383 | unsigned ret = 0; | ||
384 | char *setting; | ||
375 | FOR_NB_SCREENS(screen) | 385 | FOR_NB_SCREENS(screen) |
376 | { | 386 | { |
377 | #ifdef HAVE_REMOTE_LCD | 387 | #ifdef HAVE_REMOTE_LCD |
378 | if ((screen == SCREEN_REMOTE)) | 388 | if ((screen == SCREEN_REMOTE)) |
379 | { | 389 | setting = global_settings.remote_ui_vp_config; |
380 | if(!(viewport_parse_viewport(&custom_vp[screen], screen, | ||
381 | global_settings.remote_ui_vp_config, ','))) | ||
382 | { | ||
383 | viewport_set_fullscreen(&custom_vp[screen], screen); | ||
384 | ret--; | ||
385 | } | ||
386 | } | ||
387 | else | 390 | else |
388 | #endif | 391 | #endif |
389 | { | 392 | setting = global_settings.ui_vp_config; |
390 | if (!(viewport_parse_viewport(&custom_vp[screen], screen, | 393 | |
391 | global_settings.ui_vp_config, ','))) | 394 | |
392 | { | 395 | if (!(viewport_parse_viewport(&custom_vp[screen], screen, |
393 | viewport_set_fullscreen(&custom_vp[screen], screen); | 396 | setting, ','))) |
394 | ret--; | 397 | viewport_set_fullscreen(&custom_vp[screen], screen); |
395 | } | 398 | else |
396 | } | 399 | ret |= BIT_N(screen); |
397 | } | 400 | } |
398 | return ret; | 401 | return ret; |
399 | } | 402 | } |
diff --git a/apps/menus/theme_menu.c b/apps/menus/theme_menu.c index f2e4579864..b4505de4b3 100644 --- a/apps/menus/theme_menu.c +++ b/apps/menus/theme_menu.c | |||
@@ -157,6 +157,7 @@ static int statusbar_callback_ex(int action,const struct menu_item_ex *this_item | |||
157 | { | 157 | { |
158 | case ACTION_ENTER_MENUITEM: | 158 | case ACTION_ENTER_MENUITEM: |
159 | old_bar[screen] = statusbar_position(screen); | 159 | old_bar[screen] = statusbar_position(screen); |
160 | break; | ||
160 | case ACTION_EXIT_MENUITEM: | 161 | case ACTION_EXIT_MENUITEM: |
161 | gui_statusbar_changed(screen, old_bar[screen]); | 162 | gui_statusbar_changed(screen, old_bar[screen]); |
162 | send_event(GUI_EVENT_STATUSBAR_TOGGLE, NULL); | 163 | send_event(GUI_EVENT_STATUSBAR_TOGGLE, NULL); |