Skip to content

Home "Delete meeting" confirmation never appears #1125

@acorretti

Description

@acorretti

Reported on main after rebasing onto upstream.

What happens

In Settings → Home, opening a recent meeting's ⋯ overflow menu and choosing Delete meeting does nothing: no confirmation dialog, no deletion. The other menu actions behave like this:

  • Show transcript in Finder / Show audio in Finder — work
  • Report issue — works (opens the feedback sheet)
  • Delete meeting — dead (no popup, no action)

Root cause

Two stacked defects on the Home recent-meeting row path:

  1. Menu handler ran inside the menu modal loop. ClosureMenuItem.invoke() (in HomeView.swift) called its handler synchronously, while still inside NSMenu.popUp's modal event-tracking loop. SwiftUI will not present an .alert(item:) / .sheet(item:) from that nested loop, so the Delete handler set homeDeleteConfirmation but nothing showed. PR Fix Home dashboard row actions, hover reveal, and stats focus ring #1110 fixed the handler firing at all (it previously no-op'd on a deallocated weak target), which exposed this next layer.

  2. Three legacy .alert(item:) were stacked on one view. homeDeleteConfirmation, homeDeleteFailure, and pendingAudioRetentionWindow each had their own .alert(item:) on the settings root (TranscriptedSettingsView.swift). SwiftUI keeps only the last stacked legacy alert, so the delete confirmation (first) and the delete-failure alert were both shadowed. Only the audio-retention alert (last) could present.

Report issue opens a .sheet, and stacked sheets do not shadow each other, so it only needed fix 1.

Repro

  1. Settings → Home
  2. ⋯ on any recent meeting → Delete meeting
  3. Expected: confirmation dialog. Actual: nothing.

Fix

  • Defer ClosureMenuItem's handler to the next main-runloop turn (off the menu loop), keeping the handler owned by the item so it cannot deallocate first.
  • Collapse the three stacked alerts into a single .alert(item: rootAlertBinding) that presents whichever state is set; call sites unchanged.

Fix + source-contract coverage in the linked PR.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions