Watch
1
0
Fork
You've already forked SouveraineOS
0
SouveraineOS/docs/tasks/14-overview-appgrid.md

6.5 KiB

TASK 14 — Overview pane → phone app grid

Status: in progress. Scoped 2026-07-20 from Casey's ask: make the overview actually useful on a phone, appgrid-shaped; expanded 2026-07-21 to include Auxo-like running-app cards and an unconditional Home path.

Progress 2026-08-05: home/multitasking split landed in the shell (surfaces/quickshell/modules/ii/overview/). AppGrid.qml is new (paged, alphabetical, 4x5 per page, page dots, slide-up entry) and renders when overviewOpen; the running-cards surface (WindowOverview) now renders ONLY for missionControlOpen (pill stage-2 swipe). The two states are mutually exclusive — opening one closes the other. Search stays above the grid; mission control takes no search and no OSK. Untested on glass (laptop or phone).

Finesse pass (same day, deployed to phone 09:41, reload clean): the OSK no longer auto-raises with the drawer — it is summoned by tapping the search pane (oskSummoner MouseArea in Overview.qml; the field is re-focused before the keyboard opens so keystrokes land). The drawer got a translucent theme sheet (panelBg, transparentize(colLayer1, 0.12), radius/border, wraps the column; the window mask now follows panelBg — a real GaussianBlur needs Qt5Compat and dies on the phone's GLES backend). The dock hides while the drawer is open via dockSuppressed (not dockRevealed: a pinned dock ignores dockRevealed — Dock.qml only lets dockSuppressed beat effectivePinned), and is restored on close. Both bodies fill 0.78 of the panel instead of 0.7. Grid is configurable: Config.options.overview.appGrid {columns, rows, iconSize} (new nested block — the legacy overview rows/columns are the desktop workspace-grid knobs and were left untouched), surfaced in the settings app as the new "Home screen" page (modules/settings/OverviewConfig.qml, registered in qmldir + both pages arrays). AppGrid clamps user values (cols/rows 1-10, icon 24-96) with phone defaults as fallback. Device acceptance still open: drawer appearance, keyboard-less open + tap-to-type, dock hiding, grid page in settings.

Goal

The shell's overview (~/.config/quickshell/souveraine/modules/ii/overview/) is stock ii's desktop overview — workspace thumbnails + search — patched for OSK behavior. On a 5.5" phone the workspace grid is dead weight. Replace the pane's body with a paged app grid (the thing a phone home key opens): icon grid from the desktop-entry list, alphabetical, paged horizontally, long-press for app actions later. Search stays exactly as-is on top — it already works on the laptop and the OSK dance is already solved there. The phone regression still needs device acceptance.

The pill's second-stage swipe currently sets GlobalStates.missionControlOpen, but no surface consumes that state. Build the missing Auxo-like multitasking surface: horizontally swiped live app cards from the foreign-toplevel list, tap to focus, close affordance, and a Home card. This is separate from the app grid/search page.

Single-tapping the pill is Home after the existing 350ms double-tap window: close overview/mission-control/OSK and focus workspace 1. Double-tap keeps its fullscreen toggle. This is also the escape from Hyprland's internal special workspace (2147483646, surfaced to Casey as workspace 48/50) after a failed standalone window.

Prior art

  • xarbit/plasma6-applet-appgrid (GitHub) — KDE Plasma 6 applet; steal the layout ideas (grid sizing, page dots, keyboard-less navigation), not code (QML but Plasma-API-bound, and we are not Plasma).
  • In-tree: services/LauncherApps.qml (41 lines — already exposes the desktop-entry list the dock/launcher uses) and the overview's SearchWidget.qml for how results launch apps.
  • Local reference snapshots in ~/Downloads / ~/Projects (Casey: various launcher implementations worth a skim before layout decisions).

Context / constraints

  • The overview files carry a load-bearing 2026-07-07 patch: OSK open/close sync and the focus-grab opt-out (wvkbd/squeekboard can't join Hyprland's focus-grab whitelist). Read the header comments in Overview.qml and OnScreenKeyboard.qml before touching dismissal logic — two shield-window attempts already failed on device.
  • Icon theme: shell now runs with QS_ICON_THEME=Papirus-Dark (drop-in on souveraine-shell.service); app icons in /usr/local and ~/.local hicolor prefixes need index.theme present (deploy scripts seed it).
  • Keep the diff-against-upstream-ii discipline: new grid lives in its own QML file(s); Overview.qml only swaps the body widget, so ii updates stay mergeable.
  • Desktop evidence 2026-07-21: DesktopEntries=53, AppSearch=53, a typed query returned eight results and rendered them. Do not rewrite the search backend to fix a phone-only/stale-shell symptom.
  • Phone evidence 2026-07-21 after reboot: the live backend returned seven results for settings, and ScriptModel instantiated all seven, but the dynamic Qt5Compat.GraphicalEffects.OpacityMask layer around the results column did not present them on the Adreno/GLES path. The mask was removed; the containing rectangle already clips the list. After the controlled shell restart the live list measured count=7, height=368, contentHeight=348 with one Quickshell process. Visual/touch confirmation remains the last device acceptance step. Casey confirmed the search list renders on device.
  • Related field finding 2026-07-21 ("overview page 100"): not an overview bug — the overview shows the workspace group of the active Hyprland workspace, and hyprgrass 1-finger swipe with the default gestures:workspace_swipe_create_new=true had ratcheted the active workspace id to 100 over days (each rightward swipe mints the next empty workspace; empties behind evaporate, so no gesture leads home). Fixed on the phone: workspace_swipe_create_new = false in ~/.config/hypr/hyprland.lua (gestures block, applied live via hyprctl eval); swipe now only moves between existing workspaces. Recovery dispatch syntax on the phone's Lua-eval hyprctl: hyprctl dispatch "hl.dsp.focus({ workspace = 1 })".

Acceptance

Overview open → app grid visible, correct icons, tap launches, search still works with OSK, close behaves (Escape / toggle / launch). Second-stage pill swipe → running-app cards; card focus/close works. Single pill tap always lands on workspace 1; double tap still toggles fullscreen. No regression in the OSK-open dismissal behavior.

Connects to

TASK-04 (notification server — same shell), the OSK floating-panel bug (separate thread; squeekboard anchoring), launcher desktop-entry hygiene.