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">
+
+
+
+
+
+
+
+