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 {