feat: system settings stored as applets in virtual folder

This commit is contained in:
2026-04-23 15:36:03 +02:00
parent de96c1ca57
commit be67fce29a
21 changed files with 747 additions and 359 deletions
+6 -44
View File
@@ -7,35 +7,6 @@
#include "desktop_internal.hpp"
#include <montauk/user.h>
// ============================================================================
// Lock Screen Input
// ============================================================================
static void lock_screen(DesktopState* ds) {
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;
}
}
}
static bool try_unlock(DesktopState* ds) {
ds->lock_show_error = false;
@@ -175,10 +146,10 @@ void gui::desktop_handle_mouse(DesktopState* ds) {
switch (item_idx) {
case 0: open_terminal(ds); break;
case 1: open_filemanager(ds); break;
case 2: open_settings(ds); break;
case 3: open_sleep_dialog(ds); break;
case 4: open_reboot_dialog(ds); break;
case 5: open_shutdown_dialog(ds); break;
case 2: desktop_launch_builtin(ds, DESKTOP_BUILTIN_SYSTEM_CONFIGURATION); break;
case 3: desktop_launch_builtin(ds, DESKTOP_BUILTIN_SLEEP); break;
case 4: desktop_launch_builtin(ds, DESKTOP_BUILTIN_REBOOT); break;
case 5: desktop_launch_builtin(ds, DESKTOP_BUILTIN_SHUTDOWN); break;
}
return;
}
@@ -351,16 +322,7 @@ void gui::desktop_handle_mouse(DesktopState* ds) {
montauk::spawn(row.binary_path);
}
} else {
// Dispatch desktop-owned launcher entry
switch (row.app_id) {
case 1: open_filemanager(ds); break;
case 11: open_settings(ds); break;
case 12: open_reboot_dialog(ds); break;
case 14: open_shutdown_dialog(ds); break;
case 16: montauk::exit(0); break; // Log Out
case 17: lock_screen(ds); break; // Lock Screen
case 18: open_sleep_dialog(ds); break; // Sleep
}
desktop_launch_builtin(ds, row.app_id);
}
ds->app_menu_open = false;
}
@@ -746,7 +708,7 @@ void gui::desktop_handle_keyboard(DesktopState* ds, const Montauk::KeyEvent& key
// Global shortcuts (only on key press)
if (key.pressed && key.ctrl && key.alt) {
if (key.ascii == 'l' || key.ascii == 'L') {
lock_screen(ds);
desktop_lock_screen(ds);
return;
}
if (key.ascii == 't' || key.ascii == 'T') {