diff --git a/src/cascadia/TerminalApp/Resources/en-US/Resources.resw b/src/cascadia/TerminalApp/Resources/en-US/Resources.resw index ce6b1d0e656..15f42ebb3f6 100644 --- a/src/cascadia/TerminalApp/Resources/en-US/Resources.resw +++ b/src/cascadia/TerminalApp/Resources/en-US/Resources.resw @@ -1,17 +1,17 @@  - @@ -652,4 +652,13 @@ Close all tabs after the current tab + + This link is invalid: + + + This link type is currently not supported: + + + Cancel + \ No newline at end of file diff --git a/src/cascadia/TerminalApp/TerminalPage.cpp b/src/cascadia/TerminalApp/TerminalPage.cpp index ceb86a52481..3383a5cded8 100644 --- a/src/cascadia/TerminalApp/TerminalPage.cpp +++ b/src/cascadia/TerminalApp/TerminalPage.cpp @@ -1805,8 +1805,37 @@ namespace winrt::TerminalApp::implementation { ShellExecute(nullptr, L"open", eventArgs.Uri().c_str(), nullptr, nullptr, SW_SHOWNORMAL); } + else + { + _ShowCouldNotOpenDialog(RS_(L"UnsupportedSchemeText"), eventArgs.Uri()); + } + } + catch (...) + { + LOG_CAUGHT_EXCEPTION(); + _ShowCouldNotOpenDialog(RS_(L"InvalidUriText"), eventArgs.Uri()); + } + } + + // Method Description: + // - Opens up a dialog box explaining why we could not open a URI + // Arguments: + // - The reason (unsupported scheme, invalid uri, potentially more in the future) + // - The uri + void TerminalPage::_ShowCouldNotOpenDialog(winrt::hstring reason, winrt::hstring uri) + { + if (auto presenter{ _dialogPresenter.get() }) + { + // FindName needs to be called first to actually load the xaml object + auto unopenedUriDialog = FindName(L"CouldNotOpenUriDialog").try_as(); + + // Insert the reason and the URI + CouldNotOpenUriReason().Text(reason); + UnopenedUri().Text(uri); + + // Show the dialog + presenter.ShowDialog(unopenedUriDialog); } - CATCH_LOG(); } // Method Description: diff --git a/src/cascadia/TerminalApp/TerminalPage.h b/src/cascadia/TerminalApp/TerminalPage.h index ac68997afae..95fa56afce9 100644 --- a/src/cascadia/TerminalApp/TerminalPage.h +++ b/src/cascadia/TerminalApp/TerminalPage.h @@ -173,6 +173,7 @@ namespace winrt::TerminalApp::implementation const Microsoft::Terminal::TerminalControl::PasteFromClipboardEventArgs eventArgs); void _OpenHyperlinkHandler(const IInspectable sender, const Microsoft::Terminal::TerminalControl::OpenHyperlinkEventArgs eventArgs); + void _ShowCouldNotOpenDialog(winrt::hstring reason, winrt::hstring uri); bool _CopyText(const bool singleLine, const Windows::Foundation::IReference& formats); void _PasteText(); diff --git a/src/cascadia/TerminalApp/TerminalPage.xaml b/src/cascadia/TerminalApp/TerminalPage.xaml index c872b325029..cd3858698c9 100644 --- a/src/cascadia/TerminalApp/TerminalPage.xaml +++ b/src/cascadia/TerminalApp/TerminalPage.xaml @@ -68,6 +68,20 @@ the MIT License. See LICENSE in the project root for license information. --> DefaultButton="Primary"> + + + + + + + +