diff --git a/Telegram/SourceFiles/boxes/report_messages_box.cpp b/Telegram/SourceFiles/boxes/report_messages_box.cpp index b0e5d993e..3fb3139eb 100644 --- a/Telegram/SourceFiles/boxes/report_messages_box.cpp +++ b/Telegram/SourceFiles/boxes/report_messages_box.cpp @@ -8,34 +8,36 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "boxes/report_messages_box.h" #include "api/api_report.h" -#include "boxes/abstract_box.h" #include "data/data_peer.h" -#include "facades.h" #include "lang/lang_keys.h" #include "ui/boxes/report_box.h" #include "ui/layers/generic_box.h" -#include "window/window_controller.h" #include "window/window_session_controller.h" -void ShowReportItemsBox(not_null peer, MessageIdsList ids) { - const auto chosen = [=](Ui::ReportReason reason) { - Ui::show(Box(Ui::ReportDetailsBox, [=](const QString &text) { - Api::SendReport(peer, reason, text, ids); - Ui::hideLayer(); - })); - }; - Ui::show(Box( - Ui::ReportReasonBox, - Ui::ReportSource::Message, - chosen)); +object_ptr ReportItemsBox( + not_null peer, + MessageIdsList ids) { + return Box([=](not_null box) { + using Source = Ui::ReportSource; + using Reason = Ui::ReportReason; + Ui::ReportReasonBox(box, Source::Message, [=](Reason reason) { + Ui::BoxShow(box).showBox(Box([=](not_null box) { + const auto show = Ui::BoxShow(box); + Ui::ReportDetailsBox(box, [=](const QString &text) { + Api::SendReport(peer, reason, text, ids); + show.hideLayer(); + }); + })); + }); + }); } void ShowReportPeerBox( not_null window, not_null peer) { struct State { - QPointer reasonBox; - QPointer detailsBox; + QPointer reasonBox; + QPointer detailsBox; MessageIdsList ids; }; const auto state = std::make_shared(); @@ -53,18 +55,16 @@ void ShowReportPeerBox( if (reason == Ui::ReportReason::Fake || reason == Ui::ReportReason::Other) { state->ids = {}; - state->detailsBox = window->window().show( - Box(Ui::ReportDetailsBox, send)); + state->detailsBox = window->show(Box(Ui::ReportDetailsBox, send)); return; } window->showChooseReportMessages(peer, reason, [=]( MessageIdsList ids) { state->ids = std::move(ids); - state->detailsBox = window->window().show( - Box(Ui::ReportDetailsBox, send)); + state->detailsBox = window->show(Box(Ui::ReportDetailsBox, send)); }); }; - state->reasonBox = window->window().show(Box( + state->reasonBox = window->show(Box( Ui::ReportReasonBox, (peer->isBroadcast() ? Ui::ReportSource::Channel diff --git a/Telegram/SourceFiles/boxes/report_messages_box.h b/Telegram/SourceFiles/boxes/report_messages_box.h index 40f80d1b9..30a1a73dc 100644 --- a/Telegram/SourceFiles/boxes/report_messages_box.h +++ b/Telegram/SourceFiles/boxes/report_messages_box.h @@ -7,8 +7,11 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #pragma once +template +class object_ptr; + namespace Ui { -class GenericBox; +class BoxContent; } // namespace Ui namespace Window { @@ -17,8 +20,9 @@ class SessionController; class PeerData; -void ShowReportItemsBox( - not_null peer, MessageIdsList ids); +[[nodiscard]] object_ptr ReportItemsBox( + not_null peer, + MessageIdsList ids); void ShowReportPeerBox( not_null window, not_null peer); diff --git a/Telegram/SourceFiles/history/history_inner_widget.cpp b/Telegram/SourceFiles/history/history_inner_widget.cpp index a99a26eff..76a510507 100644 --- a/Telegram/SourceFiles/history/history_inner_widget.cpp +++ b/Telegram/SourceFiles/history/history_inner_widget.cpp @@ -3865,17 +3865,17 @@ void HistoryInner::deleteAsGroup(FullMsgId itemId) { } void HistoryInner::reportItem(FullMsgId itemId) { - ShowReportItemsBox(_peer, { 1, itemId }); + _controller->show(ReportItemsBox(_peer, { 1, itemId })); } void HistoryInner::reportAsGroup(FullMsgId itemId) { if (const auto item = session().data().message(itemId)) { const auto group = session().data().groups().find(item); - ShowReportItemsBox( + _controller->show(ReportItemsBox( _peer, (group ? session().data().itemsToIds(group->items) - : MessageIdsList{ 1, itemId })); + : MessageIdsList{ 1, itemId }))); } } diff --git a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp index 1619eda2a..44ee1713c 100644 --- a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp +++ b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp @@ -808,11 +808,11 @@ void AddReportAction( const auto callback = crl::guard(controller, [=] { if (const auto item = owner->message(itemId)) { const auto group = owner->groups().find(item); - ShowReportItemsBox( + controller->show(ReportItemsBox( item->history()->peer, (group ? owner->itemsToIds(group->items) - : MessageIdsList{ 1, itemId })); + : MessageIdsList{ 1, itemId }))); } }); menu->addAction(