Unified Settings App

Overview

The suite desktop historically exposed settings through several overlapping windows: separate admin (administration) and settings (personal preferences) entries, plus orphan .html pages reachable only by direct URL. Issue #1295 consolidated them into a single Settings app with two views controlled by a ?view= query parameter.

Architecture

ViewRoutePurpose
Personal settings/suite/settings/index.htmlTheme, profile, wallpapers, keyboard, accessibility
Administration/suite/settings/index.html?view=adminRBAC groups, users, orgs, security, integrations

Both registry entries (admin and settings in window-manager.js APPS_REGISTRY) point at the unified page — admin passes ?view=admin. The orphan pages removed in the consolidation:

RemovedReplaced by
admin/index.htmlredirect stub → unified Settings
settings/security.htmlsettings view (security section)
settings/profile.htmlsettings view (profile section)
settings/wallpapers.htmlsettings view (wallpapers section)

Wallpaper picker

The unified Settings page embeds the wallpaper gallery with a live preview. The picker reads wallpapers from desktop.css (.gb-wallpaper-* classes); each entry renders a thumbnail (gradient CSS) with an Apply action that sets the active wallpaper class on the desktop root and persists the choice in localStorage (gb-wallpaper). The desktop shell loads wallpaper.css unconditionally so picker styles work in every theme.

RBAC gating

Administration sections are rendered only when the session carries an admin role (data-admin-only attributes; the renderer checks the resolved user role from the suite token). Non-admin users see only personal settings, and the admin view falls back to the personal view when access is denied.

Verification

  • Desktop launcher → Settings opens the unified page.
  • Launcher → Settings with admin session shows the administration sections.
  • Direct navigation to the old orphan URLs redirects to the unified page (no 404, no broken shell).
  • Wallpaper Apply updates the desktop background immediately and survives reload.