diff --git a/Telegram/Resources/langs/rewrites/en.json b/Telegram/Resources/langs/rewrites/en.json index 0904564fa..9e8054598 100644 --- a/Telegram/Resources/langs/rewrites/en.json +++ b/Telegram/Resources/langs/rewrites/en.json @@ -108,6 +108,7 @@ "ktg_hide_pinned_message": "Hide", "ktg_stickers_copy_title": "Copy name", "ktg_stickers_title_copied": "Sticker pack name copied to clipboard.", + "ktg_context_show_messages_from": "User messages", "ktg_settings_userpic_rounding": "Profile pictures rounding", "ktg_settings_userpic_rounding_none": "Square", "ktg_settings_userpic_rounding_small": "Small", diff --git a/Telegram/SourceFiles/boxes/peers/edit_participants_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_participants_box.cpp index c979d01fc..92d6618f5 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_participants_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_participants_box.cpp @@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "boxes/peers/edit_participants_box.h" +#include "kotato/kotato_lang.h" #include "api/api_chat_participants.h" #include "boxes/peer_list_controllers.h" #include "boxes/peers/edit_participant_box.h" @@ -17,8 +18,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "boxes/add_contact_box.h" #include "main/main_session.h" #include "mtproto/mtproto_config.h" +#include "facades.h" #include "apiwrap.h" #include "lang/lang_keys.h" +#include "mainwindow.h" #include "mainwidget.h" #include "dialogs/dialogs_indexed_list.h" #include "data/data_peer_values.h" @@ -1538,6 +1541,20 @@ base::unique_qptr ParticipantsBoxController::rowContextMenu( ? &st::menuIconProfile : &st::menuIconInfo)); } + if (const auto window = App::wnd()) { + if (const auto mainwidget = window->sessionContent()) { + result->addAction( + ktr("ktg_context_show_messages_from"), + crl::guard(this, [=] { + mainwidget->searchMessages( + " ", + (_peer && !_peer->isUser()) + ? _peer->owner().history(_peer).get() + : Dialogs::Key(), + user); + }), &st::menuIconSearch); + } + } if (_role == Role::Kicked) { if (_peer->isMegagroup() && _additional.canRestrictParticipant(participant)) { diff --git a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp index d83f3a51d..e88389221 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp @@ -25,6 +25,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "mainwidget.h" #include "main/main_domain.h" #include "main/main_session.h" +#include "main/main_account.h" #include "main/main_session_settings.h" #include "apiwrap.h" #include "base/event_filter.h" @@ -992,7 +993,8 @@ void Widget::showMainMenu() { void Widget::searchMessages( const QString &query, - Key inChat) { + Key inChat, + UserData *from) { auto inChatChanged = [&] { if (inChat == _searchInChat) { return false; @@ -1008,7 +1010,9 @@ void Widget::searchMessages( onCancelSearch(); setSearchInChat(inChat); } - _filter->setText(query); + if (!query.trimmed().isEmpty()) { + _filter->setText(query); + } _filter->updatePlaceholder(); applyFilterUpdate(true); _searchTimer.stop(); @@ -1016,6 +1020,10 @@ void Widget::searchMessages( session().local().saveRecentSearchHashtags(query); } + if (inChat && from) { + setSearchInChat(inChat, from); + applyFilterUpdate(true); + } } void Widget::onSearchMore() { diff --git a/Telegram/SourceFiles/dialogs/dialogs_widget.h b/Telegram/SourceFiles/dialogs/dialogs_widget.h index dfd9f435e..579e10b89 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_widget.h +++ b/Telegram/SourceFiles/dialogs/dialogs_widget.h @@ -84,7 +84,7 @@ public: void scrollToEntry(const RowDescriptor &entry); - void searchMessages(const QString &query, Key inChat = {}); + void searchMessages(const QString &query, Key inChat = {}, UserData *from = nullptr); void onSearchMore(); void updateForwardBar(); diff --git a/Telegram/SourceFiles/history/history_inner_widget.cpp b/Telegram/SourceFiles/history/history_inner_widget.cpp index cacf50838..689754bec 100644 --- a/Telegram/SourceFiles/history/history_inner_widget.cpp +++ b/Telegram/SourceFiles/history/history_inner_widget.cpp @@ -8,6 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "history/history_inner_widget.h" #include "kotato/kotato_settings.h" +#include "kotato/kotato_lang.h" #include "core/file_utilities.h" #include "core/crash_reports.h" #include "core/click_handler_types.h" @@ -1970,6 +1971,17 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { Window::ToggleMessagePinned(controller, pinItemId, !isPinned); }), isPinned ? &st::menuIconUnpin : &st::menuIconPin); } + const auto peer = item->history()->peer; + if (peer->isChat() || peer->isMegagroup()) { + _menu->addAction(ktr("ktg_context_show_messages_from"), [=] { + controller->content()->searchMessages( + " ", + (peer && !peer->isUser()) + ? peer->owner().history(peer).get() + : Dialogs::Key(), + item->from()->asUser()); + }, &st::menuIconSearch); + } }; const auto addPhotoActions = [&](not_null photo, HistoryItem *item) { const auto media = photo->activeMediaView(); diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index a1cd5e71c..463985c9a 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -781,12 +781,12 @@ bool MainWidget::insertBotCommand(const QString &cmd) { return _history->insertBotCommand(cmd); } -void MainWidget::searchMessages(const QString &query, Dialogs::Key inChat) { +void MainWidget::searchMessages(const QString &query, Dialogs::Key inChat, UserData *from) { // #TODO windows if (!_dialogs) { return; } - _dialogs->searchMessages(query, inChat); + _dialogs->searchMessages(query, inChat, from); if (isOneColumn()) { Ui::showChatsList(&session()); } else { diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index 9d7f21a79..6b7360e58 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -188,7 +188,7 @@ public: void hideSingleUseKeyboard(PeerData *peer, MsgId replyTo); bool insertBotCommand(const QString &cmd); - void searchMessages(const QString &query, Dialogs::Key inChat); + void searchMessages(const QString &query, Dialogs::Key inChat, UserData *from = nullptr); void setChatBackground( const Data::WallPaper &background, diff --git a/Telegram/SourceFiles/ui/menu_icons.style b/Telegram/SourceFiles/ui/menu_icons.style index 3d9058024..3e7e41e3e 100644 --- a/Telegram/SourceFiles/ui/menu_icons.style +++ b/Telegram/SourceFiles/ui/menu_icons.style @@ -86,6 +86,7 @@ menuIconImportTheme: icon {{ "menu/import_theme", menuSubmenuArrowFg }}; menuIconExportTheme: icon {{ "menu/export_theme", menuSubmenuArrowFg }}; menuIconRestore: icon {{ "menu/restore", menuSubmenuArrowFg }}; menuIconSettings: icon {{ "menu/settings", menuSubmenuArrowFg }}; +menuIconSearch: icon {{ "menu/search", menuSubmenuArrowFg }}; menuIconHide: icon {{ "menu/hide", menuSubmenuArrowFg }}; mediaMenuIconStickers: icon {{ "menu/stickers", mediaviewMenuFg }};