Skip to content

Commit 46db912

Browse files
levinli303claude
andcommitted
Handle time link click directly instead of via NavigateUri
NavigateUri with custom celestia:// scheme gets access denied in packaged WinUI apps. Handle Click event and set time directly. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent eae30d6 commit 46db912

1 file changed

Lines changed: 26 additions & 1 deletion

File tree

CelestiaWinUI/InfoUserControl.xaml.cpp

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,32 @@ namespace winrt::CelestiaWinUI::implementation
9090
strong_this->DetailLabel().Inlines().Append(prefixRun);
9191

9292
Microsoft::UI::Xaml::Documents::Hyperlink hyperlink;
93-
hyperlink.NavigateUri(Uri(link.URL));
93+
auto linkURL = link.URL;
94+
hyperlink.Click([weak_this{ strong_this->get_weak() }, linkURL](Microsoft::UI::Xaml::Documents::Hyperlink const&, Microsoft::UI::Xaml::Documents::HyperlinkClickEventArgs const&)
95+
{
96+
auto strong_this{ weak_this.get() };
97+
if (strong_this == nullptr) return;
98+
auto uri = Uri(linkURL);
99+
strong_this->renderer.EnqueueTask([weak_this, uri]()
100+
{
101+
auto strong_this{ weak_this.get() };
102+
if (strong_this == nullptr) return;
103+
auto parsed = uri.QueryParsed();
104+
if (parsed != nullptr)
105+
{
106+
auto julianDayStr = parsed.GetFirstValueByName(L"julianDay");
107+
if (!julianDayStr.empty())
108+
{
109+
wchar_t* end = nullptr;
110+
double julianDay = std::wcstod(julianDayStr.c_str(), &end);
111+
if (end != julianDayStr.c_str())
112+
{
113+
strong_this->appCore.Simulation().JulianDay(julianDay);
114+
}
115+
}
116+
}
117+
});
118+
});
94119
Microsoft::UI::Xaml::Documents::Run linkRun;
95120
linkRun.Text(hstring(timeStr));
96121
hyperlink.Inlines().Append(linkRun);

0 commit comments

Comments
 (0)