summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Soffke <christian.soffke@gmail.com>2022-11-27 01:15:14 +0100
committerChristian Soffke <christian.soffke@gmail.com>2022-12-11 11:50:33 +0100
commitdfd9c10589d25a966c7e2e4dedab57c59a1987fd (patch)
treef65fcbefd97eff19ec3605aa1dfc161ad4221da6
parent90d1ac044857781c4885da8cbfde62ece344fce3 (diff)
downloadrockbox-dfd9c10589d25a966c7e2e4dedab57c59a1987fd.tar.gz
rockbox-dfd9c10589d25a966c7e2e4dedab57c59a1987fd.zip
Eliminate skin updates in between activities
1) Adds way to pop activity without refreshing the skin at the same time. Activities are sometimes popped in immediate succession, or one activity is popped before another one is pushed right away. This can lead to the UI appearing glitchy, due to an activity only appearing for a split-second, which is especially noticeable with complex skins that change the dimensions of the UI viewport depending on the current activity To fix this, prevent superfluous skin updates * when switching between: - WPS and browser - WPS and Playlist Catalogue - WPS and playlist - WPS and Settings/System/Plugins * when accessing Track Info or when displaying bookmarks using the context menu on the WPS * when switching from QuickScreen to Shortcuts Menu 2) The playlist viewer activity was pushed & popped redundantly by playlist_view. ---- NB: Behavior has remained unchanged in all instances of the code where pop_current_activity() has been replaced by pop_current_activity(ACTIVITY_REFRESH_NOW). Change-Id: I56b517b8c9dba823a9fed3a3f558d7469dcea9fd
-rw-r--r--apps/bookmark.c4
-rw-r--r--apps/gui/option_select.c2
-rw-r--r--apps/gui/quickscreen.c7
-rw-r--r--apps/gui/usb_screen.c2
-rw-r--r--apps/menus/playlist_menu.c2
-rw-r--r--apps/menus/time_menu.c2
-rw-r--r--apps/misc.c5
-rw-r--r--apps/misc.h8
-rw-r--r--apps/onplay.c33
-rw-r--r--apps/playlist_viewer.c11
-rw-r--r--apps/plugin.c2
-rw-r--r--apps/plugins/pitch_screen.c2
-rw-r--r--apps/radio/radio.c2
-rw-r--r--apps/recorder/recording.c2
-rw-r--r--apps/root_menu.c49
-rw-r--r--apps/screens.c2
-rw-r--r--apps/shortcuts.c5
-rw-r--r--apps/tree.c11
18 files changed, 119 insertions, 32 deletions
diff --git a/apps/bookmark.c b/apps/bookmark.c
index 68c10b36e7..64a4b9f761 100644
--- a/apps/bookmark.c
+++ b/apps/bookmark.c
@@ -1122,7 +1122,7 @@ int bookmark_load_menu(void)
1122 } 1122 }
1123 } 1123 }
1124 1124
1125 pop_current_activity(); 1125 pop_current_activity(ACTIVITY_REFRESH_NOW);
1126 return ret; 1126 return ret;
1127} 1127}
1128 1128
@@ -1143,7 +1143,7 @@ bool bookmark_mrb_load()
1143 ret = play_bookmark(bookmark); 1143 ret = play_bookmark(bookmark);
1144 } 1144 }
1145 1145
1146 pop_current_activity(); 1146 pop_current_activity(ACTIVITY_REFRESH_NOW);
1147 return ret; 1147 return ret;
1148} 1148}
1149 1149
diff --git a/apps/gui/option_select.c b/apps/gui/option_select.c
index ca16b5b05f..918335d6cd 100644
--- a/apps/gui/option_select.c
+++ b/apps/gui/option_select.c
@@ -574,7 +574,7 @@ bool option_screen(const struct settings_list *setting,
574 if (function == sound_get_fn(SOUND_VOLUME)) 574 if (function == sound_get_fn(SOUND_VOLUME))
575 global_status.last_volume_change = current_tick; 575 global_status.last_volume_change = current_tick;
576 } 576 }
577 pop_current_activity(); 577 pop_current_activity(ACTIVITY_REFRESH_NOW);
578 return false; 578 return false;
579} 579}
580 580
diff --git a/apps/gui/quickscreen.c b/apps/gui/quickscreen.c
index 141eb1a16b..1f32dca544 100644
--- a/apps/gui/quickscreen.c
+++ b/apps/gui/quickscreen.c
@@ -406,10 +406,13 @@ static int gui_syncquickscreen_run(struct gui_quickscreen * qs, int button_enter
406 { /* stop scrolling before exiting */ 406 { /* stop scrolling before exiting */
407 for (int j = 0; j < QUICKSCREEN_ITEM_COUNT; j++) 407 for (int j = 0; j < QUICKSCREEN_ITEM_COUNT; j++)
408 screens[i].scroll_stop_viewport(&vps[i][j]); 408 screens[i].scroll_stop_viewport(&vps[i][j]);
409 viewportmanager_theme_undo(i, true); 409 viewportmanager_theme_undo(i, !(ret & QUICKSCREEN_GOTO_SHORTCUTS_MENU));
410 } 410 }
411 411
412 pop_current_activity(); 412 if (ret & QUICKSCREEN_GOTO_SHORTCUTS_MENU) /* Eliminate flashing of parent during */
413 pop_current_activity(ACTIVITY_REFRESH_DEFERRED); /* transition to Shortcuts */
414 else
415 pop_current_activity(ACTIVITY_REFRESH_NOW);
413 416
414 return ret; 417 return ret;
415} 418}
diff --git a/apps/gui/usb_screen.c b/apps/gui/usb_screen.c
index 31321ec005..05e60067e0 100644
--- a/apps/gui/usb_screen.c
+++ b/apps/gui/usb_screen.c
@@ -315,5 +315,5 @@ void gui_usb_screen_run(bool early_usb)
315 viewportmanager_theme_undo(i, false); 315 viewportmanager_theme_undo(i, false);
316 } 316 }
317 317
318 pop_current_activity(); 318 pop_current_activity(ACTIVITY_REFRESH_NOW);
319} 319}
diff --git a/apps/menus/playlist_menu.c b/apps/menus/playlist_menu.c
index 89c93edc2e..981ec74798 100644
--- a/apps/menus/playlist_menu.c
+++ b/apps/menus/playlist_menu.c
@@ -138,6 +138,8 @@ int save_playlist_screen(struct playlist_info* playlist)
138static int playlist_view_(void) 138static int playlist_view_(void)
139{ 139{
140 playlist_viewer_ex(NULL, NULL); 140 playlist_viewer_ex(NULL, NULL);
141 FOR_NB_SCREENS(i) /* Playlist Viewer defers skin updates when popping its activity */
142 skin_update(CUSTOM_STATUSBAR, i, SKIN_REFRESH_ALL);
141 return 0; 143 return 0;
142} 144}
143MENUITEM_FUNCTION(create_playlist_item, 0, ID2P(LANG_CREATE_PLAYLIST), 145MENUITEM_FUNCTION(create_playlist_item, 0, ID2P(LANG_CREATE_PLAYLIST),
diff --git a/apps/menus/time_menu.c b/apps/menus/time_menu.c
index e37e2b5637..b44d47ff8b 100644
--- a/apps/menus/time_menu.c
+++ b/apps/menus/time_menu.c
@@ -304,7 +304,7 @@ int time_screen(void* ignored)
304#endif 304#endif
305 305
306 ret = do_menu(&time_menu, NULL, menu, false); 306 ret = do_menu(&time_menu, NULL, menu, false);
307 pop_current_activity(); 307 pop_current_activity(ACTIVITY_REFRESH_NOW);
308 /* see comments above in the button callback */ 308 /* see comments above in the button callback */
309 if (!menu_was_pressed && ret == GO_TO_PREVIOUS) 309 if (!menu_was_pressed && ret == GO_TO_PREVIOUS)
310 return 0; 310 return 0;
diff --git a/apps/misc.c b/apps/misc.c
index 950662d19a..7da3c57c73 100644
--- a/apps/misc.c
+++ b/apps/misc.c
@@ -1579,13 +1579,14 @@ void push_current_activity(enum current_activity screen)
1579 } 1579 }
1580} 1580}
1581 1581
1582void pop_current_activity(void) 1582void pop_current_activity(enum activity_refresh refresh)
1583{ 1583{
1584 current_activity_top--; 1584 current_activity_top--;
1585 FOR_NB_SCREENS(i) 1585 FOR_NB_SCREENS(i)
1586 { 1586 {
1587 skinlist_set_cfg(i, NULL); 1587 skinlist_set_cfg(i, NULL);
1588 skin_update(CUSTOM_STATUSBAR, i, SKIN_REFRESH_ALL); 1588 if (ACTIVITY_REFRESH_NOW == refresh)
1589 skin_update(CUSTOM_STATUSBAR, i, SKIN_REFRESH_ALL);
1589 } 1590 }
1590} 1591}
1591enum current_activity get_current_activity(void) 1592enum current_activity get_current_activity(void)
diff --git a/apps/misc.h b/apps/misc.h
index af520a7fd1..4f4527f686 100644
--- a/apps/misc.h
+++ b/apps/misc.h
@@ -214,8 +214,14 @@ struct mp3entry;
214int id3_get_replaygain_mode(const struct mp3entry *id3); 214int id3_get_replaygain_mode(const struct mp3entry *id3);
215void replaygain_update(void); 215void replaygain_update(void);
216 216
217enum activity_refresh
218{
219 ACTIVITY_REFRESH_DEFERRED = 0,
220 ACTIVITY_REFRESH_NOW,
221};
222
217void push_current_activity(enum current_activity screen); 223void push_current_activity(enum current_activity screen);
218void pop_current_activity(void); 224void pop_current_activity(enum activity_refresh refresh);
219enum current_activity get_current_activity(void); 225enum current_activity get_current_activity(void);
220 226
221/* format a sound value like: -1.05 dB */ 227/* format a sound value like: -1.05 dB */
diff --git a/apps/onplay.c b/apps/onplay.c
index f2dbf8b3bf..7ea6b9035b 100644
--- a/apps/onplay.c
+++ b/apps/onplay.c
@@ -144,6 +144,15 @@ static bool clipboard_clip(struct clipboard *clip, const char *path,
144/* interface function. */ 144/* interface function. */
145/* ----------------------------------------------------------------------- */ 145/* ----------------------------------------------------------------------- */
146 146
147
148static int bookmark_load_menu_wrapper(void)
149{
150 if (get_current_activity() == ACTIVITY_CONTEXTMENU) /* get rid of parent activity */
151 pop_current_activity(ACTIVITY_REFRESH_DEFERRED); /* when called from ctxt menu */
152
153 return bookmark_load_menu();
154}
155
147static int bookmark_menu_callback(int action, 156static int bookmark_menu_callback(int action,
148 const struct menu_item_ex *this_item, 157 const struct menu_item_ex *this_item,
149 struct gui_synclist *this_list); 158 struct gui_synclist *this_list);
@@ -153,7 +162,7 @@ MENUITEM_FUNCTION(bookmark_create_menu_item, 0,
153 bookmark_menu_callback, Icon_Bookmark); 162 bookmark_menu_callback, Icon_Bookmark);
154MENUITEM_FUNCTION(bookmark_load_menu_item, 0, 163MENUITEM_FUNCTION(bookmark_load_menu_item, 0,
155 ID2P(LANG_BOOKMARK_MENU_LIST), 164 ID2P(LANG_BOOKMARK_MENU_LIST),
156 bookmark_load_menu, NULL, 165 bookmark_load_menu_wrapper, NULL,
157 bookmark_menu_callback, Icon_Bookmark); 166 bookmark_menu_callback, Icon_Bookmark);
158MAKE_ONPLAYMENU(bookmark_menu, ID2P(LANG_BOOKMARK_MENU), 167MAKE_ONPLAYMENU(bookmark_menu, ID2P(LANG_BOOKMARK_MENU),
159 bookmark_menu_callback, Icon_Bookmark, 168 bookmark_menu_callback, Icon_Bookmark,
@@ -462,7 +471,18 @@ static bool save_playlist(void)
462 return false; 471 return false;
463} 472}
464 473
465extern struct menu_item_ex view_cur_playlist; /* from playlist_menu.c */ 474static int wps_view_cur_playlist(void)
475{
476 if (get_current_activity() == ACTIVITY_CONTEXTMENU) /* get rid of parent activity */
477 pop_current_activity(ACTIVITY_REFRESH_DEFERRED); /* when called from ctxt menu */
478
479 playlist_viewer_ex(NULL, NULL);
480
481 return 0;
482}
483
484MENUITEM_FUNCTION(wps_view_cur_playlist_item, 0, ID2P(LANG_VIEW_DYNAMIC_PLAYLIST),
485 wps_view_cur_playlist, NULL, NULL, Icon_NOICON);
466MENUITEM_FUNCTION(search_playlist_item, 0, ID2P(LANG_SEARCH_IN_PLAYLIST), 486MENUITEM_FUNCTION(search_playlist_item, 0, ID2P(LANG_SEARCH_IN_PLAYLIST),
467 search_playlist, NULL, NULL, Icon_Playlist); 487 search_playlist, NULL, NULL, Icon_Playlist);
468MENUITEM_FUNCTION(playlist_save_item, 0, ID2P(LANG_SAVE_DYNAMIC_PLAYLIST), 488MENUITEM_FUNCTION(playlist_save_item, 0, ID2P(LANG_SAVE_DYNAMIC_PLAYLIST),
@@ -473,7 +493,7 @@ MENUITEM_FUNCTION(playing_time_item, 0, ID2P(LANG_PLAYING_TIME),
473 playing_time, NULL, NULL, Icon_Playlist); 493 playing_time, NULL, NULL, Icon_Playlist);
474MAKE_ONPLAYMENU( wps_playlist_menu, ID2P(LANG_PLAYLIST), 494MAKE_ONPLAYMENU( wps_playlist_menu, ID2P(LANG_PLAYLIST),
475 NULL, Icon_Playlist, 495 NULL, Icon_Playlist,
476 &view_cur_playlist, &search_playlist_item, 496 &wps_view_cur_playlist_item, &search_playlist_item,
477 &playlist_save_item, &reshuffle_item, &playing_time_item 497 &playlist_save_item, &reshuffle_item, &playing_time_item
478 ); 498 );
479 499
@@ -1499,6 +1519,9 @@ MENUITEM_FUNCTION(view_cue_item, 0, ID2P(LANG_BROWSE_CUESHEET),
1499 1519
1500static int browse_id3_wrapper(void) 1520static int browse_id3_wrapper(void)
1501{ 1521{
1522 if (get_current_activity() == ACTIVITY_CONTEXTMENU) /* get rid of parent activity */
1523 pop_current_activity(ACTIVITY_REFRESH_DEFERRED); /* when called from ctxt menu */
1524
1502 if (browse_id3(audio_current_track(), 1525 if (browse_id3(audio_current_track(),
1503 playlist_get_display_index(), 1526 playlist_get_display_index(),
1504 playlist_amount())) 1527 playlist_amount()))
@@ -1954,7 +1977,9 @@ int onplay(char* file, int attr, int from, bool hotkey)
1954 else 1977 else
1955 menu = &tree_onplay_menu; 1978 menu = &tree_onplay_menu;
1956 menu_selection = do_menu(menu, NULL, NULL, false); 1979 menu_selection = do_menu(menu, NULL, NULL, false);
1957 pop_current_activity(); 1980
1981 if (get_current_activity() == ACTIVITY_CONTEXTMENU) /* Activity may have been */
1982 pop_current_activity(ACTIVITY_REFRESH_NOW); /* popped already by menu item */
1958 1983
1959 switch (menu_selection) 1984 switch (menu_selection)
1960 { 1985 {
diff --git a/apps/playlist_viewer.c b/apps/playlist_viewer.c
index 4abd3ee1c5..90a47c35ea 100644
--- a/apps/playlist_viewer.c
+++ b/apps/playlist_viewer.c
@@ -1015,7 +1015,14 @@ enum playlist_viewer_result playlist_viewer_ex(const char* filename,
1015 case ACTION_STD_QUICKSCREEN: 1015 case ACTION_STD_QUICKSCREEN:
1016 if (!global_settings.shortcuts_replaces_qs) 1016 if (!global_settings.shortcuts_replaces_qs)
1017 { 1017 {
1018 quick_screen_quick(button); 1018 if (quick_screen_quick(button) ==
1019 QUICKSCREEN_GOTO_SHORTCUTS_MENU) /* currently disabled */
1020 {
1021 /* QuickScreen defers skin updates when popping its activity
1022 to switch to Shortcuts Menu, so make up for that here: */
1023 FOR_NB_SCREENS(i)
1024 skin_update(CUSTOM_STATUSBAR, i, SKIN_REFRESH_ALL);
1025 }
1019 update_playlist(true); 1026 update_playlist(true);
1020 prepare_lists(&playlist_lists); 1027 prepare_lists(&playlist_lists);
1021 } 1028 }
@@ -1092,7 +1099,7 @@ exit:
1092static void close_playlist_viewer(void) 1099static void close_playlist_viewer(void)
1093{ 1100{
1094 talk_shutup(); 1101 talk_shutup();
1095 pop_current_activity(); 1102 pop_current_activity(ACTIVITY_REFRESH_DEFERRED);
1096 if (viewer.playlist) 1103 if (viewer.playlist)
1097 { 1104 {
1098 if (viewer.initial_selection) 1105 if (viewer.initial_selection)
diff --git a/apps/plugin.c b/apps/plugin.c
index 128b52ea2d..b8897c95ee 100644
--- a/apps/plugin.c
+++ b/apps/plugin.c
@@ -919,7 +919,7 @@ int plugin_load(const char* plugin, const void* parameter)
919 int rc = p_hdr->entry_point(parameter); 919 int rc = p_hdr->entry_point(parameter);
920 920
921 tree_unlock_cache(tree_get_context()); 921 tree_unlock_cache(tree_get_context());
922 pop_current_activity(); 922 pop_current_activity(ACTIVITY_REFRESH_NOW);
923 923
924 if (!pfn_tsr_exit) 924 if (!pfn_tsr_exit)
925 { /* close handle if plugin is no tsr one */ 925 { /* close handle if plugin is no tsr one */
diff --git a/apps/plugins/pitch_screen.c b/apps/plugins/pitch_screen.c
index e24e0240a2..76e7fa9775 100644
--- a/apps/plugins/pitch_screen.c
+++ b/apps/plugins/pitch_screen.c
@@ -1109,7 +1109,7 @@ int gui_syncpitchscreen_run(void)
1109 } 1109 }
1110 1110
1111 //rb->pcmbuf_set_low_latency(false); 1111 //rb->pcmbuf_set_low_latency(false);
1112 //pop_current_activity(); 1112 //pop_current_activity(ACTIVITY_REFRESH_NOW);
1113 1113
1114 /* Clean up */ 1114 /* Clean up */
1115 FOR_NB_SCREENS(i) 1115 FOR_NB_SCREENS(i)
diff --git a/apps/radio/radio.c b/apps/radio/radio.c
index bf8ad865dd..a02d4429fa 100644
--- a/apps/radio/radio.c
+++ b/apps/radio/radio.c
@@ -729,7 +729,7 @@ void radio_screen(void)
729 cpu_idle_mode(false); 729 cpu_idle_mode(false);
730#endif 730#endif
731 fms_fix_displays(FMS_EXIT); 731 fms_fix_displays(FMS_EXIT);
732 pop_current_activity(); 732 pop_current_activity(ACTIVITY_REFRESH_NOW);
733 in_screen = false; 733 in_screen = false;
734} /* radio_screen */ 734} /* radio_screen */
735 735
diff --git a/apps/recorder/recording.c b/apps/recorder/recording.c
index 6c52adf5d3..374583cc21 100644
--- a/apps/recorder/recording.c
+++ b/apps/recorder/recording.c
@@ -1844,7 +1844,7 @@ rec_abort:
1844#endif 1844#endif
1845 1845
1846 settings_save(); 1846 settings_save();
1847 pop_current_activity(); 1847 pop_current_activity(ACTIVITY_REFRESH_NOW);
1848 return (rec_status & RCSTAT_BEEN_IN_USB_MODE) != 0; 1848 return (rec_status & RCSTAT_BEEN_IN_USB_MODE) != 0;
1849} /* recording_screen */ 1849} /* recording_screen */
1850 1850
diff --git a/apps/root_menu.c b/apps/root_menu.c
index 80b5be1d36..3553b794fa 100644
--- a/apps/root_menu.c
+++ b/apps/root_menu.c
@@ -276,7 +276,14 @@ static int browser(void* param)
276 276
277 browse_context_init(&browse, filter, 0, NULL, NOICON, folder, NULL); 277 browse_context_init(&browse, filter, 0, NULL, NOICON, folder, NULL);
278 ret_val = rockbox_browse(&browse); 278 ret_val = rockbox_browse(&browse);
279 pop_current_activity(); 279
280 if (ret_val == GO_TO_WPS
281 || ret_val == GO_TO_PREVIOUS_MUSIC
282 || ret_val == GO_TO_PLUGIN)
283 pop_current_activity(ACTIVITY_REFRESH_DEFERRED);
284 else
285 pop_current_activity(ACTIVITY_REFRESH_NOW);
286
280 switch ((intptr_t)param) 287 switch ((intptr_t)param)
281 { 288 {
282 case GO_TO_FILEBROWSER: 289 case GO_TO_FILEBROWSER:
@@ -336,7 +343,23 @@ static int wpsscrn(void* param)
336 { 343 {
337 splash(HZ*2, ID2P(LANG_NOTHING_TO_RESUME)); 344 splash(HZ*2, ID2P(LANG_NOTHING_TO_RESUME));
338 } 345 }
339 pop_current_activity(); 346
347 if (ret_val == GO_TO_PLAYLIST_VIEWER
348 || ret_val == GO_TO_PLUGIN
349 || ret_val == GO_TO_WPS
350 || ret_val == GO_TO_PREVIOUS_MUSIC
351 || ret_val == GO_TO_PREVIOUS_BROWSER
352 || (ret_val == GO_TO_PREVIOUS
353 && (last_screen == GO_TO_MAINMENU /* Settings */
354 || last_screen == GO_TO_BROWSEPLUGINS
355 || last_screen == GO_TO_SYSTEM_SCREEN
356 || last_screen == GO_TO_PLAYLISTS_SCREEN)))
357 {
358 pop_current_activity(ACTIVITY_REFRESH_DEFERRED);
359 }
360 else
361 pop_current_activity(ACTIVITY_REFRESH_NOW);
362
340 return ret_val; 363 return ret_val;
341} 364}
342#if CONFIG_TUNER 365#if CONFIG_TUNER
@@ -370,10 +393,14 @@ static int playlist_view_catalog(void * param)
370 (void)param; 393 (void)param;
371 push_current_activity(ACTIVITY_PLAYLISTBROWSER); 394 push_current_activity(ACTIVITY_PLAYLISTBROWSER);
372 bool item_was_selected = catalog_view_playlists(); 395 bool item_was_selected = catalog_view_playlists();
373 pop_current_activity(); 396
374 if (item_was_selected) 397 if (item_was_selected)
398 {
399 pop_current_activity(ACTIVITY_REFRESH_DEFERRED);
375 return GO_TO_WPS; 400 return GO_TO_WPS;
376 return GO_TO_PREVIOUS; 401 }
402 pop_current_activity(ACTIVITY_REFRESH_NOW);
403 return GO_TO_ROOT;
377} 404}
378 405
379static int playlist_view(void * param) 406static int playlist_view(void * param)
@@ -381,9 +408,7 @@ static int playlist_view(void * param)
381 (void)param; 408 (void)param;
382 int val; 409 int val;
383 410
384 push_current_activity(ACTIVITY_PLAYLISTVIEWER);
385 val = playlist_viewer(); 411 val = playlist_viewer();
386 pop_current_activity();
387 switch (val) 412 switch (val)
388 { 413 {
389 case PLAYLIST_VIEWER_MAINMENU: 414 case PLAYLIST_VIEWER_MAINMENU:
@@ -682,7 +707,15 @@ static inline int load_screen(int screen)
682 ret_val = items[screen].function(items[screen].param); 707 ret_val = items[screen].function(items[screen].param);
683 708
684 if (activity != ACTIVITY_UNKNOWN) 709 if (activity != ACTIVITY_UNKNOWN)
685 pop_current_activity(); 710 {
711 if (ret_val == GO_TO_WPS
712 || ret_val == GO_TO_PREVIOUS_MUSIC)
713 {
714 pop_current_activity(ACTIVITY_REFRESH_DEFERRED);
715 }
716 else
717 pop_current_activity(ACTIVITY_REFRESH_NOW);
718 }
686 719
687 last_screen = screen; 720 last_screen = screen;
688 if (ret_val == GO_TO_PREVIOUS) 721 if (ret_val == GO_TO_PREVIOUS)
@@ -708,7 +741,7 @@ static int load_context_screen(int selection)
708 741
709 if (context_menu) 742 if (context_menu)
710 retval = do_menu(context_menu, NULL, NULL, false); 743 retval = do_menu(context_menu, NULL, NULL, false);
711 pop_current_activity(); 744 pop_current_activity(ACTIVITY_REFRESH_NOW);
712 return retval; 745 return retval;
713} 746}
714 747
diff --git a/apps/screens.c b/apps/screens.c
index db24e534c1..2ffdf68023 100644
--- a/apps/screens.c
+++ b/apps/screens.c
@@ -733,7 +733,7 @@ bool browse_id3(struct mp3entry *id3, int playlist_display_index, int playlist_a
733 } 733 }
734 } 734 }
735 735
736 pop_current_activity(); 736 pop_current_activity(ACTIVITY_REFRESH_NOW);
737 return ret; 737 return ret;
738} 738}
739 739
diff --git a/apps/shortcuts.c b/apps/shortcuts.c
index e52e38eb06..98edcf653e 100644
--- a/apps/shortcuts.c
+++ b/apps/shortcuts.c
@@ -718,7 +718,10 @@ int do_shortcut_menu(void *ignored)
718 } 718 }
719 } 719 }
720 } 720 }
721 pop_current_activity(); 721 if (GO_TO_PLUGIN == done)
722 pop_current_activity(ACTIVITY_REFRESH_DEFERRED);
723 else
724 pop_current_activity(ACTIVITY_REFRESH_NOW);
722 --buflib_move_lock; 725 --buflib_move_lock;
723 726
724 return done; 727 return done;
diff --git a/apps/tree.c b/apps/tree.c
index fa745319a9..3684e395a1 100644
--- a/apps/tree.c
+++ b/apps/tree.c
@@ -763,7 +763,7 @@ static int dirbrowse(void)
763 else if (ret == QUICKSCREEN_GOTO_SHORTCUTS_MENU) 763 else if (ret == QUICKSCREEN_GOTO_SHORTCUTS_MENU)
764 enter_shortcuts_menu = true; 764 enter_shortcuts_menu = true;
765 } 765 }
766 766
767 if (enter_shortcuts_menu && *tc.dirfilter < NUM_FILTER_MODES) 767 if (enter_shortcuts_menu && *tc.dirfilter < NUM_FILTER_MODES)
768 { 768 {
769 int last_screen = global_status.last_screen; 769 int last_screen = global_status.last_screen;
@@ -774,7 +774,14 @@ static int dirbrowse(void)
774 else 774 else
775 return shortcut_ret; 775 return shortcut_ret;
776 } 776 }
777 777 else if (enter_shortcuts_menu) /* currently disabled */
778 {
779 /* QuickScreen defers skin updates, popping its activity, when
780 switching to Shortcuts Menu, so make up for that here: */
781 FOR_NB_SCREENS(i)
782 skin_update(CUSTOM_STATUSBAR, i, SKIN_REFRESH_ALL);
783 }
784
778 restore = true; 785 restore = true;
779 break; 786 break;
780 } 787 }