Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Floating toolbar: make dragging predictable and keep Position as a secondary fallback

Open
#163 2 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
42/100
Issue type
Feature
Clarity
Clearly specified
Activity status
Active
Tech stack
swift
Domain
desktop

Research direction

Start in Sources/LocalVoice/CapturePanel.swift (drag snap to eight anchors) and Sources/LocalVoice/FloatingToolbar.swift (Position submenu). Implement free placement after a 4-point drag threshold, 16-point dock snap with a guide, bounds clamping, and replace the eight-item submenu with a compact Position control; persist per existing owner. Done when the listed acceptance checks pass for drag vs click, snap vs free release, collapse/reveal, keyboard placement, and relaunch.

Written by the indexing model from the issue text.

Description

enhancement

Outcome and evidence

P3, user-requested usability refinement, source-confirmed current behaviour. The toolbar offers dragging and an eight-item Position submenu. The user wants direct movement to be natural, with less menu clutter.

Workbench Preview 2.3.0, build 20260928054038, source 00be555139f87d4557f48fcffc132b8621c251a2, unmodified source, macOS 26.5.1 (25F80), Apple M5, built-in display. Identity verified in the running app using Copy build details on 28 September 2026.

The full toolbar drag/anchor matrix was not run in this audit. Do not describe free placement as an existing broken feature.

Current owner

Source links below pin the earlier audited commit 9578d8cf; the relevant paths were checked against installed 00be5551 and the described behaviour is unchanged. Source findings and native observations are distinguished below.

CapturePanel.swift snaps every completed drag to the nearest of eight anchors. FloatingToolbar.swift exposes those anchors in Position. The row supports dragging from glyph/primary/divider, while mode chips and Prompts retain click behaviour.

Decision

Use free placement by default. A drag beginning on the glyph, primary control or empty chrome moves the toolbar after a 4-point movement threshold; a click below that threshold keeps its existing action. Mode chips and the prompt picker remain ordinary controls.

Snap only when the pointer releases within 16 logical points of an available dock target, with a visible guide while that target is active. Releasing elsewhere preserves the chosen free position. Clamp the toolbar inside the available display bounds and expand inward near edges.

Replace the eight-anchor submenu in the mode menu with one Position… command opening a compact keyboard-accessible placement control. It offers the existing named anchors and a reset to a visible default. This retains precision/accessibility without a cascading menu tree. Update Grammar/surface registry and the owning placement contract as part of this bounded behaviour change.

Persist position per existing owner. Keep later manual placement through collapse/reveal, relaunch and display removal. Reuse consistent drag threshold, snapping and off-screen recovery semantics for Persona where appropriate while retaining independent per-copy state. Persona edge resizing belongs to #157; the toolbar sizes to its content.

Acceptance

  • Drag from the intended chrome without firing its click action; clearly distinguish moving from mode selection.
  • Release beyond the 16-point dock zone and retain the chosen free position; within it, show the guide and snap to that target. Movement below 4 points remains a click.
  • Expanding/collapsing preserves expected placement and pointer targets.
  • Keyboard position choices and off-screen recovery remain available.
  • Relaunch and available display changes preserve later manual choices; record unavailable multi-display tests.
  • Geometry correction is verified first, so clipping does not distort the placement test.

Related: #134. Closed #84 consolidated Position presentation while preserving eight-anchor behaviour; this request concerns the user experience, not repeating that refactor.

Dominant language
Swift
Stars
0
Forks
1
Avg merge
8h 5m
Merged PRs (30d)
215

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from Ship-Work/workbench

All issues in Ship-Work/workbench

Similar issues

More Swift issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.