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'sSearchWidget.qmlfor 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.qmlandOnScreenKeyboard.qmlbefore touching dismissal logic — two shield-window attempts already failed on device. - Icon theme: shell now runs with
QS_ICON_THEME=Papirus-Dark(drop-in onsouveraine-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, andScriptModelinstantiated all seven, but the dynamicQt5Compat.GraphicalEffects.OpacityMasklayer 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 measuredcount=7,height=368,contentHeight=348with 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=truehad 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 = falsein~/.config/hypr/hyprland.lua(gestures block, applied live viahyprctl 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.