Skip to content

dock: polish the app grid - #17539

Open
itscallssh wants to merge 2 commits into
omacom:quattrofrom
itscallssh:dock-app-grid-polish
Open

itscallssh wants to merge 2 commits into
omacom:quattrofrom
itscallssh:dock-app-grid-polish

Conversation

@itscallssh

@itscallssh itscallssh commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

dock: polish the app grid

What

Polishes the dock's app grid (shell/plugins/dock/AppGrid.qml) and adds
automated tests for it (test/shell.d/app-grid-test.sh).

Changes

  • Selection tile: hugs the icon and name and is padded evenly, so there's no extra gap below one-line names.
  • Search: the search line is now a FilterInput, so input methods (IME) work.
  • Hover: selection changes only on real pointer movement (PointerMoveGate), not when the grid scrolls under a still cursor.
  • Keyboard: Home/End/PageUp/PageDown/Tab are supported; Up/Down stop at the edges instead of wrapping.
  • Scrolling: matches the menu, with a peeking row, edge scrims and the same wheel behavior.
  • Scroll position: preserved when the app list changes while the dock is open.
  • Tests: new shell test covering the app grid.

Testing

bash test/shell.d/app-grid-test.sh

‌Screenshots

Before:
image

After:
image

@greptile-apps

greptile-apps Bot commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerView in GreptileConfidence Score: 4/5

[Medium impact] The changes stay within the dock's app-grid browsing workflow.

The new tests must exercise the code used by AppGrid.qml to satisfy the repository’s testing requirement before merging.

Fix All in CursorFindings

  1. P2 Tests miss the running grid ▶
  2. P2 Tests check strings, not behavior ▶
  3. P2 Press motion breaks shell rules ▶
  4. P2 Dock tests are split ▶

Summary

Polishes the app grid’s selection tiles, search input, keyboard controls, hover behavior, and scrolling.

  • The dock app grid accepts composed text in its search field.
  • Keyboard users can jump through app rows without wrapping.
  • The app grid keeps the selected app visible while browsing.
  • The app selection tile now hugs its icon and name.

Reviews (2) · Last reviewed commit: "Improve app grid navigation, scrolling, ..." · Reviewed by Greptile

Comment on lines +96 to +103
assert(/FilterInput\s*\{[^}]*keyHandler:\s*keyCatcher/.test(source), 'the search line is a FilterInput the grid handles keys for, so input methods reach it')
assert(!/root\.filterText\s*\+\s*event\.text/.test(source), 'the grid does not type into the search itself, which would leave input methods out')
assert(!/Qt\.callLater\(function\(\) \{ keyCatcher\.forceActiveFocus/.test(source), 'focus goes to the search line, not to the key catcher behind it')

assert(/PointerMoveGate\s*\{/.test(source) && /pointerGate\.moved\(/.test(source), 'hover selects through the pointer gate, so scrolling cells do not take the selection')
assert(!/onContainsMouseChanged/.test(source), 'hover does not select on cells arriving under a resting pointer')

assert(/WheelHandler\s*\{/.test(source) && /GradientStop/.test(source) && !/ScrollBar|scrollbar/i.test(source), 'the grid scrolls the way the menu does: its wheel and edge scrims, no scrollbar')

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Tests check strings, not behavior

These assertions match strings in AppGrid.qml instead of testing what the grid does. AGENTS.md explicitly forbids tests that restate the implementation by checking source text. They can pass with broken behavior and fail after harmless rewrites. Remove them or replace them with behavior checks before merging.

File Used: AGENTS.md (source)

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Fix in Cursor

scale: cellMouse.pressed && !cell.moved ? 0.92 : 1
Behavior on scale {
id: pressScale
NumberAnimation { duration: Style.duration(pressScale.targetValue < 1 ? 80 : 140); easing.type: Easing.OutCubic }

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Press motion breaks shell rules

The new scale animation uses Easing.OutCubic. The motion guide required by AGENTS.md says movement must use Style.easeOut; it allows Easing.OutCubic for plain fades. Use Easing.Bezier with easing.bezierCurve: Style.easeOut before merging.

File Used: AGENTS.md (source)

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Fix in Cursor


source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)/base-test.sh"

ROOT="$ROOT" run_node_test <<'JS'

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Dock tests are split

This adds a separate test file even though dock-test.sh already covers the dock. AGENTS.md requires extending the area’s existing test file instead of adding another *-test.sh. Move the useful selectRows behavior tests into dock-test.sh before merging.

File Used: AGENTS.md (source)

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Fix in Cursor

Comment thread test/shell.d/dock-test.sh
Comment on lines +151 to +155
const gridView = (contentY, originY = 0) => ({ contentY, originY, height: 600, contentHeight: 1000 })
const peeked = (contentY, row, next, previous, originY = 0) =>
dock.gridPeekedContentY(gridView(contentY, originY), { y: row * 150, height: 150 }, 56, next, previous)
assertEqual(peeked(0, 1, true, true), 0, 'app grid leaves the view alone for a row with room around it')
assertEqual(peeked(0, 3, true, true), 56, 'app grid scrolls a peek of the next row into view past a row flush with the bottom')

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Tests miss the running grid

The new tests call helpers that AppGrid.qml never uses. The grid still keeps separate code for navigation, scrolling, and tile sizes, so these tests can pass even if that code breaks. This violates the AGENTS.md requirement that tests catch real regressions. Before merging, have AppGrid.qml use the tested helpers, or test its actual behavior instead.

File Used: AGENTS.md (source)

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Fix in Cursor

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant