diff --git a/Telegram/SourceFiles/boxes/choose_filter_box.cpp b/Telegram/SourceFiles/boxes/choose_filter_box.cpp index e7842c0e69..28b71c15e1 100644 --- a/Telegram/SourceFiles/boxes/choose_filter_box.cpp +++ b/Telegram/SourceFiles/boxes/choose_filter_box.cpp @@ -470,28 +470,29 @@ bool FillChooseFilterWithAdminedGroupsMenu( return added; } +History *HistoryFromMimeData( + const QMimeData *mime, + not_null session) { + const auto mimeFormat = u"application/x-telegram-dialog"_q; + if (!mime->hasFormat(mimeFormat)) { + return nullptr; + } + auto peerId = int64(-1); + auto isTestMode = false; + auto stream = QDataStream(mime->data(mimeFormat)); + stream >> peerId; + stream >> isTestMode; + if (isTestMode != session->isTestMode()) { + return nullptr; + } + return session->data().historyLoaded(PeerId(peerId)); +} + void SetupFilterDragAndDrop( not_null outer, not_null session, Fn(QPoint)> filterIdAtPosition, Fn activeFilterId) { - const auto mimeFormat = u"application/x-telegram-dialog"_q; - const auto peerIdFromMime = [=](const QMimeData *mimeData) { - auto peerId = int64(-1); - auto isTestMode = false; - if (mimeData->hasFormat(mimeFormat)) { - auto stream = QDataStream(mimeData->data(mimeFormat)); - stream >> peerId; - stream >> isTestMode; - if (isTestMode != session->isTestMode()) { - return int64(-1); - } - } - return peerId; - }; - const auto historyFromMime = [=](const QMimeData *mime) { - return session->data().historyLoaded(PeerId(peerIdFromMime(mime))); - }; const auto hasAction = [=](not_null drop, bool perform) { const auto mimeData = drop->mimeData(); const auto filterId = filterIdAtPosition( @@ -500,7 +501,7 @@ void SetupFilterDragAndDrop( return false; } const auto id = *filterId; - if (const auto h = historyFromMime(mimeData)) { + if (const auto h = HistoryFromMimeData(mimeData, session)) { auto v = ChooseFilterValidator(h); if (id) { if (v.canAdd(id)) { diff --git a/Telegram/SourceFiles/boxes/choose_filter_box.h b/Telegram/SourceFiles/boxes/choose_filter_box.h index 99492c6ba6..4bcfd3ddcc 100644 --- a/Telegram/SourceFiles/boxes/choose_filter_box.h +++ b/Telegram/SourceFiles/boxes/choose_filter_box.h @@ -63,3 +63,7 @@ void SetupFilterDragAndDrop( not_null session, Fn(QPoint)> filterIdAtPosition, Fn activeFilterId); + +[[nodiscard]] History *HistoryFromMimeData( + const QMimeData *mime, + not_null session); diff --git a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp index 7307807051..7250b50c3d 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp @@ -27,6 +27,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "history/view/history_view_requests_bar.h" #include "history/view/history_view_top_bar_widget.h" #include "boxes/peers/edit_peer_requests_box.h" +#include "boxes/choose_filter_box.h" #include "ui/text/text_utilities.h" #include "ui/widgets/buttons.h" #include "ui/widgets/chat_filters_tabs_strip.h" @@ -550,6 +551,20 @@ Widget::Widget( _search->submits( ) | rpl::on_next([=] { submit(); }, _search->lifetime()); + _search->setMimeDataHook([=]( + not_null data, + Ui::InputField::MimeAction action) { + if (data->hasFormat(u"application/x-telegram-dialog"_q)) { + if (const auto history = HistoryFromMimeData(data, &session())) { + if (action != Ui::InputField::MimeAction::Check) { + controller->searchInChat(history); + } + return true; + } + } + return false; + }); + QObject::connect( _search->rawTextEdit().get(), &QTextEdit::cursorPositionChanged,