From 08daa13dbf9338bbd7c31c81f1b6ae2835a706e0 Mon Sep 17 00:00:00 2001 From: Leonard Hecker Date: Mon, 8 Sep 2025 20:39:39 +0200 Subject: [PATCH] wip --- src/cascadia/WindowsTerminal/AppHost.cpp | 2 +- src/cascadia/WindowsTerminal/WindowEmperor.cpp | 10 ++++++++++ src/cascadia/WindowsTerminal/WindowEmperor.h | 1 + 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/cascadia/WindowsTerminal/AppHost.cpp b/src/cascadia/WindowsTerminal/AppHost.cpp index 51a616a519..00fa1fa175 100644 --- a/src/cascadia/WindowsTerminal/AppHost.cpp +++ b/src/cascadia/WindowsTerminal/AppHost.cpp @@ -1140,7 +1140,7 @@ void AppHost::_WindowMoved() void AppHost::_CloseRequested(const winrt::Windows::Foundation::IInspectable& /*sender*/, const winrt::Windows::Foundation::IInspectable& /*args*/) { - PostMessageW(_windowManager->GetMainWindow(), WindowEmperor::WM_CLOSE_TERMINAL_WINDOW, 0, reinterpret_cast(this)); + _windowManager->CloseWindow(this); } void AppHost::_PropertyChangedHandler(const winrt::Windows::Foundation::IInspectable& /*sender*/, diff --git a/src/cascadia/WindowsTerminal/WindowEmperor.cpp b/src/cascadia/WindowsTerminal/WindowEmperor.cpp index 5b6c9fd833..51885d6037 100644 --- a/src/cascadia/WindowsTerminal/WindowEmperor.cpp +++ b/src/cascadia/WindowsTerminal/WindowEmperor.cpp @@ -278,6 +278,16 @@ void WindowEmperor::CreateNewWindow(winrt::TerminalApp::WindowRequestedArgs args } } +void WindowEmperor::CloseWindow(AppHost* host) const +{ + using namespace winrt::Windows::System; + + const auto dispatcherQueue = DispatcherQueue::GetForCurrentThread(); + dispatcherQueue.TryEnqueue(DispatcherQueuePriority::Low, [hwnd = _window.get(), host]() { + PostMessageW(hwnd, WM_CLOSE_TERMINAL_WINDOW, 0, reinterpret_cast(host)); + }); +} + AppHost* WindowEmperor::_mostRecentWindow() const noexcept { int64_t max = INT64_MIN; diff --git a/src/cascadia/WindowsTerminal/WindowEmperor.h b/src/cascadia/WindowsTerminal/WindowEmperor.h index c64b8c5fef..5f94c14a8e 100644 --- a/src/cascadia/WindowsTerminal/WindowEmperor.h +++ b/src/cascadia/WindowsTerminal/WindowEmperor.h @@ -34,6 +34,7 @@ public: AppHost* GetWindowById(uint64_t id) const noexcept; AppHost* GetWindowByName(std::wstring_view name) const noexcept; void CreateNewWindow(winrt::TerminalApp::WindowRequestedArgs args); + void CloseWindow(AppHost* host) const; void HandleCommandlineArgs(int nCmdShow); private: