Fixed text loss when editing media content is canceled.

This commit is contained in:
23rd 2020-05-30 17:41:39 +03:00
parent 5c097887ef
commit 69bc595e31
2 changed files with 17 additions and 7 deletions

View File

@ -128,13 +128,16 @@ public:
// For edit media in history_message.
virtual void returnSavedMedia() {};
void savePreviousMedia() {
_savedMedia = _media->clone(this);
_savedLocalEditMediaData = {
originalText(),
_media->clone(this),
};
}
[[nodiscard]] bool isEditingMedia() const {
return _savedMedia != nullptr;
return _savedLocalEditMediaData.media != nullptr;
}
void clearSavedMedia() {
_savedMedia = nullptr;
_savedLocalEditMediaData = {};
}
// Zero result means this message is not self-destructing right now.
@ -364,7 +367,12 @@ protected:
int _textWidth = -1;
int _textHeight = 0;
std::unique_ptr<Data::Media> _savedMedia;
struct SavedMediaData {
TextWithEntities text;
std::unique_ptr<Data::Media> media;
};
SavedMediaData _savedLocalEditMediaData;
std::unique_ptr<Data::Media> _media;
private:

View File

@ -902,11 +902,13 @@ void HistoryMessage::refreshSentMedia(const MTPMessageMedia *media) {
}
void HistoryMessage::returnSavedMedia() {
if (!_savedMedia) {
if (!isEditingMedia()) {
return;
}
const auto wasGrouped = history()->owner().groups().isGrouped(this);
_media = std::move(_savedMedia);
_media = std::move(_savedLocalEditMediaData.media);
setText(_savedLocalEditMediaData.text);
clearSavedMedia();
if (wasGrouped) {
history()->owner().groups().refreshMessage(this, true);
} else {
@ -1406,7 +1408,7 @@ std::unique_ptr<HistoryView::Element> HistoryMessage::createView(
HistoryMessage::~HistoryMessage() {
_media.reset();
_savedMedia.reset();
clearSavedMedia();
if (auto reply = Get<HistoryMessageReply>()) {
reply->clearData(this);
}