What happened?
Expected
Long-press opens the context menu on every row. The on-screen hint says so: "Long-press a server to switch, set as default, or remove it."
Actual
On an inactive row the switch fires immediately, so on build 20 you get the "Couldn't switch server" alert from Issue 1 instead of a menu. There is consequently no way to remove or pin an inactive server from this screen.
Note this is a separate defect from Issue 74 and would misbehave even with a valid token — you would simply be switched to that server rather than shown the menu you asked for.
Steps to reproduce
- Settings → Servers, with two or more servers configured.
- Long-press the active server → the context menu opens (Set as Default / Edit URLs / Remove). Correct.
- Long-press any inactive server → no context menu; the app attempts a server switch instead.
Sodalite build
1.0.0 (20)
tvOS version
26
Apple TV model
Apple TV 4k gen 3
Jellyfin server version
10.11.11
Media (if a playback bug)
No response
Anything else
This is Claude's analysis of the issue after reviewing the current code base
Diagnosis
StableTapModifier (Components/StableTap.swift) implements row activation on tvOS as:
#if os(tvOS)
.onLongPressGesture(minimumDuration: 0.01) { fireIfStable() }
#else
.onTapGesture { action() }
#endif
The action fires roughly 10 ms into any press, so a deliberate long press triggers the row's primary action before, and in competition with, the .contextMenu attached in ServerManagementView.
The asymmetry between active and inactive rows is explained by the guard in ServerManagementView.switchTo(_:):
guard server.id != activeID else { return }
On the active row the primary action is a no-op, so the context menu comes through unobstructed. On every other row it is not.
Suggested fix
On tvOS, gate the primary action on a press that is not long — e.g. a bounded press gesture, or suppressing stableTap's action while a context menu is presenting. Any row in the app that pairs stableTap with .contextMenu is affected by the same interaction, so the fix probably belongs in StableTapModifier rather than in ServerManagementView.
What happened?
Expected
Long-press opens the context menu on every row. The on-screen hint says so: "Long-press a server to switch, set as default, or remove it."
Actual
On an inactive row the switch fires immediately, so on build 20 you get the "Couldn't switch server" alert from Issue 1 instead of a menu. There is consequently no way to remove or pin an inactive server from this screen.
Note this is a separate defect from Issue 74 and would misbehave even with a valid token — you would simply be switched to that server rather than shown the menu you asked for.
Steps to reproduce
Sodalite build
1.0.0 (20)
tvOS version
26
Apple TV model
Apple TV 4k gen 3
Jellyfin server version
10.11.11
Media (if a playback bug)
No response
Anything else
This is Claude's analysis of the issue after reviewing the current code base
Diagnosis
StableTapModifier(Components/StableTap.swift) implements row activation on tvOS as:The action fires roughly 10 ms into any press, so a deliberate long press triggers the row's primary action before, and in competition with, the
.contextMenuattached inServerManagementView.The asymmetry between active and inactive rows is explained by the guard in
ServerManagementView.switchTo(_:):On the active row the primary action is a no-op, so the context menu comes through unobstructed. On every other row it is not.
Suggested fix
On tvOS, gate the primary action on a press that is not long — e.g. a bounded press gesture, or suppressing
stableTap's action while a context menu is presenting. Any row in the app that pairsstableTapwith.contextMenuis affected by the same interaction, so the fix probably belongs inStableTapModifierrather than inServerManagementView.