diff options
author | Oliver Wolff <oliver.wolff@qt.io> | 2018-01-10 10:43:58 +0100 |
---|---|---|
committer | Oliver Wolff <oliver.wolff@qt.io> | 2018-02-01 06:52:04 +0000 |
commit | 0f0d87a757fe30976c183207968e1c07f87460d5 (patch) | |
tree | 6ece0c26972890012b6bba2ed15c1b6f3870ff1f /src | |
parent | d037c87d94666f94faf2c6fbb0f5d11107496de4 (diff) |
winrt: Launch default program if unviewable content is loaded
If a file type that cannot be shown in a webview, is passed via setUrl,
the user should be asked what to do/the default program should be
opened. This behavior matches what is done, when an unknown URL scheme
is passed.
Change-Id: Ia318f14d9dcdeb8f3bbb734b342eb38a02fb3dc4
Reviewed-by: Miguel Costa <miguel.costa@qt.io>
Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/winrt/qwinrtwebview.cpp | 20 | ||||
-rw-r--r-- | src/plugins/winrt/qwinrtwebview_p.h | 3 |
2 files changed, 23 insertions, 0 deletions
diff --git a/src/plugins/winrt/qwinrtwebview.cpp b/src/plugins/winrt/qwinrtwebview.cpp index a9ae659..0faf7d1 100644 --- a/src/plugins/winrt/qwinrtwebview.cpp +++ b/src/plugins/winrt/qwinrtwebview.cpp @@ -279,6 +279,7 @@ struct WinRTWebView EventRegistrationToken navigationStartingToken; EventRegistrationToken navigationCompletedToken; + EventRegistrationToken unviewableContentToken; bool isLoading : 1; }; @@ -320,6 +321,10 @@ QWinRTWebViewPrivate::QWinRTWebViewPrivate(QObject *parent) Callback<ITypedEventHandler<WebView *, WebViewNavigationCompletedEventArgs *>>(this, &QWinRTWebViewPrivate::onNavigationCompleted).Get(), &d->navigationCompletedToken); Q_ASSERT_SUCCEEDED(hr); + hr = d->ext->add_UnviewableContentIdentified( + Callback<ITypedEventHandler<WebView *, WebViewUnviewableContentIdentifiedEventArgs *>>(this, &QWinRTWebViewPrivate::onUnviewableContent).Get(), + &d->unviewableContentToken); + Q_ASSERT_SUCCEEDED(hr); ComPtr<IDisplayInformationStatics> displayInformationStatics; hr = RoGetActivationFactory(HString::MakeReference(RuntimeClass_Windows_Graphics_Display_DisplayInformation).Get(), @@ -347,6 +352,9 @@ QWinRTWebViewPrivate::~QWinRTWebViewPrivate() Q_ASSERT_SUCCEEDED(hr); hr = d->ext->remove_NavigationCompleted(d->navigationCompletedToken); Q_ASSERT_SUCCEEDED(hr); + hr = d->ext->remove_UnviewableContentIdentified(d->unviewableContentToken); + Q_ASSERT_SUCCEEDED(hr); + ComPtr<IVector<UIElement *>> children; hr = d->host->get_Children(&children); Q_ASSERT_SUCCEEDED(hr); @@ -680,3 +688,15 @@ HRESULT QWinRTWebViewPrivate::onNavigationCompleted(IWebView *, IWebViewNavigati emit loadProgressChanged(100); return S_OK; } + +HRESULT QWinRTWebViewPrivate::onUnviewableContent(IWebView *, IWebViewUnviewableContentIdentifiedEventArgs *args) +{ + HRESULT hr; + ComPtr<IUriRuntimeClass> uri; + hr = args->get_Uri(&uri); + Q_ASSERT_SUCCEEDED(hr); + ComPtr<IAsyncOperation<bool>> op; + hr = d->launcherStatics->LaunchUriAsync(uri.Get(), &op); + Q_ASSERT_SUCCEEDED(hr); + return S_OK; +} diff --git a/src/plugins/winrt/qwinrtwebview_p.h b/src/plugins/winrt/qwinrtwebview_p.h index 2b7d937..3756b7d 100644 --- a/src/plugins/winrt/qwinrtwebview_p.h +++ b/src/plugins/winrt/qwinrtwebview_p.h @@ -58,6 +58,7 @@ namespace ABI { struct IWebView; struct IWebViewNavigationStartingEventArgs; struct IWebViewNavigationCompletedEventArgs; + struct IWebViewUnviewableContentIdentifiedEventArgs; } } } @@ -101,6 +102,8 @@ protected: private: HRESULT onNavigationStarted(ABI::Windows::UI::Xaml::Controls::IWebView *, ABI::Windows::UI::Xaml::Controls::IWebViewNavigationStartingEventArgs *); HRESULT onNavigationCompleted(ABI::Windows::UI::Xaml::Controls::IWebView *, ABI::Windows::UI::Xaml::Controls::IWebViewNavigationCompletedEventArgs *); + HRESULT onUnviewableContent(ABI::Windows::UI::Xaml::Controls::IWebView *, + ABI::Windows::UI::Xaml::Controls::IWebViewUnviewableContentIdentifiedEventArgs *); QScopedPointer<WinRTWebView> d; }; |