From bc8f8bc68cc64d1141140980597fdc39ebe128e9 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Tue, 20 Oct 2020 23:25:42 +0300 Subject: [PATCH] Added auto-closing to some boxes which depend on certain message. --- Telegram/SourceFiles/boxes/edit_caption_box.cpp | 6 ++++++ Telegram/SourceFiles/data/data_session.cpp | 8 ++++++++ Telegram/SourceFiles/data/data_session.h | 2 ++ .../history/view/history_view_context_menu.cpp | 8 +++++++- 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/Telegram/SourceFiles/boxes/edit_caption_box.cpp b/Telegram/SourceFiles/boxes/edit_caption_box.cpp index ef5c75254b..1f24fc049b 100644 --- a/Telegram/SourceFiles/boxes/edit_caption_box.cpp +++ b/Telegram/SourceFiles/boxes/edit_caption_box.cpp @@ -363,6 +363,12 @@ EditCaptionBox::EditCaptionBox( ) | rpl::start_with_next([&](bool checked) { _asFile = checked; }, _wayWrap->lifetime()); + + _controller->session().data().itemRemoved( + _msgId + ) | rpl::start_with_next([=] { + closeBox(); + }, lifetime()); } EditCaptionBox::~EditCaptionBox() = default; diff --git a/Telegram/SourceFiles/data/data_session.cpp b/Telegram/SourceFiles/data/data_session.cpp index d789e2cf69..b748359af0 100644 --- a/Telegram/SourceFiles/data/data_session.cpp +++ b/Telegram/SourceFiles/data/data_session.cpp @@ -1428,6 +1428,14 @@ rpl::producer> Session::itemRemoved() const { return _itemRemoved.events(); } +rpl::producer> Session::itemRemoved( + FullMsgId itemId) const { + return itemRemoved( + ) | rpl::filter([=](not_null item) { + return (itemId == item->fullId()); + }); +} + void Session::notifyViewRemoved(not_null view) { _viewRemoved.fire_copy(view); } diff --git a/Telegram/SourceFiles/data/data_session.h b/Telegram/SourceFiles/data/data_session.h index 4ac51efcd4..d0337ca865 100644 --- a/Telegram/SourceFiles/data/data_session.h +++ b/Telegram/SourceFiles/data/data_session.h @@ -231,6 +231,8 @@ public: [[nodiscard]] rpl::producer> historyUnloaded() const; [[nodiscard]] rpl::producer> itemRemoved() const; + [[nodiscard]] rpl::producer> itemRemoved( + FullMsgId itemId) const; void notifyViewRemoved(not_null view); [[nodiscard]] rpl::producer> viewRemoved() const; void notifyHistoryCleared(not_null history); diff --git a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp index 68f46aab89..3234765907 100644 --- a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp +++ b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp @@ -453,13 +453,19 @@ bool AddRescheduleMessageAction( ? HistoryView::DefaultScheduleTime() : item->date() + 600; - Ui::show( + const auto box = Ui::show( HistoryView::PrepareScheduleBox( &request.navigation->session(), sendMenuType, callback, date), Ui::LayerOption::KeepOther); + + owner->itemRemoved( + itemId + ) | rpl::start_with_next([=] { + box->closeBox(); + }, box->lifetime()); }); return true; }