refactor: unify desktop apps and Settings under item catalog
This commit is contained in:
@@ -110,11 +110,7 @@ static void filemanager_reset_list_state(FileManagerState* fm) {
|
||||
|
||||
static void filemanager_reset_virtual_entry(FileManagerVirtualEntry* entry) {
|
||||
if (!entry) return;
|
||||
entry->kind = FM_VIRTUAL_ENTRY_NONE;
|
||||
entry->external_app_index = -1;
|
||||
montauk::memset(&entry->applet, 0, sizeof(entry->applet));
|
||||
entry->applet.kind = DESKTOP_APPLET_NONE;
|
||||
entry->applet.builtin_id = DESKTOP_BUILTIN_NONE;
|
||||
entry->desktop_item_index = -1;
|
||||
entry->icon_lg = {};
|
||||
entry->icon_sm = {};
|
||||
}
|
||||
@@ -140,19 +136,17 @@ static void filemanager_add_root_entry(FileManagerState* fm,
|
||||
|
||||
static int filemanager_add_virtual_entry(FileManagerState* fm,
|
||||
const char* name,
|
||||
const char* icon_path,
|
||||
FileManagerVirtualEntryKind kind) {
|
||||
const char* icon_path) {
|
||||
if (!fm || !filemanager_ensure_entry_capacity(fm, fm->entry_count + 1)) return -1;
|
||||
|
||||
int idx = fm->entry_count;
|
||||
montauk::strncpy(fm->entry_names[idx], name, 63);
|
||||
fm->entry_types[idx] = FM_ENTRY_VIRTUAL_APP;
|
||||
fm->entry_types[idx] = FM_ENTRY_VIRTUAL_ITEM;
|
||||
fm->entry_sizes[idx] = 0;
|
||||
fm->entry_mtimes[idx] = 0;
|
||||
fm->is_dir[idx] = false;
|
||||
fm->drive_indices[idx] = -1;
|
||||
filemanager_reset_virtual_entry(&fm->virtual_entries[idx]);
|
||||
fm->virtual_entries[idx].kind = kind;
|
||||
|
||||
if (icon_path && icon_path[0]) {
|
||||
Color defColor = colors::ICON_COLOR;
|
||||
@@ -165,24 +159,32 @@ static int filemanager_add_virtual_entry(FileManagerState* fm,
|
||||
return idx;
|
||||
}
|
||||
|
||||
static void filemanager_add_external_app_entry(FileManagerState* fm,
|
||||
const ExternalApp& app,
|
||||
int external_index) {
|
||||
int idx = filemanager_add_virtual_entry(fm, app.name, app.icon_path,
|
||||
FM_VIRTUAL_ENTRY_EXTERNAL_APP);
|
||||
static void filemanager_add_desktop_item_entry(FileManagerState* fm,
|
||||
const DesktopItem& item,
|
||||
int desktop_item_index) {
|
||||
int idx = filemanager_add_virtual_entry(fm, item.name, item.icon_path);
|
||||
if (idx >= 0) {
|
||||
fm->virtual_entries[idx].external_app_index = external_index;
|
||||
fm->virtual_entries[idx].desktop_item_index = desktop_item_index;
|
||||
}
|
||||
}
|
||||
|
||||
static void filemanager_add_system_configuration_applet_entry(
|
||||
FileManagerState* fm,
|
||||
const DesktopAppletEntry& applet) {
|
||||
int idx = filemanager_add_virtual_entry(fm, applet.label, applet.icon_path,
|
||||
FM_VIRTUAL_ENTRY_SYSTEM_CONFIGURATION_APPLET);
|
||||
if (idx >= 0) {
|
||||
fm->virtual_entries[idx].applet = applet;
|
||||
static void filemanager_add_catalog_section(FileManagerState* fm,
|
||||
DesktopItemSection section) {
|
||||
if (!fm || !fm->desktop || fm->desktop->desktop_item_count <= 0) return;
|
||||
|
||||
int capacity = fm->desktop->desktop_item_count;
|
||||
int* item_indices = (int*)montauk::malloc((uint64_t)capacity * sizeof(int));
|
||||
if (!item_indices) return;
|
||||
|
||||
int item_count = desktop_list_item_indices(
|
||||
fm->desktop, section, item_indices, capacity);
|
||||
for (int i = 0; i < item_count; i++) {
|
||||
int item_index = item_indices[i];
|
||||
filemanager_add_desktop_item_entry(
|
||||
fm, fm->desktop->desktop_items[item_index], item_index);
|
||||
}
|
||||
|
||||
montauk::mfree(item_indices);
|
||||
}
|
||||
|
||||
static void filemanager_begin_virtual_view(FileManagerState* fm, FileManagerVirtualViewKind view) {
|
||||
@@ -418,25 +420,14 @@ void filemanager_read_virtual_view(FileManagerState* fm, FileManagerVirtualViewK
|
||||
|
||||
void filemanager_read_apps(FileManagerState* fm) {
|
||||
filemanager_begin_virtual_view(fm, FM_VIRTUAL_VIEW_APPS);
|
||||
|
||||
DesktopState* ds = fm->desktop;
|
||||
if (!ds) return;
|
||||
|
||||
for (int i = 0; i < ds->external_app_count; i++) {
|
||||
filemanager_add_external_app_entry(fm, ds->external_apps[i], i);
|
||||
}
|
||||
filemanager_add_catalog_section(fm, DESKTOP_ITEM_SECTION_APPS);
|
||||
|
||||
filemanager_reset_list_state(fm);
|
||||
}
|
||||
|
||||
void filemanager_read_system_configuration(FileManagerState* fm) {
|
||||
filemanager_begin_virtual_view(fm, FM_VIRTUAL_VIEW_SYSTEM_CONFIGURATION);
|
||||
|
||||
DesktopAppletEntry applets[32];
|
||||
int applet_count = desktop_list_system_configuration_applets(fm->desktop, applets, 32);
|
||||
for (int i = 0; i < applet_count; i++) {
|
||||
filemanager_add_system_configuration_applet_entry(fm, applets[i]);
|
||||
}
|
||||
filemanager_add_catalog_section(fm, DESKTOP_ITEM_SECTION_SETTINGS);
|
||||
|
||||
filemanager_reset_list_state(fm);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user