Fixed text loss when editing media content is canceled.
This commit is contained in:
parent
5c097887ef
commit
69bc595e31
|
@ -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:
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue