Show the NFD error message in the file selector failure popup.

When the native dialog failed, the popup said "File selector cannot
be displayed. Check nfd library implementation for details." but never
showed any details: NFD_GetError() was never read, so the actual
failure reason (e.g. the xdg-desktop-portal lacking a FileChooser
implementation on the session) was invisible and the user was stuck
without a way to open or save traces.

Capture NFD_GetError() into a static string when
NFD_OpenDialogU8_With()/NFD_SaveDialogU8_With() return NFD_ERROR and
display it in the popup. The copy is required: the returned pointer
references NFD-internal storage (the D-Bus error message or a static
buffer) that is overwritten by the next NFD call or cleared on
shutdown. In TRACY_NO_FILESELECTOR builds no NFD exists, so the
previous fallback line is kept there.

The error is shown as a single line (TextUnformatted) rather than
wrapped: in an AlwaysAutoResize window the wrap width is derived from
the previous frame's window size, which feeds back into the auto-size
and oscillates, converging to a narrow multi-line column for a ~110
character D-Bus message.
This commit is contained in:
Bartosz Taudul
2026-08-21 20:06:44 +02:00
parent 5257132d97
commit 246139fb04
3 changed files with 31 additions and 1 deletions

View File

@@ -1280,7 +1280,15 @@ static void DrawContents()
if( ImGui::BeginPopupModal( "File selector is not available", nullptr, ImGuiWindowFlags_AlwaysAutoResize ) )
{
ImGui::TextUnformatted( "File selector cannot be displayed." );
ImGui::TextUnformatted( "Check nfd library implementation for details." );
if( const auto err = tracy::Fileselector::GetError() )
{
ImGui::Separator();
ImGui::TextUnformatted( err );
}
else
{
ImGui::TextUnformatted( "Check nfd library implementation for details." );
}
ImGui::Separator();
if( ImGui::Button( "Ok" ) ) ImGui::CloseCurrentPopup();
ImGui::EndPopup();