From 193ebb5a36374acbe379fe573317f9b668e65e4f Mon Sep 17 00:00:00 2001 From: Christian Soffke Date: Tue, 26 Oct 2021 03:05:50 +0200 Subject: Enable access to Shortcuts Menu from QuickScreen Offers a quick way of switching to the Shortcuts Menu by pressing the 'context menu' button while QuickScreen is active (e.g. long press Select on iPods and some other players) Change-Id: I38292c7070cf093a81e1db688809b1f0d6a8764a --- apps/gui/quickscreen.c | 25 ++++++++++++++++--------- apps/gui/quickscreen.h | 7 +++++++ apps/gui/wps.c | 20 +++++++++++++++----- 3 files changed, 38 insertions(+), 14 deletions(-) (limited to 'apps/gui') 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) } #endif -static bool gui_syncquickscreen_run(struct gui_quickscreen * qs, int button_enter, bool *usb) +static int gui_syncquickscreen_run(struct gui_quickscreen * qs, int button_enter, bool *usb) { int button; struct viewport parent[NB_SCREENS]; struct viewport vps[NB_SCREENS][QUICKSCREEN_ITEM_COUNT]; struct viewport vp_icons[NB_SCREENS]; - bool changed = false; + int ret = QUICKSCREEN_OK; /* To quit we need either : * - a second press on the button that made us enter * - an action taken while pressing the enter button, @@ -367,7 +367,7 @@ static bool gui_syncquickscreen_run(struct gui_quickscreen * qs, int button_ente } if (gui_quickscreen_do_button(qs, button)) { - changed = true; + ret |= QUICKSCREEN_CHANGED; can_quit = true; FOR_NB_SCREENS(i) gui_quickscreen_draw(qs, &screens[i], &parent[i], @@ -389,6 +389,11 @@ static bool gui_syncquickscreen_run(struct gui_quickscreen * qs, int button_ente FOR_NB_SCREENS(i) skin_update(CUSTOM_STATUSBAR, i, SKIN_REFRESH_NON_STATIC); } + else if (button == ACTION_STD_CONTEXT) + { + ret |= QUICKSCREEN_GOTO_SHORTCUTS_MENU; + break; + } if ((button == button_enter) && can_quit) break; @@ -405,7 +410,8 @@ static bool gui_syncquickscreen_run(struct gui_quickscreen * qs, int button_ente } pop_current_activity(); - return changed; + + return ret; } static const struct settings_list *get_setting(int gs_value, @@ -427,9 +433,6 @@ int quick_screen_quick(int button_enter) #endif bool usb = false; - if (global_settings.shortcuts_replaces_qs) - return do_shortcut_menu(NULL); - qs.items[QUICKSCREEN_TOP] = get_setting(global_settings.qs_items[QUICKSCREEN_TOP], NULL); qs.items[QUICKSCREEN_LEFT] = @@ -442,7 +445,8 @@ int quick_screen_quick(int button_enter) get_setting(global_settings.qs_items[QUICKSCREEN_BOTTOM], NULL); qs.callback = NULL; - if (gui_syncquickscreen_run(&qs, button_enter, &usb)) + int ret = gui_syncquickscreen_run(&qs, button_enter, &usb); + if (ret & QUICKSCREEN_CHANGED) { settings_save(); /* make sure repeat/shuffle/any other nasty ones get updated */ @@ -465,7 +469,10 @@ int quick_screen_quick(int button_enter) set_albumart_mode(global_settings.album_art); #endif } - return (usb ? 1:0); + if (usb) + return QUICKSCREEN_IN_USB; + return ret & QUICKSCREEN_GOTO_SHORTCUTS_MENU ? QUICKSCREEN_GOTO_SHORTCUTS_MENU : + QUICKSCREEN_OK; } /* 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 { QUICKSCREEN_ITEM_COUNT, }; +enum quickscreen_return { + QUICKSCREEN_OK = 0, + QUICKSCREEN_IN_USB = 0x1, + QUICKSCREEN_GOTO_SHORTCUTS_MENU = 0x2, + QUICKSCREEN_CHANGED = 0x4, +}; + struct gui_quickscreen { 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 @@ #include "root_menu.h" #include "backdrop.h" #include "quickscreen.h" +#include "shortcuts.h" #include "pitchscreen.h" #include "appevents.h" #include "viewport.h" @@ -839,15 +840,24 @@ long gui_wps_show(void) case ACTION_WPS_QUICKSCREEN: { gwps_leave_wps(); - if (global_settings.shortcuts_replaces_qs) + bool enter_shortcuts_menu = global_settings.shortcuts_replaces_qs; + if (!enter_shortcuts_menu) { - global_status.last_screen = GO_TO_SHORTCUTMENU; int ret = quick_screen_quick(button); + if (ret == QUICKSCREEN_IN_USB) + return GO_TO_ROOT; + else if (ret == QUICKSCREEN_GOTO_SHORTCUTS_MENU) + enter_shortcuts_menu = true; + else + restore = true; + } + + if (enter_shortcuts_menu) + { + global_status.last_screen = GO_TO_SHORTCUTMENU; + int ret = do_shortcut_menu(NULL); return (ret == GO_TO_PREVIOUS ? GO_TO_WPS : ret); } - else if (quick_screen_quick(button) > 0) - return GO_TO_ROOT; - restore = true; } break; #endif /* HAVE_QUICKSCREEN */ -- cgit v1.2.3