From de20ff05eb71bd9dbfc4fc43e68ac054b7c0a985 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Thu, 10 Dec 2020 08:39:03 +0300 Subject: [PATCH] Fixed draft applying while recording voice message in HistoryWidget. Relevant commit: d15a5c9bdc. --- Telegram/SourceFiles/history/history_widget.cpp | 10 +++++++++- .../view/controls/history_view_voice_record_bar.cpp | 4 ++++ .../view/controls/history_view_voice_record_bar.h | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp index d0827e992..eca6160ea 100644 --- a/Telegram/SourceFiles/history/history_widget.cpp +++ b/Telegram/SourceFiles/history/history_widget.cpp @@ -820,6 +820,13 @@ void HistoryWidget::initVoiceRecordBar() { _scroll->viewportEvent(e); }, lifetime()); + _voiceRecordBar->shownValue( + ) | rpl::start_with_next([=](bool shown) { + if (!shown) { + applyDraft(); + } + }, lifetime()); + _voiceRecordBar->hideFast(); } @@ -1621,7 +1628,8 @@ void HistoryWidget::applyDraft(FieldHistoryAction fieldHistoryAction) { : _history->localEditDraft() ? _history->localEditDraft() : _history->localDraft(); - auto fieldAvailable = canWriteMessage(); + auto fieldAvailable = canWriteMessage() + && !_voiceRecordBar->preventDraftApply(); if (!draft || (!_history->localEditDraft() && !fieldAvailable)) { auto fieldWillBeHiddenAfterEdit = (!fieldAvailable && _editMsgId != 0); clearFieldText(0, fieldHistoryAction); diff --git a/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.cpp b/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.cpp index b2ebaca31..5964e7617 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.cpp +++ b/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.cpp @@ -1414,6 +1414,10 @@ bool VoiceRecordBar::isRecording() const { return _recording.current(); } +bool VoiceRecordBar::preventDraftApply() const { + return isRecording() || isListenState(); +} + void VoiceRecordBar::hideAnimated() { if (isHidden()) { return; diff --git a/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.h b/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.h index bc96898f5..cb1fc1cfd 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.h +++ b/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.h @@ -72,6 +72,7 @@ public: [[nodiscard]] bool isRecording() const; [[nodiscard]] bool isLockPresent() const; [[nodiscard]] bool isListenState() const; + [[nodiscard]] bool preventDraftApply() const; private: enum class StopType {