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

View file

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