diff --git a/applications/main/archive/helpers/archive_files.h b/applications/main/archive/helpers/archive_files.h index 27f6353a7..a9c33c9f6 100644 --- a/applications/main/archive/helpers/archive_files.h +++ b/applications/main/archive/helpers/archive_files.h @@ -6,6 +6,7 @@ #include #include #include "toolbox/path.h" +#include "../../../settings/xtreme_settings/xtreme_settings.h" #define FAP_MANIFEST_MAX_ICON_SIZE 32 @@ -84,11 +85,13 @@ static void ArchiveFile_t_clear(ArchiveFile_t* obj) { } static int ArchiveFile_t_cmp(const ArchiveFile_t* a, const ArchiveFile_t* b) { - if(a->type == ArchiveFileTypeFolder && b->type != ArchiveFileTypeFolder) { - return -1; - } - if(a->type != ArchiveFileTypeFolder && b->type == ArchiveFileTypeFolder) { - return 1; + if(!XTREME_SETTINGS()->sort_ignore_dirs) { + if(a->type == ArchiveFileTypeFolder && b->type != ArchiveFileTypeFolder) { + return -1; + } + if(a->type != ArchiveFileTypeFolder && b->type == ArchiveFileTypeFolder) { + return 1; + } } return furi_string_cmpi(a->path, b->path); diff --git a/applications/services/gui/modules/file_browser.c b/applications/services/gui/modules/file_browser.c index eecea0dbd..c6971c82a 100644 --- a/applications/services/gui/modules/file_browser.c +++ b/applications/services/gui/modules/file_browser.c @@ -11,6 +11,7 @@ #include #include #include "toolbox/path.h" +#include "../../../settings/xtreme_settings/xtreme_settings.h" #define LIST_ITEMS 5u #define MAX_LEN_PX 110 @@ -84,11 +85,13 @@ static int BrowserItem_t_cmp(const BrowserItem_t* a, const BrowserItem_t* b) { if(b->type == BrowserItemTypeBack) { return 1; } - if(a->type == BrowserItemTypeFolder && b->type != BrowserItemTypeFolder) { - return -1; - } - if(a->type != BrowserItemTypeFolder && b->type == BrowserItemTypeFolder) { - return 1; + if(!XTREME_SETTINGS()->sort_ignore_dirs) { + if(a->type == BrowserItemTypeFolder && b->type != BrowserItemTypeFolder) { + return -1; + } + if(a->type != BrowserItemTypeFolder && b->type == BrowserItemTypeFolder) { + return 1; + } } return furi_string_cmpi(a->path, b->path); diff --git a/applications/settings/xtreme_settings/scenes/xtreme_settings_scene_start.c b/applications/settings/xtreme_settings/scenes/xtreme_settings_scene_start.c index f3e41ba70..d6532af2c 100644 --- a/applications/settings/xtreme_settings/scenes/xtreme_settings_scene_start.c +++ b/applications/settings/xtreme_settings/scenes/xtreme_settings_scene_start.c @@ -87,6 +87,14 @@ static void xtreme_settings_scene_start_battery_style_changed(VariableItem* item app->settings_changed = true; } +static void xtreme_settings_scene_start_sort_folders_before_changed(VariableItem* item) { + XtremeSettingsApp* app = variable_item_get_context(item); + bool value = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, value ? "ON" : "OFF"); + XTREME_SETTINGS()->sort_ignore_dirs = !value; + app->settings_changed = true; +} + static void xtreme_settings_scene_start_xp_level_changed(VariableItem* item) { XtremeSettingsApp* app = variable_item_get_context(item); app->dolphin_level = variable_item_get_current_value_index(item) + 1; @@ -219,6 +227,11 @@ void xtreme_settings_scene_start_on_enter(void* context) { variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, battery_style_names[value_index]); + item = variable_item_list_add( + var_item_list, "Sort folders before", 2, xtreme_settings_scene_start_sort_folders_before_changed, app); + variable_item_set_current_value_index(item, !xtreme_settings->sort_ignore_dirs); + variable_item_set_current_value_text(item, !xtreme_settings->sort_ignore_dirs ? "ON" : "OFF"); + char level_str[4]; snprintf(level_str, 4, "%i", app->dolphin_level); item = variable_item_list_add( diff --git a/applications/settings/xtreme_settings/xtreme_settings.h b/applications/settings/xtreme_settings/xtreme_settings.h index 0a19ca643..ee0ec5583 100644 --- a/applications/settings/xtreme_settings/xtreme_settings.h +++ b/applications/settings/xtreme_settings/xtreme_settings.h @@ -22,6 +22,7 @@ typedef struct { char asset_pack[MAX_PACK_NAME_LEN]; BatteryStyle battery_style; uint16_t anim_speed; + bool sort_ignore_dirs; } XtremeSettings; XtremeSettings* XTREME_SETTINGS();