diff --git a/src/ModMan/Web/Platform/Windows/TitleHandlerWindows.cpp b/src/ModMan/Web/Platform/Windows/TitleHandlerWindows.cpp new file mode 100644 index 00000000..d4cf320d --- /dev/null +++ b/src/ModMan/Web/Platform/Windows/TitleHandlerWindows.cpp @@ -0,0 +1,63 @@ +#include "AssetHandlerWindows.h" + +#if defined(WEBVIEW_PLATFORM_WINDOWS) && defined(WEBVIEW_EDGE) + +#include "PlatformUtilsWindows.h" +#include "Web/UiAssets.h" + +#include +#include +#include +#include +#include +#include + +using namespace PLATFORM_NAMESPACE_WINDOWS; + +namespace +{ + HRESULT HandleTitleChanged(ICoreWebView2* core, HWND window) + { + LPWSTR title; + + if (!SUCCEEDED(core->get_DocumentTitle(&title))) + { + std::cerr << "Failed to get title\n"; + return S_FALSE; + } + + SetWindowTextW(window, title); + CoTaskMemFree(title); + + return S_OK; + } +} // namespace + +namespace PLATFORM_NAMESPACE_WINDOWS +{ + void InstallTitleHandler(webview::webview& wv) + { + const auto controller = static_cast(wv.browser_controller().value()); + auto window = static_cast(wv.window().value()); + Microsoft::WRL::ComPtr core; + if (!SUCCEEDED(controller->get_CoreWebView2(&core))) + { + std::cerr << "Failed to get webview\n"; + return; + } + + EventRegistrationToken token; + if (!SUCCEEDED(core->add_DocumentTitleChanged(Microsoft::WRL::Callback( + [window](ICoreWebView2* sender, IUnknown* args) -> HRESULT + { + return HandleTitleChanged(sender, window); + }) + .Get(), + &token))) + { + std::cerr << "Failed to add title handler\n"; + } + } +} // namespace PLATFORM_NAMESPACE_WINDOWS + +#endif diff --git a/src/ModMan/Web/Platform/Windows/TitleHandlerWindows.h b/src/ModMan/Web/Platform/Windows/TitleHandlerWindows.h new file mode 100644 index 00000000..2804a417 --- /dev/null +++ b/src/ModMan/Web/Platform/Windows/TitleHandlerWindows.h @@ -0,0 +1,16 @@ +#pragma once + +#include "Web/Platform/Platform.h" + +#include + +#if defined(WEBVIEW_PLATFORM_WINDOWS) && defined(WEBVIEW_EDGE) + +#include "Web/WebViewLib.h" + +namespace PLATFORM_NAMESPACE_WINDOWS +{ + void InstallTitleHandler(webview::webview& wv); +} // namespace PLATFORM_NAMESPACE_WINDOWS + +#endif diff --git a/src/ModMan/main.cpp b/src/ModMan/main.cpp index 14384981..cc42c884 100644 --- a/src/ModMan/main.cpp +++ b/src/ModMan/main.cpp @@ -4,6 +4,7 @@ #include "Web/Binds/Binds.h" #include "Web/Platform/AssetHandler.h" #include "Web/Platform/Windows/FaviconHandlerWindows.h" +#include "Web/Platform/Windows/TitleHandlerWindows.h" #include "Web/UiCommunication.h" #include "Web/ViteAssets.h" #include "Web/WebViewLib.h" @@ -34,6 +35,7 @@ namespace context.m_dev_tools_webview = std::make_unique(false, nullptr); auto& newWindow = *context.m_dev_tools_webview; InstallFaviconHandler(newWindow); + InstallTitleHandler(newWindow); newWindow.set_title("Devtools"); newWindow.set_size(640, 480, WEBVIEW_HINT_NONE); @@ -69,6 +71,7 @@ namespace InstallAssetHandler(newWindow); InstallFaviconHandler(newWindow); + InstallTitleHandler(newWindow); ui::RegisterAllBinds(newWindow); #ifdef _DEBUG