Improve search-in-topic closing.

This commit is contained in:
John Preston 2022-10-27 11:35:35 +04:00
parent 5d76415a5d
commit 850746b0ba
3 changed files with 31 additions and 16 deletions

View file

@ -416,9 +416,8 @@ void Widget::chosenRow(const ChosenRow &row) {
&& row.filteredRow;
const auto history = row.key.history();
if (const auto topic = row.key.topic()) {
controller()->showRepliesForMessage(
topic->history(),
topic->rootId(),
controller()->showTopic(
topic,
row.message.fullId.msg,
Window::SectionShow::Way::ClearStack);
} else if (history && history->peer->isForum() && !row.message.fullId) {
@ -2309,32 +2308,34 @@ void Widget::clearSearchField() {
}
bool Widget::cancelSearch() {
bool clearing = !currentSearchQuery().isEmpty();
auto clearingQuery = !currentSearchQuery().isEmpty();
auto clearingInChat = false;
cancelSearchRequest();
if (!clearing && _searchInChat) {
if (!clearingQuery && _searchInChat) {
if (controller()->adaptive().isOneColumn()) {
if (const auto topic = _searchInChat.topic()) {
//controller()->showTopic(topic); // #TODO forum search
controller()->showTopic(topic);
} else if (const auto peer = _searchInChat.peer()) {
controller()->showPeer(peer, ShowAtUnreadMsgId);
controller()->showPeerHistory(peer);
} else {
Unexpected("Empty key in cancelSearch().");
}
}
setSearchInChat(Key());
clearing = true;
} else if (!clearing
clearingInChat = true;
}
if (!clearingQuery
&& _subsectionTopBar
&& _subsectionTopBar->toggleSearch(false, anim::type::normal)) {
setFocus();
return true;
clearingInChat = true;
}
_lastSearchPeer = nullptr;
_lastSearchId = _lastSearchMigratedId = 0;
_inner->clearFilter();
clearSearchField();
applyFilterUpdate();
return clearing;
return clearingQuery || clearingInChat;
}
void Widget::cancelSearchInChat() {
@ -2345,9 +2346,9 @@ void Widget::cancelSearchInChat() {
&& !controller()->selectingPeer()
&& currentSearchQuery().trimmed().isEmpty()) {
if (const auto topic = _searchInChat.topic()) {
// #TODO forum search
controller()->showTopic(topic);
} else if (const auto peer = _searchInChat.peer()) {
Ui::showPeerHistory(peer, ShowAtUnreadMsgId);
controller()->showPeerHistory(peer);
} else {
Unexpected("Empty key in cancelSearchInPeer().");
}

View file

@ -575,6 +575,17 @@ void SessionNavigation::showPeerInfo(
showPeerInfo(_session->data().peer(peerId), params);
}
void SessionNavigation::showTopic(
not_null<Data::ForumTopic*> topic,
MsgId commentId,
const SectionShow &params) {
return showRepliesForMessage(
topic->history(),
topic->rootId(),
commentId,
params);
}
void SessionNavigation::showPeerInfo(
not_null<PeerData*> peer,
const SectionShow &params) {
@ -1539,9 +1550,8 @@ void SessionController::showCalendar(Dialogs::Key chat, QDate requestedDate) {
SectionShow::Way::Forward,
id);
} else if (const auto strongTopic = weakTopic.get()) {
strong->showRepliesForMessage(
strongTopic->history(),
strongTopic->rootId(),
strong->showTopic(
strongTopic,
id,
SectionShow::Way::Forward);
strong->hideLayer(anim::type::normal);

View file

@ -212,6 +212,10 @@ public:
MsgId rootId,
MsgId commentId = 0,
const SectionShow &params = SectionShow());
void showTopic(
not_null<Data::ForumTopic*> topic,
MsgId commentId = 0,
const SectionShow &params = SectionShow());
void showPeerInfo(
PeerId peerId,