From f89bac778187a38a11741dabed603154f09ba57d Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Thu, 30 Jan 2025 13:25:53 +0300 Subject: [PATCH] Improved handle of existing separated windows for shared media. --- .../info/media/info_media_buttons.cpp | 47 ++++++++----------- 1 file changed, 20 insertions(+), 27 deletions(-) diff --git a/Telegram/SourceFiles/info/media/info_media_buttons.cpp b/Telegram/SourceFiles/info/media/info_media_buttons.cpp index bc0859881..12d7827f4 100644 --- a/Telegram/SourceFiles/info/media/info_media_buttons.cpp +++ b/Telegram/SourceFiles/info/media/info_media_buttons.cpp @@ -9,6 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "base/call_delayed.h" #include "base/qt/qt_key_modifiers.h" +#include "core/application.h" #include "data/data_channel.h" #include "data/data_saved_messages.h" #include "data/data_session.h" @@ -31,7 +32,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL namespace Info::Media { namespace { -Window::SeparateSharedMediaType ToSeparateType( +[[nodiscard]] Window::SeparateSharedMediaType ToSeparateType( Storage::SharedMediaType type) { using Type = Storage::SharedMediaType; using SeparatedType = Window::SeparateSharedMediaType; @@ -52,20 +53,18 @@ Window::SeparateSharedMediaType ToSeparateType( : SeparatedType::None; } -Fn<void()> SeparateWindowFactory( - not_null<Window::SessionController*> controller, +[[nodiscard]] Window::SeparateId SeparateId( not_null<PeerData*> peer, MsgId topicRootId, Storage::SharedMediaType type) { + if (peer->isSelf()) { + return { nullptr }; + } const auto separateType = ToSeparateType(type); if (separateType == Window::SeparateSharedMediaType::None) { - return nullptr; + return { nullptr }; } - return [=] { - controller->showInNewWindow({ - Window::SeparateSharedMedia(separateType, peer, topicRootId), - }); - }; + return { Window::SeparateSharedMedia(separateType, peer, topicRootId) }; } void AddContextMenuToButton( @@ -146,16 +145,6 @@ not_null<Ui::SlideWrap<Ui::SettingsButton>*> AddCountedButton( return button; }; -Fn<void()> SeparateWindowFactory( - not_null<Window::SessionController*> controller, - not_null<PeerData*> peer, - MsgId topicRootId, - Type type); - -void AddContextMenuToButton( - not_null<Ui::AbstractButton*> button, - Fn<void()> openInWindow); - not_null<Ui::SettingsButton*> AddButton( Ui::VerticalLayout *parent, not_null<Window::SessionNavigation*> navigation, @@ -169,11 +158,10 @@ not_null<Ui::SettingsButton*> AddButton( Profile::SharedMediaCountValue(peer, topicRootId, migrated, type), MediaText(type), tracker)->entity(); - const auto openInWindow = SeparateWindowFactory( - navigation->parentController(), - peer, - topicRootId, - type); + const auto separateId = SeparateId(peer, topicRootId, type); + const auto openInWindow = separateId + ? [=] { navigation->parentController()->showInNewWindow(separateId); } + : Fn<void()>(nullptr); AddContextMenuToButton(result, openInWindow); result->addClickHandler([=](Qt::MouseButton mouse) { if (mouse == Qt::RightButton) { @@ -189,9 +177,14 @@ not_null<Ui::SettingsButton*> AddButton( if (topicRootId && !topic) { return; } - navigation->showSection(topicRootId - ? std::make_shared<Info::Memento>(topic, Section(type)) - : std::make_shared<Info::Memento>(peer, Section(type))); + const auto separateId = SeparateId(peer, topicRootId, type); + if (Core::App().separateWindowFor(separateId) && openInWindow) { + openInWindow(); + } else { + navigation->showSection(topicRootId + ? std::make_shared<Info::Memento>(topic, Section(type)) + : std::make_shared<Info::Memento>(peer, Section(type))); + } }); return result; };