Files
MontaukOS/programs/src/desktop/desktop_builtin.cpp
T

102 lines
3.9 KiB
C++

/*
* desktop_builtin.cpp
* Shared builtin applet metadata and dispatch helpers
* Copyright (c) 2026 Daniel Hammer
*/
#include "desktop_internal.hpp"
#include <montauk/user.h>
static const DesktopBuiltinEntry builtin_entries[] = {
{ DESKTOP_BUILTIN_FILES, "Files", 0, false, nullptr, "0:/icons/system-file-manager.svg" },
{ DESKTOP_BUILTIN_DESKTOP_SETTINGS, "Desktop Settings", -1, false, "desktop-settings",
"0:/icons/preferences-desktop-apps.svg" },
{ DESKTOP_BUILTIN_SYSTEM_CONFIGURATION, "Settings", -1, true, nullptr,
"0:/icons/preferences-system.svg" },
{ DESKTOP_BUILTIN_USER_MANAGEMENT, "User Management", -1, false, "user-management",
"0:/icons/user-home.svg" },
{ DESKTOP_BUILTIN_LOCK_SCREEN, "Lock Screen", -1, true, nullptr, nullptr },
{ DESKTOP_BUILTIN_LOG_OUT, "Log Out", -1, true, nullptr, nullptr },
{ DESKTOP_BUILTIN_SLEEP, "Sleep", -1, true, nullptr, nullptr },
{ DESKTOP_BUILTIN_REBOOT, "Reboot", -1, true, nullptr, nullptr },
{ DESKTOP_BUILTIN_SHUTDOWN, "Shutdown", -1, true, nullptr, nullptr },
};
static constexpr int builtin_entry_count = sizeof(builtin_entries) / sizeof(builtin_entries[0]);
const DesktopBuiltinEntry* desktop_builtin_registry(int* count) {
if (count) *count = builtin_entry_count;
return builtin_entries;
}
const DesktopBuiltinEntry* desktop_builtin_entry(DesktopBuiltinId id) {
for (int i = 0; i < builtin_entry_count; i++) {
if (builtin_entries[i].id == id) return &builtin_entries[i];
}
return nullptr;
}
SvgIcon* desktop_builtin_menu_icon(DesktopState* ds, DesktopBuiltinId id) {
if (!ds) return nullptr;
switch (id) {
case DESKTOP_BUILTIN_FILES: return &ds->icon_filemanager;
case DESKTOP_BUILTIN_DESKTOP_SETTINGS: return &ds->icon_settings;
case DESKTOP_BUILTIN_SYSTEM_CONFIGURATION:
ensure_filemanager_icons_loaded(ds);
return &ds->icon_system_configuration_menu;
case DESKTOP_BUILTIN_LOCK_SCREEN: return &ds->icon_lock;
case DESKTOP_BUILTIN_LOG_OUT: return &ds->icon_logout;
case DESKTOP_BUILTIN_SLEEP: return &ds->icon_sleep;
case DESKTOP_BUILTIN_REBOOT: return &ds->icon_reboot;
case DESKTOP_BUILTIN_SHUTDOWN: return &ds->icon_shutdown;
default: return nullptr;
}
}
void desktop_lock_screen(DesktopState* ds) {
if (!ds) return;
ds->screen_locked = true;
ds->lock_password[0] = '\0';
ds->lock_password_len = 0;
ds->lock_error[0] = '\0';
ds->lock_show_error = false;
ds->app_menu_open = false;
desktop_close_launcher(ds);
ds->ctx_menu_open = false;
ds->net_popup_open = false;
ds->vol_popup_open = false;
// Cache display name for lock screen rendering
montauk::strncpy(ds->lock_display_name, ds->current_user, sizeof(ds->lock_display_name));
montauk::user::UserInfo users[16];
int count = montauk::user::load_users(users, 16);
for (int i = 0; i < count; i++) {
if (montauk::streq(users[i].username, ds->current_user)) {
if (users[i].display_name[0]) {
montauk::strncpy(ds->lock_display_name, users[i].display_name,
sizeof(ds->lock_display_name));
}
break;
}
}
}
void desktop_launch_builtin(DesktopState* ds, DesktopBuiltinId id) {
if (!ds) return;
switch (id) {
case DESKTOP_BUILTIN_FILES: open_filemanager(ds); break;
case DESKTOP_BUILTIN_DESKTOP_SETTINGS: open_settings(ds); break;
case DESKTOP_BUILTIN_SYSTEM_CONFIGURATION: open_system_configuration(ds); break;
case DESKTOP_BUILTIN_USER_MANAGEMENT: open_user_manager(ds); break;
case DESKTOP_BUILTIN_REBOOT: open_reboot_dialog(ds); break;
case DESKTOP_BUILTIN_SHUTDOWN: open_shutdown_dialog(ds); break;
case DESKTOP_BUILTIN_LOG_OUT: montauk::exit(0); break;
case DESKTOP_BUILTIN_LOCK_SCREEN: desktop_lock_screen(ds); break;
case DESKTOP_BUILTIN_SLEEP: open_sleep_dialog(ds); break;
default: break;
}
}