feat: allow applets to be shared modules
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user