From d64fde172c01f178fe65746b770100ad84b792a4 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 3 Jul 2026 13:23:23 +0400 Subject: [PATCH] Ctrl+W close active rich message editor window. --- Telegram/SourceFiles/core/application.cpp | 5 +++- .../iv/editor/iv_editor_window.cpp | 26 ++++++++++++++++++- .../SourceFiles/iv/editor/iv_editor_window.h | 2 ++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/core/application.cpp b/Telegram/SourceFiles/core/application.cpp index aeb5a6008c..9be1f88a3a 100644 --- a/Telegram/SourceFiles/core/application.cpp +++ b/Telegram/SourceFiles/core/application.cpp @@ -47,6 +47,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "iv/iv_instance.h" #include "iv/iv_data.h" #include "iv/editor/iv_editor_session.h" +#include "iv/editor/iv_editor_window.h" #include "lang/lang_translator.h" #include "lang/lang_cloud_manager.h" #include "lang/lang_hardcoded.h" @@ -1685,7 +1686,9 @@ bool Application::closeActiveWindow() { if (_mediaView && _mediaView->isActive()) { _mediaView->close(); return true; - } else if (_iv->closeActive() || calls().closeCurrentActiveCall()) { + } else if (_iv->closeActive() + || Iv::Editor::CloseActiveWindow() + || calls().closeCurrentActiveCall()) { return true; } else if (const auto window = activeWindow()) { if (window->widget()->isActive()) { diff --git a/Telegram/SourceFiles/iv/editor/iv_editor_window.cpp b/Telegram/SourceFiles/iv/editor/iv_editor_window.cpp index 10fb184a61..28af79f863 100644 --- a/Telegram/SourceFiles/iv/editor/iv_editor_window.cpp +++ b/Telegram/SourceFiles/iv/editor/iv_editor_window.cpp @@ -23,14 +23,28 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #endif // Q_OS_WIN || Q_OS_MAC namespace Iv::Editor { +namespace { + +[[nodiscard]] std::vector> &LiveWindows() { + static auto result = std::vector>(); + return result; +} + +} // namespace Window::Window(QWidget *parent) : Ui::RpWindow(parent) , _layers(std::make_unique(body())) { _layers->setHideByBackgroundClick(true); + LiveWindows().push_back(this); } -Window::~Window() = default; +Window::~Window() { + auto &list = LiveWindows(); + list.erase( + ranges::remove(list, not_null(this)), + end(list)); +} void Window::setCloseRequestHandler(Fn handler) { _closeRequestHandler = std::move(handler); @@ -122,4 +136,14 @@ bool Window::nativeEvent( #endif // Q_OS_WIN || Q_OS_MAC +bool CloseActiveWindow() { + for (const auto &window : LiveWindows()) { + if (window->isActiveWindow()) { + window->close(); + return true; + } + } + return false; +} + } // namespace Iv::Editor diff --git a/Telegram/SourceFiles/iv/editor/iv_editor_window.h b/Telegram/SourceFiles/iv/editor/iv_editor_window.h index 77e640d023..bacfe2d4e4 100644 --- a/Telegram/SourceFiles/iv/editor/iv_editor_window.h +++ b/Telegram/SourceFiles/iv/editor/iv_editor_window.h @@ -75,4 +75,6 @@ private: }; +bool CloseActiveWindow(); + } // namespace Iv::Editor