feat: allow applets to be shared modules

This commit is contained in:
2026-04-24 14:50:08 +02:00
parent 00c3e37ecf
commit 58d2e773fd
14 changed files with 405 additions and 10 deletions
@@ -27,8 +27,10 @@ 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;
entry->builtin_id = DESKTOP_BUILTIN_NONE;
entry->shared_applet_path[0] = '\0';
entry->icon_lg = {};
entry->icon_sm = {};
}
@@ -50,8 +52,10 @@ static void filemanager_add_root_entry(FileManagerState* fm,
static void filemanager_add_virtual_entry(FileManagerState* fm,
const char* name,
const char* icon_path,
FileManagerVirtualEntryKind kind,
int external_index,
DesktopBuiltinId builtin_id) {
DesktopBuiltinId builtin_id,
const char* shared_applet_path) {
if (!fm || fm->entry_count >= 64) return;
int idx = fm->entry_count;
@@ -61,8 +65,14 @@ static void filemanager_add_virtual_entry(FileManagerState* fm,
fm->is_dir[idx] = false;
fm->drive_indices[idx] = -1;
filemanager_reset_virtual_entry(&fm->virtual_entries[idx]);
fm->virtual_entries[idx].kind = kind;
fm->virtual_entries[idx].external_app_index = external_index;
fm->virtual_entries[idx].builtin_id = builtin_id;
if (shared_applet_path && shared_applet_path[0]) {
montauk::strncpy(fm->virtual_entries[idx].shared_applet_path,
shared_applet_path,
sizeof(fm->virtual_entries[idx].shared_applet_path));
}
if (icon_path && icon_path[0]) {
Color defColor = colors::ICON_COLOR;
@@ -344,8 +354,9 @@ void filemanager_read_apps(FileManagerState* fm) {
}
filemanager_add_virtual_entry(fm, name, icon_path,
FM_VIRTUAL_ENTRY_EXTERNAL_APP,
filemanager_find_external_app(ds, bin_path),
DESKTOP_BUILTIN_NONE);
DESKTOP_BUILTIN_NONE, nullptr);
doc.destroy();
}
@@ -361,7 +372,17 @@ void filemanager_read_system_tools(FileManagerState* fm) {
for (int i = 0; i < builtin_count; i++) {
if (!builtins[i].system_tools_applet) continue;
filemanager_add_virtual_entry(fm, builtins[i].label, builtins[i].icon_path,
-1, builtins[i].id);
FM_VIRTUAL_ENTRY_BUILTIN,
-1, builtins[i].id, nullptr);
}
DesktopSharedAppletEntry applets[32];
int applet_count = desktop_list_system_configuration_applets(fm->desktop, applets, 32);
for (int i = 0; i < applet_count && fm->entry_count < 64; i++) {
filemanager_add_virtual_entry(fm, applets[i].label, applets[i].icon_path,
FM_VIRTUAL_ENTRY_SHARED_APPLET,
-1, DESKTOP_BUILTIN_NONE,
applets[i].library_path);
}
filemanager_reset_list_state(fm);