uttrflow / uttrflow/uttrflow-swift

A picture paste that fails closes the panel and tells the user nothing

Open
#582 0 comments 0 reactions 0 assignees View on GitHub
area:clipboard bug P2
Dominant language
Swift
Stars
4
Forks
17
Avg merge
3h 32m
Merged PRs (30d)
277

Description

## What happens

`insertImage(_:)` (`Sources/Uttrflow/AppDelegate.swift:1028-1046`) runs after the panel has already closed (`:842-844`). Both of its failures only write to the log:

- The picture file has gone between drawing the panel and pressing Return: `Self.log.error("picture missing at paste: …")`, then `return`. Nothing is written to the clipboard.
- `CGEventKeystrokeSender().sendPaste()` throws, for example when Accessibility was revoked after the panel opened, or when Secure Event Input is on: `Self.log.error("picture paste refused: …")`. The picture is on the clipboard, but the user is not told to press ⌘V.

The text path's equivalent is covered: the text insertion coordinator's last strategy leaves the text on the clipboard, and copy-only mode is announced before Return (`toggleQuickPanel`, `:776-779`). Pictures have neither.

## Why it matters

The user picks a screenshot, the panel vanishes, and nothing appears where they were typing. They cannot tell whether to press ⌘V, whether the picture was lost, or whether to try again. VoiceOver users get no signal at all.

## Acceptance criteria

- If the file is missing at paste time, the user is told, either by keeping the panel open with the existing "That picture is no longer on this Mac" notice or through the menu-bar feedback dictation failures use.
- If `sendPaste` refuses, the user is told the picture is on the clipboard and to press ⌘V, matching the copy-only wording in `PanelInsertionObstacle.notice`.
- The decision about which surface speaks after the panel is gone is written in `Docs/app-quick-panel.md`.

Contributor guide

Open the contributing guide

Research direction

Start in Sources/Uttrflow/AppDelegate.swift at toggleQuickPanel (:776-779) and insertImage(_:) (:842-844, :1028-1046), then read PanelInsertionObstacle.notice and Docs/app-quick-panel.md. Trace the existing text copy-only feedback and decide which surface should speak after the panel closes. Done means both picture failure paths give the user actionable feedback and the chosen surface is documented.

Written by the indexing model from the issue text.

Assessment

Tech stack
macos, swift
Domain
accessibility, desktop, documentation
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
72/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.