From f8e76f1b842f8d3fbe9e7f61f59baf5dc2674de1 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 18 Jan 2023 15:17:32 +0400 Subject: [PATCH] Single entry point to search in chat. --- .../SourceFiles/dialogs/dialogs_widget.cpp | 34 ++++++++----------- .../SourceFiles/history/history_widget.cpp | 6 +--- .../view/history_view_replies_section.cpp | 6 +--- .../view/history_view_top_bar_widget.cpp | 4 +++ .../view/history_view_top_bar_widget.h | 1 + Telegram/SourceFiles/mainwidget.cpp | 11 +----- 6 files changed, 23 insertions(+), 39 deletions(-) diff --git a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp index 4a5866a1b4..a0b0867cc5 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp @@ -1481,9 +1481,7 @@ void Widget::showMainMenu() { controller()->widget()->showMainMenu(); } -void Widget::searchMessages( - const QString &query, - Key inChat) { +void Widget::searchMessages(const QString &query, Key inChat) { if (_childList) { const auto forum = controller()->shownForum().current(); const auto topic = inChat.topic(); @@ -1494,18 +1492,27 @@ void Widget::searchMessages( } hideChildList(); } + if (_openedFolder) { + controller()->closeFolder(); + } + const auto inChatChanged = [&] { const auto inPeer = inChat.peer(); const auto inTopic = inChat.topic(); - if (!inTopic && _openedForum && inPeer == _openedForum->channel()) { + if (!inTopic + && _openedForum + && inPeer == _openedForum->channel() + && _subsectionTopBar + && _subsectionTopBar->searchMode()) { return false; } else if ((inTopic || (inPeer && !inPeer->isForum())) && (inChat == _searchInChat)) { return false; } else if (const auto inPeer = inChat.peer()) { - if (inPeer->migrateTo() == _searchInChat.peer() - && !_searchInChat.topic()) { - return false; + if (const auto to = inPeer->migrateTo()) { + if (to == _searchInChat.peer() && !_searchInChat.topic()) { + return false; + } } } return true; @@ -2130,18 +2137,7 @@ void Widget::closeChildList(anim::type animated) { } void Widget::searchInChat(Key chat) { - if (_openedForum && !chat.peer()->forum()) { - controller()->closeForum(); - } - if (_openedFolder) { - if (_childList && _childList->setSearchInChat(chat)) { - return; - } - controller()->closeFolder(); - } - cancelSearch(); - setSearchInChat(chat); - applyFilterUpdate(true); + searchMessages(QString(), chat); } bool Widget::setSearchInChat(Key chat, PeerData *from) { diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp index 3832200b07..341fff2c6c 100644 --- a/Telegram/SourceFiles/history/history_widget.cpp +++ b/Telegram/SourceFiles/history/history_widget.cpp @@ -4536,12 +4536,8 @@ bool HistoryWidget::updateCmdStartShown() { } void HistoryWidget::searchInChat() { - if (!_history) { - return; - } else if (controller()->isPrimary()) { + if (_history) { controller()->content()->searchInChat(_history); - } else { - searchInChatEmbedded(); } } diff --git a/Telegram/SourceFiles/history/view/history_view_replies_section.cpp b/Telegram/SourceFiles/history/view/history_view_replies_section.cpp index 8daf4f8ee0..f3aa59cc57 100644 --- a/Telegram/SourceFiles/history/view/history_view_replies_section.cpp +++ b/Telegram/SourceFiles/history/view/history_view_replies_section.cpp @@ -2598,12 +2598,8 @@ void RepliesWidget::setupShortcuts() { } void RepliesWidget::searchInTopic() { - if (!_topic) { - return; - } else if (controller()->isPrimary()) { + if (_topic) { controller()->content()->searchInChat(_topic); - } else { - // #TODO forum window } } diff --git a/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp b/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp index 529e1f19b0..30878b49c3 100644 --- a/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp +++ b/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp @@ -1318,6 +1318,10 @@ bool TopBarWidget::searchSetFocus() { return true; } +bool TopBarWidget::searchMode() const { + return _searchMode; +} + bool TopBarWidget::searchHasFocus() const { return _searchMode && _searchField->hasFocus(); } diff --git a/Telegram/SourceFiles/history/view/history_view_top_bar_widget.h b/Telegram/SourceFiles/history/view/history_view_top_bar_widget.h index 17e6b82290..36d18a5f69 100644 --- a/Telegram/SourceFiles/history/view/history_view_top_bar_widget.h +++ b/Telegram/SourceFiles/history/view/history_view_top_bar_widget.h @@ -82,6 +82,7 @@ public: void searchEnableJumpToDate(bool enable); void searchEnableChooseFromUser(bool enable, bool visible); bool searchSetFocus(); + [[nodiscard]] bool searchMode() const; [[nodiscard]] bool searchHasFocus() const; [[nodiscard]] rpl::producer<> searchCancelled() const; [[nodiscard]] rpl::producer<> searchSubmitted() const; diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 6a2ea0f78b..497ed5b7ef 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -2652,16 +2652,7 @@ int MainWidget::backgroundFromY() const { } void MainWidget::searchInChat(Dialogs::Key chat) { - // #TODO windows - if (!_dialogs) { - return; - } - _dialogs->searchInChat(chat); - if (isOneColumn()) { - _controller->clearSectionStack(); - } else { - _dialogs->setInnerFocus(); - } + searchMessages(QString(), chat); } bool MainWidget::contentOverlapped(const QRect &globalRect) {