diff --git a/applications/main/archive/scenes/archive_scene_browser.c b/applications/main/archive/scenes/archive_scene_browser.c index ea7548750..c3d1eef14 100644 --- a/applications/main/archive/scenes/archive_scene_browser.c +++ b/applications/main/archive/scenes/archive_scene_browser.c @@ -204,6 +204,8 @@ bool archive_scene_browser_on_event(void* context, SceneManagerEvent event) { break; case ArchiveBrowserEventFileMenuDelete: if(archive_get_tab(browser) != ArchiveTabFavorites) { + scene_manager_set_scene_state( + archive->scene_manager, ArchiveAppSceneBrowser, SCENE_STATE_NEED_REFRESH); scene_manager_next_scene(archive->scene_manager, ArchiveAppSceneDelete); } consumed = true; diff --git a/applications/plugins/clock/clock_app.c b/applications/plugins/clock/clock_app.c index e196f0d29..9d87ff950 100644 --- a/applications/plugins/clock/clock_app.c +++ b/applications/plugins/clock/clock_app.c @@ -56,7 +56,7 @@ static void clock_render_callback(Canvas* canvas, void* ctx) { 31, AlignLeft, AlignCenter, - (data->datetime.hour > 12) ? "AM" : "PM"); + (data->datetime.hour > 12) ? "PM" : "AM"); } canvas_set_font(canvas, FontSecondary); diff --git a/applications/services/desktop/scenes/desktop_scene_main.c b/applications/services/desktop/scenes/desktop_scene_main.c index fc145aff7..90b872e76 100644 --- a/applications/services/desktop/scenes/desktop_scene_main.c +++ b/applications/services/desktop/scenes/desktop_scene_main.c @@ -13,6 +13,8 @@ #define TAG "DesktopSrv" +#define CLOCK_APP EXT_PATH("/apps/Main/Clock.fap") + static void desktop_scene_main_new_idle_animation_callback(void* context) { furi_assert(context); Desktop* desktop = context; @@ -61,6 +63,19 @@ static void desktop_switch_to_app(Desktop* desktop, const FlipperApplication* fl } #endif +static void desktop_scene_main_open_app_or_profile(Desktop* desktop, const char* path) { + do { + LoaderStatus status = loader_start(desktop->loader, FAP_LOADER_APP_NAME, path); + if(status == LoaderStatusOk) break; + FURI_LOG_E(TAG, "loader_start failed: %d", status); + + status = loader_start(desktop->loader, "Passport", NULL); + if(status != LoaderStatusOk) { + FURI_LOG_E(TAG, "loader_start failed: %d", status); + } + } while(false); +} + void desktop_scene_main_callback(DesktopEvent event, void* context) { Desktop* desktop = (Desktop*)context; view_dispatcher_send_custom_event(desktop->view_dispatcher, event); @@ -131,12 +146,6 @@ bool desktop_scene_main_on_event(void* context, SceneManagerEvent event) { consumed = true; break; } - case DesktopMainEventOpenClock: { - LoaderStatus status = - loader_start(desktop->loader, "Applications", EXT_PATH("/apps/Main/Clock.fap")); - consumed = true; - break; - } case DesktopMainEventOpenFavoritePrimary: DESKTOP_SETTINGS_LOAD(&desktop->settings); if(desktop->settings.favorite_primary.is_external) { @@ -200,57 +209,43 @@ bool desktop_scene_main_on_event(void* context, SceneManagerEvent event) { break; } case DesktopMainEventOpenSnake: { - LoaderStatus status = - loader_start(desktop->loader, "Applications", EXT_PATH("/apps/Games/Snake.fap")); - consumed = true; + desktop_scene_main_open_app_or_profile(desktop, EXT_PATH("/apps/Games/Snake.fap")); break; } case DesktopMainEventOpen2048: { - LoaderStatus status = - loader_start(desktop->loader, "Applications", EXT_PATH("/apps/Games/2048.fap")); - consumed = true; + desktop_scene_main_open_app_or_profile(desktop, EXT_PATH("/apps/Games/2048.fap")); break; } case DesktopMainEventOpenZombiez: { - LoaderStatus status = - loader_start(desktop->loader, "Applications", EXT_PATH("/apps/Games/Zombiez.fap")); - consumed = true; + desktop_scene_main_open_app_or_profile(desktop, EXT_PATH("/apps/Games/Zombiez.fap")); break; } case DesktopMainEventOpenTetris: { - LoaderStatus status = - loader_start(desktop->loader, "Applications", EXT_PATH("/apps/Games/Tetris.fap")); - consumed = true; + desktop_scene_main_open_app_or_profile(desktop, EXT_PATH("/apps/Games/Tetris.fap")); break; } case DesktopMainEventOpenDOOM: { - LoaderStatus status = - loader_start(desktop->loader, "Applications", EXT_PATH("/apps/Games/DOOM.fap")); - consumed = true; + desktop_scene_main_open_app_or_profile(desktop, EXT_PATH("/apps/Games/DOOM.fap")); break; } case DesktopMainEventOpenDice: { - LoaderStatus status = - loader_start(desktop->loader, "Applications", EXT_PATH("/apps/Games/Dice.fap")); - consumed = true; + desktop_scene_main_open_app_or_profile(desktop, EXT_PATH("/apps/Games/Dice.fap")); break; } case DesktopMainEventOpenArkanoid: { - LoaderStatus status = loader_start( - desktop->loader, "Applications", EXT_PATH("/apps/Games/Arkanoid.fap")); - consumed = true; + desktop_scene_main_open_app_or_profile(desktop, EXT_PATH("/apps/Games/Arkanoid.fap")); break; } case DesktopMainEventOpenHeap: { - LoaderStatus status = loader_start( - desktop->loader, "Applications", EXT_PATH("/apps/Games/Heap_Defence.fap")); - consumed = true; + desktop_scene_main_open_app_or_profile(desktop, EXT_PATH("/apps/Games/Heap_Defence.fap")); break; } case DesktopMainEventOpenSubRemote: { - LoaderStatus status = loader_start( - desktop->loader, "Applications", EXT_PATH("/apps/Main/SubGHz_Remote.fap")); - consumed = true; + desktop_scene_main_open_app_or_profile(desktop, EXT_PATH("/apps/Main/SubGHz_Remote.fap")); + break; + } + case DesktopMainEventOpenClock: { + desktop_scene_main_open_app_or_profile(desktop, CLOCK_APP); break; } case DesktopLockedEventUpdate: diff --git a/applications/services/desktop/views/desktop_events.h b/applications/services/desktop/views/desktop_events.h index 53411acc4..503cbbd02 100644 --- a/applications/services/desktop/views/desktop_events.h +++ b/applications/services/desktop/views/desktop_events.h @@ -22,6 +22,7 @@ typedef enum { DesktopMainEventOpenArkanoid, DesktopMainEventOpenHeap, DesktopMainEventOpenSubRemote, + DesktopMainEventOpenClock, DesktopLockedEventUnlocked, DesktopLockedEventUpdate, diff --git a/applications/services/gui/elements.c b/applications/services/gui/elements.c index 955e1fbdd..6b796ed5b 100644 --- a/applications/services/gui/elements.c +++ b/applications/services/gui/elements.c @@ -564,7 +564,7 @@ void elements_scrollable_text_line( } // Calculate scroll size - size_t scroll_size = furi_string_size(string); + size_t scroll_size = furi_string_size(line); size_t right_width = 0; for(size_t i = scroll_size; i > 0; i--) { right_width += canvas_glyph_width(canvas, furi_string_get_char(line, i)); @@ -579,10 +579,11 @@ void elements_scrollable_text_line( furi_string_right(line, scroll); } - do { + len_px = canvas_string_width(canvas, furi_string_get_cstr(line)); + while(len_px > width) { furi_string_left(line, furi_string_size(line) - 1); len_px = canvas_string_width(canvas, furi_string_get_cstr(line)); - } while(len_px > width); + } if(ellipsis) { furi_string_cat(line, "...");