summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/gui/quickscreen.c25
-rw-r--r--apps/gui/quickscreen.h7
-rw-r--r--apps/gui/wps.c20
-rw-r--r--apps/keymaps/keymap-agptekrocker.c19
-rw-r--r--apps/keymaps/keymap-clip.c2
-rw-r--r--apps/keymaps/keymap-erosq.c1
-rw-r--r--apps/keymaps/keymap-fiiom3k.c3
-rw-r--r--apps/keymaps/keymap-fuzeplus.c3
-rw-r--r--apps/keymaps/keymap-ipod.c2
-rw-r--r--apps/keymaps/keymap-nwz.c3
-rw-r--r--apps/keymaps/keymap-nwza860.c3
-rw-r--r--apps/keymaps/keymap-zen.c3
-rw-r--r--apps/menu.c7
-rw-r--r--apps/tree.c28
14 files changed, 83 insertions, 43 deletions
diff --git a/apps/gui/quickscreen.c b/apps/gui/quickscreen.c
index e403e13e6c..141eb1a16b 100644
--- a/apps/gui/quickscreen.c
+++ b/apps/gui/quickscreen.c
@@ -320,13 +320,13 @@ static int quickscreen_touchscreen_button(void)
320} 320}
321#endif 321#endif
322 322
323static bool gui_syncquickscreen_run(struct gui_quickscreen * qs, int button_enter, bool *usb) 323static int gui_syncquickscreen_run(struct gui_quickscreen * qs, int button_enter, bool *usb)
324{ 324{
325 int button; 325 int button;
326 struct viewport parent[NB_SCREENS]; 326 struct viewport parent[NB_SCREENS];
327 struct viewport vps[NB_SCREENS][QUICKSCREEN_ITEM_COUNT]; 327 struct viewport vps[NB_SCREENS][QUICKSCREEN_ITEM_COUNT];
328 struct viewport vp_icons[NB_SCREENS]; 328 struct viewport vp_icons[NB_SCREENS];
329 bool changed = false; 329 int ret = QUICKSCREEN_OK;
330 /* To quit we need either : 330 /* To quit we need either :
331 * - a second press on the button that made us enter 331 * - a second press on the button that made us enter
332 * - an action taken while pressing the enter button, 332 * - an action taken while pressing the enter button,
@@ -367,7 +367,7 @@ static bool gui_syncquickscreen_run(struct gui_quickscreen * qs, int button_ente
367 } 367 }
368 if (gui_quickscreen_do_button(qs, button)) 368 if (gui_quickscreen_do_button(qs, button))
369 { 369 {
370 changed = true; 370 ret |= QUICKSCREEN_CHANGED;
371 can_quit = true; 371 can_quit = true;
372 FOR_NB_SCREENS(i) 372 FOR_NB_SCREENS(i)
373 gui_quickscreen_draw(qs, &screens[i], &parent[i], 373 gui_quickscreen_draw(qs, &screens[i], &parent[i],
@@ -389,6 +389,11 @@ static bool gui_syncquickscreen_run(struct gui_quickscreen * qs, int button_ente
389 FOR_NB_SCREENS(i) 389 FOR_NB_SCREENS(i)
390 skin_update(CUSTOM_STATUSBAR, i, SKIN_REFRESH_NON_STATIC); 390 skin_update(CUSTOM_STATUSBAR, i, SKIN_REFRESH_NON_STATIC);
391 } 391 }
392 else if (button == ACTION_STD_CONTEXT)
393 {
394 ret |= QUICKSCREEN_GOTO_SHORTCUTS_MENU;
395 break;
396 }
392 if ((button == button_enter) && can_quit) 397 if ((button == button_enter) && can_quit)
393 break; 398 break;
394 399
@@ -405,7 +410,8 @@ static bool gui_syncquickscreen_run(struct gui_quickscreen * qs, int button_ente
405 } 410 }
406 411
407 pop_current_activity(); 412 pop_current_activity();
408 return changed; 413
414 return ret;
409} 415}
410 416
411static const struct settings_list *get_setting(int gs_value, 417static const struct settings_list *get_setting(int gs_value,
@@ -427,9 +433,6 @@ int quick_screen_quick(int button_enter)
427#endif 433#endif
428 bool usb = false; 434 bool usb = false;
429 435
430 if (global_settings.shortcuts_replaces_qs)
431 return do_shortcut_menu(NULL);
432
433 qs.items[QUICKSCREEN_TOP] = 436 qs.items[QUICKSCREEN_TOP] =
434 get_setting(global_settings.qs_items[QUICKSCREEN_TOP], NULL); 437 get_setting(global_settings.qs_items[QUICKSCREEN_TOP], NULL);
435 qs.items[QUICKSCREEN_LEFT] = 438 qs.items[QUICKSCREEN_LEFT] =
@@ -442,7 +445,8 @@ int quick_screen_quick(int button_enter)
442 get_setting(global_settings.qs_items[QUICKSCREEN_BOTTOM], NULL); 445 get_setting(global_settings.qs_items[QUICKSCREEN_BOTTOM], NULL);
443 446
444 qs.callback = NULL; 447 qs.callback = NULL;
445 if (gui_syncquickscreen_run(&qs, button_enter, &usb)) 448 int ret = gui_syncquickscreen_run(&qs, button_enter, &usb);
449 if (ret & QUICKSCREEN_CHANGED)
446 { 450 {
447 settings_save(); 451 settings_save();
448 /* make sure repeat/shuffle/any other nasty ones get updated */ 452 /* make sure repeat/shuffle/any other nasty ones get updated */
@@ -465,7 +469,10 @@ int quick_screen_quick(int button_enter)
465 set_albumart_mode(global_settings.album_art); 469 set_albumart_mode(global_settings.album_art);
466#endif 470#endif
467 } 471 }
468 return (usb ? 1:0); 472 if (usb)
473 return QUICKSCREEN_IN_USB;
474 return ret & QUICKSCREEN_GOTO_SHORTCUTS_MENU ? QUICKSCREEN_GOTO_SHORTCUTS_MENU :
475 QUICKSCREEN_OK;
469} 476}
470 477
471/* stuff to make the quickscreen configurable */ 478/* stuff to make the quickscreen configurable */
diff --git a/apps/gui/quickscreen.h b/apps/gui/quickscreen.h
index 015928ee8a..6082b5a883 100644
--- a/apps/gui/quickscreen.h
+++ b/apps/gui/quickscreen.h
@@ -36,6 +36,13 @@ enum quickscreen_item {
36 QUICKSCREEN_ITEM_COUNT, 36 QUICKSCREEN_ITEM_COUNT,
37}; 37};
38 38
39enum quickscreen_return {
40 QUICKSCREEN_OK = 0,
41 QUICKSCREEN_IN_USB = 0x1,
42 QUICKSCREEN_GOTO_SHORTCUTS_MENU = 0x2,
43 QUICKSCREEN_CHANGED = 0x4,
44};
45
39struct gui_quickscreen 46struct gui_quickscreen
40{ 47{
41 const struct settings_list *items[QUICKSCREEN_ITEM_COUNT]; 48 const struct settings_list *items[QUICKSCREEN_ITEM_COUNT];
diff --git a/apps/gui/wps.c b/apps/gui/wps.c
index 2587542b00..5b973a2199 100644
--- a/apps/gui/wps.c
+++ b/apps/gui/wps.c
@@ -53,6 +53,7 @@
53#include "root_menu.h" 53#include "root_menu.h"
54#include "backdrop.h" 54#include "backdrop.h"
55#include "quickscreen.h" 55#include "quickscreen.h"
56#include "shortcuts.h"
56#include "pitchscreen.h" 57#include "pitchscreen.h"
57#include "appevents.h" 58#include "appevents.h"
58#include "viewport.h" 59#include "viewport.h"
@@ -839,15 +840,24 @@ long gui_wps_show(void)
839 case ACTION_WPS_QUICKSCREEN: 840 case ACTION_WPS_QUICKSCREEN:
840 { 841 {
841 gwps_leave_wps(); 842 gwps_leave_wps();
842 if (global_settings.shortcuts_replaces_qs) 843 bool enter_shortcuts_menu = global_settings.shortcuts_replaces_qs;
844 if (!enter_shortcuts_menu)
843 { 845 {
844 global_status.last_screen = GO_TO_SHORTCUTMENU;
845 int ret = quick_screen_quick(button); 846 int ret = quick_screen_quick(button);
847 if (ret == QUICKSCREEN_IN_USB)
848 return GO_TO_ROOT;
849 else if (ret == QUICKSCREEN_GOTO_SHORTCUTS_MENU)
850 enter_shortcuts_menu = true;
851 else
852 restore = true;
853 }
854
855 if (enter_shortcuts_menu)
856 {
857 global_status.last_screen = GO_TO_SHORTCUTMENU;
858 int ret = do_shortcut_menu(NULL);
846 return (ret == GO_TO_PREVIOUS ? GO_TO_WPS : ret); 859 return (ret == GO_TO_PREVIOUS ? GO_TO_WPS : ret);
847 } 860 }
848 else if (quick_screen_quick(button) > 0)
849 return GO_TO_ROOT;
850 restore = true;
851 } 861 }
852 break; 862 break;
853#endif /* HAVE_QUICKSCREEN */ 863#endif /* HAVE_QUICKSCREEN */
diff --git a/apps/keymaps/keymap-agptekrocker.c b/apps/keymaps/keymap-agptekrocker.c
index 1fb8465b0a..d016b3b323 100644
--- a/apps/keymaps/keymap-agptekrocker.c
+++ b/apps/keymaps/keymap-agptekrocker.c
@@ -139,15 +139,16 @@ static const struct button_mapping button_context_yesno[] = {
139}; /* button_context_settings_yesno */ 139}; /* button_context_settings_yesno */
140 140
141static const struct button_mapping button_context_quickscreen[] = { 141static const struct button_mapping button_context_quickscreen[] = {
142 { ACTION_QS_TOP, BUTTON_UP|BUTTON_REL, BUTTON_NONE }, 142 { ACTION_QS_TOP, BUTTON_UP|BUTTON_REL, BUTTON_NONE },
143 { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 143 { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
144 { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REL, BUTTON_NONE }, 144 { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REL, BUTTON_NONE },
145 { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 145 { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
146 { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE }, 146 { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE },
147 { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 147 { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
148 { ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE }, 148 { ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE },
149 { ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 149 { ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
150 { ACTION_STD_CANCEL, BUTTON_SELECT, BUTTON_NONE }, 150 { ACTION_STD_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT },
151 { ACTION_STD_CANCEL, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
151 152
152 LAST_ITEM_IN_LIST 153 LAST_ITEM_IN_LIST
153}; /* button_context_quickscreen */ 154}; /* button_context_quickscreen */
diff --git a/apps/keymaps/keymap-clip.c b/apps/keymaps/keymap-clip.c
index 3c92f03a07..917f769890 100644
--- a/apps/keymaps/keymap-clip.c
+++ b/apps/keymaps/keymap-clip.c
@@ -179,7 +179,7 @@ static const struct button_mapping button_context_quickscreen[] = {
179 { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE }, 179 { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE },
180 { ACTION_STD_CANCEL, BUTTON_POWER|BUTTON_REL, BUTTON_NONE }, 180 { ACTION_STD_CANCEL, BUTTON_POWER|BUTTON_REL, BUTTON_NONE },
181 { ACTION_STD_CANCEL, BUTTON_HOME, BUTTON_NONE }, 181 { ACTION_STD_CANCEL, BUTTON_HOME, BUTTON_NONE },
182 { ACTION_STD_CANCEL, BUTTON_SELECT, BUTTON_NONE }, 182 { ACTION_STD_CANCEL, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
183 { ACTION_QS_TOP, BUTTON_UP|BUTTON_REL, BUTTON_NONE }, 183 { ACTION_QS_TOP, BUTTON_UP|BUTTON_REL, BUTTON_NONE },
184 { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 184 { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
185 { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REL, BUTTON_NONE }, 185 { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REL, BUTTON_NONE },
diff --git a/apps/keymaps/keymap-erosq.c b/apps/keymaps/keymap-erosq.c
index d486423a53..c69e4babdb 100644
--- a/apps/keymaps/keymap-erosq.c
+++ b/apps/keymaps/keymap-erosq.c
@@ -130,6 +130,7 @@ static const struct button_mapping button_context_quickscreen[] = {
130 { ACTION_QS_DOWN, BUTTON_NEXT|BUTTON_REL, BUTTON_NONE }, 130 { ACTION_QS_DOWN, BUTTON_NEXT|BUTTON_REL, BUTTON_NONE },
131 { ACTION_QS_DOWN, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE }, 131 { ACTION_QS_DOWN, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE },
132 { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE }, 132 { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE },
133 { ACTION_STD_CONTEXT,BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU },
133 134
134 LAST_ITEM_IN_LIST 135 LAST_ITEM_IN_LIST
135}; /* button_context_quickscreen */ 136}; /* button_context_quickscreen */
diff --git a/apps/keymaps/keymap-fiiom3k.c b/apps/keymaps/keymap-fiiom3k.c
index d0fbbb2e98..a9744b908b 100644
--- a/apps/keymaps/keymap-fiiom3k.c
+++ b/apps/keymaps/keymap-fiiom3k.c
@@ -175,7 +175,8 @@ static const struct button_mapping button_context_quickscreen[] = {
175 {ACTION_QS_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE}, 175 {ACTION_QS_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE},
176 {ACTION_QS_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE}, 176 {ACTION_QS_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE},
177 {ACTION_QS_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE}, 177 {ACTION_QS_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE},
178 {ACTION_STD_CANCEL, BUTTON_SELECT, BUTTON_NONE}, 178 {ACTION_STD_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT},
179 {ACTION_STD_CANCEL, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT},
179 {ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE}, 180 {ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE},
180 {ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE}, 181 {ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE},
181 {ACTION_STD_CANCEL, BUTTON_MENU, BUTTON_NONE}, 182 {ACTION_STD_CANCEL, BUTTON_MENU, BUTTON_NONE},
diff --git a/apps/keymaps/keymap-fuzeplus.c b/apps/keymaps/keymap-fuzeplus.c
index 6601316469..9ce5a79fc2 100644
--- a/apps/keymaps/keymap-fuzeplus.c
+++ b/apps/keymaps/keymap-fuzeplus.c
@@ -128,7 +128,8 @@ static const struct button_mapping button_context_keyboard[] = {
128}; /* button_context_keyboard */ 128}; /* button_context_keyboard */
129 129
130static const struct button_mapping button_context_quickscreen[] = { 130static const struct button_mapping button_context_quickscreen[] = {
131 { ACTION_STD_CANCEL, BUTTON_SELECT, BUTTON_NONE }, 131 { ACTION_STD_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT },
132 { ACTION_STD_CANCEL, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
132 { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE }, 133 { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE },
133 { ACTION_STD_CANCEL, BUTTON_PLAYPAUSE, BUTTON_NONE }, 134 { ACTION_STD_CANCEL, BUTTON_PLAYPAUSE, BUTTON_NONE },
134 { ACTION_STD_CANCEL, BUTTON_BOTTOMRIGHT, BUTTON_NONE }, 135 { ACTION_STD_CANCEL, BUTTON_BOTTOMRIGHT, BUTTON_NONE },
diff --git a/apps/keymaps/keymap-ipod.c b/apps/keymaps/keymap-ipod.c
index e3a17fffba..6d06bd0244 100644
--- a/apps/keymaps/keymap-ipod.c
+++ b/apps/keymaps/keymap-ipod.c
@@ -132,7 +132,7 @@ static const struct button_mapping button_context_quickscreen[] = {
132 { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 132 { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
133 { ACTION_QS_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, 133 { ACTION_QS_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
134 { ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 134 { ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
135 { ACTION_STD_CANCEL, BUTTON_SELECT, BUTTON_NONE }, 135 { ACTION_STD_CANCEL, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
136 { ACTION_QS_VOLDOWN, BUTTON_SCROLL_BACK, BUTTON_NONE }, 136 { ACTION_QS_VOLDOWN, BUTTON_SCROLL_BACK, BUTTON_NONE },
137 { ACTION_QS_VOLDOWN, BUTTON_SCROLL_BACK|BUTTON_REPEAT, BUTTON_NONE }, 137 { ACTION_QS_VOLDOWN, BUTTON_SCROLL_BACK|BUTTON_REPEAT, BUTTON_NONE },
138 { ACTION_QS_VOLUP, BUTTON_SCROLL_FWD, BUTTON_NONE }, 138 { ACTION_QS_VOLUP, BUTTON_SCROLL_FWD, BUTTON_NONE },
diff --git a/apps/keymaps/keymap-nwz.c b/apps/keymaps/keymap-nwz.c
index 028fbf1bfd..1fae8d3594 100644
--- a/apps/keymaps/keymap-nwz.c
+++ b/apps/keymaps/keymap-nwz.c
@@ -112,7 +112,8 @@ static const struct button_mapping button_context_keyboard[] = {
112}; /* button_context_keyboard */ 112}; /* button_context_keyboard */
113 113
114static const struct button_mapping button_context_quickscreen[] = { 114static const struct button_mapping button_context_quickscreen[] = {
115 { ACTION_STD_CANCEL, BUTTON_PLAY, BUTTON_NONE }, 115 { ACTION_STD_CONTEXT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
116 { ACTION_STD_CANCEL, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
116 { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE }, 117 { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE },
117 { ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE }, 118 { ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE },
118 { ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE }, 119 { ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE },
diff --git a/apps/keymaps/keymap-nwza860.c b/apps/keymaps/keymap-nwza860.c
index d455e23b62..899796552e 100644
--- a/apps/keymaps/keymap-nwza860.c
+++ b/apps/keymaps/keymap-nwza860.c
@@ -74,7 +74,8 @@ static const struct button_mapping button_context_keyboard[] = {
74}; /* button_context_keyboard */ 74}; /* button_context_keyboard */
75 75
76static const struct button_mapping button_context_quickscreen[] = { 76static const struct button_mapping button_context_quickscreen[] = {
77 { ACTION_STD_CANCEL, BUTTON_PLAY, BUTTON_NONE }, 77 { ACTION_STD_CONTEXT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
78 { ACTION_STD_CANCEL, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
78 { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE }, 79 { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE },
79 80
80 LAST_ITEM_IN_LIST 81 LAST_ITEM_IN_LIST
diff --git a/apps/keymaps/keymap-zen.c b/apps/keymaps/keymap-zen.c
index b0f24af459..04b65b3980 100644
--- a/apps/keymaps/keymap-zen.c
+++ b/apps/keymaps/keymap-zen.c
@@ -145,7 +145,8 @@ static const struct button_mapping button_context_keyboard[] = {
145}; /* button_context_keyboard */ 145}; /* button_context_keyboard */
146 146
147static const struct button_mapping button_context_quickscreen[] = { 147static const struct button_mapping button_context_quickscreen[] = {
148 { ACTION_STD_CANCEL, BUTTON_SELECT, BUTTON_NONE }, 148 { ACTION_STD_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT },
149 { ACTION_STD_CANCEL, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
149 { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE }, 150 { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE },
150 { ACTION_STD_CANCEL, BUTTON_PLAYPAUSE, BUTTON_NONE }, 151 { ACTION_STD_CANCEL, BUTTON_PLAYPAUSE, BUTTON_NONE },
151 { ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE }, 152 { ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE },
diff --git a/apps/menu.c b/apps/menu.c
index 85dac8a214..c86ada1986 100644
--- a/apps/menu.c
+++ b/apps/menu.c
@@ -455,14 +455,13 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
455#ifdef HAVE_QUICKSCREEN 455#ifdef HAVE_QUICKSCREEN
456 else if (action == ACTION_STD_QUICKSCREEN) 456 else if (action == ACTION_STD_QUICKSCREEN)
457 { 457 {
458 if (global_settings.shortcuts_replaces_qs) 458 if (global_settings.shortcuts_replaces_qs ||
459 quick_screen_quick(action) == QUICKSCREEN_GOTO_SHORTCUTS_MENU)
459 { 460 {
460 global_status.last_screen = GO_TO_SHORTCUTMENU; 461 global_status.last_screen = GO_TO_SHORTCUTMENU;
461 ret = quick_screen_quick(action); 462 ret = do_shortcut_menu(NULL);
462 done = true; 463 done = true;
463 } 464 }
464 else
465 quick_screen_quick(action);
466 redraw_lists = true; 465 redraw_lists = true;
467 } 466 }
468#endif 467#endif
diff --git a/apps/tree.c b/apps/tree.c
index 6622e1c4c2..2bccefa7a1 100644
--- a/apps/tree.c
+++ b/apps/tree.c
@@ -72,6 +72,7 @@
72#include "list.h" 72#include "list.h"
73#include "splash.h" 73#include "splash.h"
74#include "quickscreen.h" 74#include "quickscreen.h"
75#include "shortcuts.h"
75#include "appevents.h" 76#include "appevents.h"
76 77
77#include "root_menu.h" 78#include "root_menu.h"
@@ -751,19 +752,28 @@ static int dirbrowse(void)
751 break; 752 break;
752#ifdef HAVE_QUICKSCREEN 753#ifdef HAVE_QUICKSCREEN
753 case ACTION_STD_QUICKSCREEN: 754 case ACTION_STD_QUICKSCREEN:
754 if (global_settings.shortcuts_replaces_qs) 755 {
755 { 756 bool enter_shortcuts_menu = global_settings.shortcuts_replaces_qs;
756 if (*tc.dirfilter < NUM_FILTER_MODES) 757 if (enter_shortcuts_menu && *tc.dirfilter >= NUM_FILTER_MODES)
757 {
758 global_status.last_screen = GO_TO_SHORTCUTMENU;
759 return quick_screen_quick(button);
760 }
761 break; 758 break;
759 else if (!enter_shortcuts_menu)
760 {
761 int ret = quick_screen_quick(button);
762 if (ret == QUICKSCREEN_IN_USB)
763 reload_dir = true;
764 else if (ret == QUICKSCREEN_GOTO_SHORTCUTS_MENU)
765 enter_shortcuts_menu = true;
762 } 766 }
763 else if (quick_screen_quick(button)) 767
764 reload_dir = true; 768 if (enter_shortcuts_menu && *tc.dirfilter < NUM_FILTER_MODES)
769 {
770 global_status.last_screen = GO_TO_SHORTCUTMENU;
771 return do_shortcut_menu(NULL);
772 }
773
765 restore = true; 774 restore = true;
766 break; 775 break;
776 }
767#endif 777#endif
768 778
769#ifdef HAVE_HOTKEY 779#ifdef HAVE_HOTKEY