diff --git a/programs/include/gui/desktop.hpp b/programs/include/gui/desktop.hpp index 3fa44f8..84d78d4 100644 --- a/programs/include/gui/desktop.hpp +++ b/programs/include/gui/desktop.hpp @@ -26,6 +26,7 @@ struct ExternalApp { char category[24]; SvgIcon icon; bool menu_visible; + bool launch_with_home; }; struct DesktopSettings { @@ -81,7 +82,6 @@ struct DesktopState { SvgIcon icon_computer; SvgIcon icon_network; SvgIcon icon_calculator; - SvgIcon icon_texteditor; SvgIcon icon_go_up; SvgIcon icon_go_back; SvgIcon icon_go_forward; diff --git a/programs/src/desktop/apps/app_filemanager.cpp b/programs/src/desktop/apps/app_filemanager.cpp index e054b83..59d2ba9 100644 --- a/programs/src/desktop/apps/app_filemanager.cpp +++ b/programs/src/desktop/apps/app_filemanager.cpp @@ -1028,7 +1028,12 @@ static void filemanager_open_entry(FileManagerState* fm, int idx) { if (fm->at_apps_view && fm->entry_types[idx] == 6) { DesktopState* ds = fm->desktop; if (ds && fm->app_map[idx] >= 0 && fm->app_map[idx] < ds->external_app_count) { - montauk::spawn(ds->external_apps[fm->app_map[idx]].binary_path, ds->home_dir); + const ExternalApp& app = ds->external_apps[fm->app_map[idx]]; + if (app.launch_with_home) { + montauk::spawn(app.binary_path, ds->home_dir); + } else { + montauk::spawn(app.binary_path); + } } return; } diff --git a/programs/src/desktop/desktop_internal.hpp b/programs/src/desktop/desktop_internal.hpp index 37db940..f8740ea 100644 --- a/programs/src/desktop/desktop_internal.hpp +++ b/programs/src/desktop/desktop_internal.hpp @@ -25,6 +25,7 @@ struct MenuRow { int app_id; // embedded dispatch ID, or -1 for categories/dividers bool external; // true = spawn binary_path char binary_path[128]; // full VFS path for external apps + bool launch_with_home; // true = pass home_dir as first argument SvgIcon* icon; // loaded menu icon (null for categories/dividers) }; @@ -76,6 +77,7 @@ inline int menu_add_category(const char* label) { r.app_id = -1; r.external = false; r.binary_path[0] = '\0'; + r.launch_with_home = false; r.icon = nullptr; return menu_row_count - 1; } @@ -88,11 +90,12 @@ inline int menu_add_embedded(const char* label, int app_id, SvgIcon* icon) { r.app_id = app_id; r.external = false; r.binary_path[0] = '\0'; + r.launch_with_home = false; r.icon = icon; return menu_row_count - 1; } -inline int menu_add_external(const char* label, const char* binary, SvgIcon* icon) { +inline int menu_add_external(const char* label, const char* binary, SvgIcon* icon, bool launch_with_home) { if (menu_row_count >= MAX_MENU_ROWS) return -1; MenuRow& r = menu_rows[menu_row_count++]; r.is_category = false; @@ -100,6 +103,7 @@ inline int menu_add_external(const char* label, const char* binary, SvgIcon* ico r.app_id = -1; r.external = true; montauk::strncpy(r.binary_path, binary, sizeof(r.binary_path)); + r.launch_with_home = launch_with_home; r.icon = icon; return menu_row_count - 1; } diff --git a/programs/src/desktop/input.cpp b/programs/src/desktop/input.cpp index 62b1824..e837cb8 100644 --- a/programs/src/desktop/input.cpp +++ b/programs/src/desktop/input.cpp @@ -339,8 +339,11 @@ void gui::desktop_handle_mouse(DesktopState* ds) { menu_cat_expanded[cur_cat] = !menu_cat_expanded[cur_cat]; } else if (!row.is_category) { if (row.external) { - // Launch external app with user's home dir - montauk::spawn(row.binary_path, ds->home_dir); + if (row.launch_with_home) { + montauk::spawn(row.binary_path, ds->home_dir); + } else { + montauk::spawn(row.binary_path); + } } else { // Dispatch embedded app switch (row.app_id) { diff --git a/programs/src/desktop/main.cpp b/programs/src/desktop/main.cpp index be243a4..dcd25b3 100644 --- a/programs/src/desktop/main.cpp +++ b/programs/src/desktop/main.cpp @@ -74,10 +74,12 @@ void desktop_scan_apps(DesktopState* ds) { const char* icon_file = doc.get_string("app.icon", ""); const char* category = doc.get_string("menu.category", "Applications"); bool visible = doc.get_bool("menu.visible", true); + bool launch_with_home = doc.get_bool("launch.pass_home_dir", true); montauk::strncpy(app->name, name, sizeof(app->name)); montauk::strncpy(app->category, category, sizeof(app->category)); app->menu_visible = visible; + app->launch_with_home = launch_with_home; // Build full binary path: 0:/apps/