From a676138745e7824b63ec8cdd29fe9d31c93ae55c Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Thu, 30 Jan 2025 12:16:31 +0300 Subject: [PATCH] Added ability to open shared media in window with Ctrl+Click. --- .../info/media/info_media_buttons.h | 8 ++++++- .../info/media/info_media_inner_widget.cpp | 3 ++- .../profile/info_profile_inner_widget.cpp | 23 ++++++++++--------- .../info/saved/info_saved_sublists_widget.cpp | 3 ++- 4 files changed, 23 insertions(+), 14 deletions(-) diff --git a/Telegram/SourceFiles/info/media/info_media_buttons.h b/Telegram/SourceFiles/info/media/info_media_buttons.h index 363a27953..7d894be0b 100644 --- a/Telegram/SourceFiles/info/media/info_media_buttons.h +++ b/Telegram/SourceFiles/info/media/info_media_buttons.h @@ -10,6 +10,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include #include #include "lang/lang_keys.h" +#include "base/qt/qt_key_modifiers.h" #include "data/data_saved_messages.h" #include "data/data_session.h" #include "data/data_stories_ids.h" @@ -90,7 +91,8 @@ inline auto AddButton( MsgId topicRootId, PeerData *migrated, Type type, - Ui::MultiSlideTracker &tracker) { + Ui::MultiSlideTracker &tracker, + Fn openInWindow) { auto result = AddCountedButton( parent, Profile::SharedMediaCountValue(peer, topicRootId, migrated, type), @@ -100,6 +102,10 @@ inline auto AddButton( if (mouse == Qt::RightButton) { return; } + if (openInWindow + && (base::IsCtrlPressed() || mouse == Qt::MiddleButton)) { + return openInWindow(); + } const auto topic = topicRootId ? peer->forumTopicFor(topicRootId) : nullptr; diff --git a/Telegram/SourceFiles/info/media/info_media_inner_widget.cpp b/Telegram/SourceFiles/info/media/info_media_inner_widget.cpp index eed93256b..f0afc716d 100644 --- a/Telegram/SourceFiles/info/media/info_media_inner_widget.cpp +++ b/Telegram/SourceFiles/info/media/info_media_inner_widget.cpp @@ -92,7 +92,8 @@ void InnerWidget::createTypeButtons() { topicRootId, migrated, buttonType, - tracker); + tracker, + nullptr); object_ptr( result, icon, diff --git a/Telegram/SourceFiles/info/profile/info_profile_inner_widget.cpp b/Telegram/SourceFiles/info/profile/info_profile_inner_widget.cpp index 5ef8bfd32..b4eefed8c 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_inner_widget.cpp +++ b/Telegram/SourceFiles/info/profile/info_profile_inner_widget.cpp @@ -93,12 +93,8 @@ Fn SeparateWindowFactory( void AddContextMenu( not_null button, - not_null window, - not_null peer, - MsgId rootId, - Storage::SharedMediaType type) { - const auto callback = SeparateWindowFactory(window, peer, rootId, type); - if (!callback) { + Fn openInWindow) { + if (!openInWindow) { return; } button->setAcceptBoth(); @@ -116,7 +112,7 @@ void AddContextMenu( state->menu->addAction(tr::lng_context_new_window(tr::now), [=] { base::call_delayed( st::popupMenuWithIcons.showDuration, - crl::guard(button, callback)); + crl::guard(button, openInWindow)); }, &st::menuIconNewWindow); state->menu->popup(QCursor::pos()); }); @@ -229,6 +225,12 @@ object_ptr InnerWidget::setupSharedMedia( MediaType type, const style::icon &icon) { const auto topicRootId = _topic ? _topic->rootId() : 0; + const auto window = _controller->parentController(); + const auto openInWindow = SeparateWindowFactory( + window, + _peer, + topicRootId, + type); auto result = Media::AddButton( content, _controller, @@ -236,10 +238,9 @@ object_ptr InnerWidget::setupSharedMedia( topicRootId, _migrated, type, - tracker); - if (const auto window = _controller->parentController()) { - AddContextMenu(result, window, _peer, topicRootId, type); - } + tracker, + openInWindow); + AddContextMenu(result, openInWindow); object_ptr( result, icon, diff --git a/Telegram/SourceFiles/info/saved/info_saved_sublists_widget.cpp b/Telegram/SourceFiles/info/saved/info_saved_sublists_widget.cpp index 3a3ff46ad..b0b07b961 100644 --- a/Telegram/SourceFiles/info/saved/info_saved_sublists_widget.cpp +++ b/Telegram/SourceFiles/info/saved/info_saved_sublists_widget.cpp @@ -109,7 +109,8 @@ void SublistsWidget::setupOtherTypes() { MsgId(), // topicRootId nullptr, // migrated buttonType, - tracker); + tracker, + nullptr); object_ptr( result, icon,