114 lines
6.5 KiB
Markdown
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.
|