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

114 lines
6.5 KiB
Markdown

# 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.