diff --git a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp index e1b32aa7d..8d72bfbce 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp +++ b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.cpp @@ -2962,6 +2962,13 @@ bool ComposeControls::isRecording() const { return _voiceRecordBar->isRecording(); } +bool ComposeControls::isRecordingPressed() const { + return !_voiceRecordBar->isRecordingLocked() + && (!_voiceRecordBar->isHidden() + || (_send->type() == Ui::SendButton::Type::Record + && _send->isDown())); +} + rpl::producer ComposeControls::recordingValue() const { return _recording.value(); } diff --git a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.h b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.h index 518782954..ce734f280 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.h +++ b/Telegram/SourceFiles/history/view/controls/history_view_compose_controls.h @@ -216,6 +216,7 @@ public: [[nodiscard]] rpl::producer lockShowStarts() const; [[nodiscard]] bool isLockPresent() const; [[nodiscard]] bool isRecording() const; + [[nodiscard]] bool isRecordingPressed() const; [[nodiscard]] rpl::producer recordingValue() const; [[nodiscard]] rpl::producer hasSendTextValue() const; 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 c49495542..757b85444 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 @@ -1581,6 +1581,10 @@ bool VoiceRecordBar::isRecording() const { return _recording.current(); } +bool VoiceRecordBar::isRecordingLocked() const { + return isRecording() && _lock->isLocked(); +} + bool VoiceRecordBar::isActive() const { return isRecording() || isListenState(); } 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 97fed00d9..2d04e98a7 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 @@ -89,6 +89,7 @@ public: void setStartRecordingFilter(Fn &&callback); [[nodiscard]] bool isRecording() const; + [[nodiscard]] bool isRecordingLocked() const; [[nodiscard]] bool isLockPresent() const; [[nodiscard]] bool isListenState() const; [[nodiscard]] bool isActive() const; diff --git a/Telegram/SourceFiles/media/stories/media_stories_controller.cpp b/Telegram/SourceFiles/media/stories/media_stories_controller.cpp index 99ab50de7..f6d4ad519 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_controller.cpp +++ b/Telegram/SourceFiles/media/stories/media_stories_controller.cpp @@ -1443,6 +1443,11 @@ void Controller::moveFromShown() { } } +bool Controller::ignoreWindowMove(QPoint position) const { + return _replyArea->ignoreWindowMove(position) + || _header->ignoreWindowMove(position); +} + rpl::lifetime &Controller::lifetime() { return _lifetime; } diff --git a/Telegram/SourceFiles/media/stories/media_stories_controller.h b/Telegram/SourceFiles/media/stories/media_stories_controller.h index 8b804c598..18951e7ad 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_controller.h +++ b/Telegram/SourceFiles/media/stories/media_stories_controller.h @@ -160,6 +160,8 @@ public: void reportRequested(); void togglePinnedRequested(bool pinned); + [[nodiscard]] bool ignoreWindowMove(QPoint position) const; + [[nodiscard]] rpl::lifetime &lifetime(); private: diff --git a/Telegram/SourceFiles/media/stories/media_stories_header.cpp b/Telegram/SourceFiles/media/stories/media_stories_header.cpp index 04a0e3f25..0d05837a9 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_header.cpp +++ b/Telegram/SourceFiles/media/stories/media_stories_header.cpp @@ -542,10 +542,12 @@ void Header::rebuildVolumeControls( : Direction::Vertical); slider->setChangeProgressCallback([=](float64 value) { + _ignoreWindowMove = true; _controller->changeVolume(value); updateVolumeIcon(); }); slider->setChangeFinishedCallback([=](float64 value) { + _ignoreWindowMove = false; _controller->volumeChangeFinished(); }); button->setClickedCallback([=] { @@ -623,6 +625,11 @@ void Header::raise() { } } + +bool Header::ignoreWindowMove(QPoint position) const { + return _ignoreWindowMove; +} + void Header::updateDateText() { if (!_date || !_data || !_data->date) { return; diff --git a/Telegram/SourceFiles/media/stories/media_stories_header.h b/Telegram/SourceFiles/media/stories/media_stories_header.h index b20f2b533..f83749482 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_header.h +++ b/Telegram/SourceFiles/media/stories/media_stories_header.h @@ -54,6 +54,8 @@ public: void show(HeaderData data); void raise(); + [[nodiscard]] bool ignoreWindowMove(QPoint position) const; + private: void updateDateText(); void applyPauseState(); @@ -79,6 +81,7 @@ private: std::unique_ptr _privacy; std::optional _data; base::Timer _dateUpdateTimer; + bool _ignoreWindowMove = false; }; diff --git a/Telegram/SourceFiles/media/stories/media_stories_reply.cpp b/Telegram/SourceFiles/media/stories/media_stories_reply.cpp index 9fa53b529..339a92181 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_reply.cpp +++ b/Telegram/SourceFiles/media/stories/media_stories_reply.cpp @@ -677,6 +677,10 @@ rpl::producer ReplyArea::activeValue() const { ) | rpl::distinct_until_changed(); } +bool ReplyArea::ignoreWindowMove(QPoint position) const { + return _controls->isRecordingPressed(); +} + void ReplyArea::showPremiumToast(not_null emoji) { // #TODO stories } diff --git a/Telegram/SourceFiles/media/stories/media_stories_reply.h b/Telegram/SourceFiles/media/stories/media_stories_reply.h index eeaa54726..25594c59b 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_reply.h +++ b/Telegram/SourceFiles/media/stories/media_stories_reply.h @@ -67,6 +67,8 @@ public: [[nodiscard]] rpl::producer activeValue() const; [[nodiscard]] rpl::producer hasSendTextValue() const; + [[nodiscard]] bool ignoreWindowMove(QPoint position) const; + private: class Cant; diff --git a/Telegram/SourceFiles/media/stories/media_stories_view.cpp b/Telegram/SourceFiles/media/stories/media_stories_view.cpp index 6a6a0dbd4..63fe641da 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_view.cpp +++ b/Telegram/SourceFiles/media/stories/media_stories_view.cpp @@ -103,6 +103,10 @@ void View::togglePinnedRequested(bool pinned) { _controller->togglePinnedRequested(pinned); } +bool View::ignoreWindowMove(QPoint position) const { + return _controller->ignoreWindowMove(position); +} + SiblingView View::sibling(SiblingType type) const { return _controller->sibling(type); } diff --git a/Telegram/SourceFiles/media/stories/media_stories_view.h b/Telegram/SourceFiles/media/stories/media_stories_view.h index 24b58feed..2e9ce1a74 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_view.h +++ b/Telegram/SourceFiles/media/stories/media_stories_view.h @@ -82,6 +82,8 @@ public: void reportRequested(); void togglePinnedRequested(bool pinned); + [[nodiscard]] bool ignoreWindowMove(QPoint position) const; + [[nodiscard]] rpl::lifetime &lifetime(); private: diff --git a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp index dfa0f9085..1d36a6282 100644 --- a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp +++ b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp @@ -706,6 +706,8 @@ void OverlayWidget::setupWindow() { && (widgetPoint.y() > st::mediaviewHeaderTop) && QRect(_x, _y, _w, _h).contains(widgetPoint)) { return Flag::None | Flag(0); + } else if (_stories && _stories->ignoreWindowMove(widgetPoint)) { + return Flag::None | Flag(0); } return Flag::Move | Flag(0); }); diff --git a/Telegram/lib_ui b/Telegram/lib_ui index 048156ecd..ae4651092 160000 --- a/Telegram/lib_ui +++ b/Telegram/lib_ui @@ -1 +1 @@ -Subproject commit 048156ecda89b54ea48aafd5b0f97ccffcc922c9 +Subproject commit ae465109201b30fa61b643d72aaf374265c6a9ed