Fix unintentional stories viewer move-by-mouse-drag.

This commit is contained in:
John Preston 2023-07-20 10:00:29 +04:00
parent 69b9c63a69
commit 92f2b6dfbf
14 changed files with 45 additions and 1 deletions

View File

@ -2962,6 +2962,13 @@ bool ComposeControls::isRecording() const {
return _voiceRecordBar->isRecording(); return _voiceRecordBar->isRecording();
} }
bool ComposeControls::isRecordingPressed() const {
return !_voiceRecordBar->isRecordingLocked()
&& (!_voiceRecordBar->isHidden()
|| (_send->type() == Ui::SendButton::Type::Record
&& _send->isDown()));
}
rpl::producer<bool> ComposeControls::recordingValue() const { rpl::producer<bool> ComposeControls::recordingValue() const {
return _recording.value(); return _recording.value();
} }

View File

@ -216,6 +216,7 @@ public:
[[nodiscard]] rpl::producer<bool> lockShowStarts() const; [[nodiscard]] rpl::producer<bool> lockShowStarts() const;
[[nodiscard]] bool isLockPresent() const; [[nodiscard]] bool isLockPresent() const;
[[nodiscard]] bool isRecording() const; [[nodiscard]] bool isRecording() const;
[[nodiscard]] bool isRecordingPressed() const;
[[nodiscard]] rpl::producer<bool> recordingValue() const; [[nodiscard]] rpl::producer<bool> recordingValue() const;
[[nodiscard]] rpl::producer<bool> hasSendTextValue() const; [[nodiscard]] rpl::producer<bool> hasSendTextValue() const;

View File

@ -1581,6 +1581,10 @@ bool VoiceRecordBar::isRecording() const {
return _recording.current(); return _recording.current();
} }
bool VoiceRecordBar::isRecordingLocked() const {
return isRecording() && _lock->isLocked();
}
bool VoiceRecordBar::isActive() const { bool VoiceRecordBar::isActive() const {
return isRecording() || isListenState(); return isRecording() || isListenState();
} }

View File

@ -89,6 +89,7 @@ public:
void setStartRecordingFilter(Fn<bool()> &&callback); void setStartRecordingFilter(Fn<bool()> &&callback);
[[nodiscard]] bool isRecording() const; [[nodiscard]] bool isRecording() const;
[[nodiscard]] bool isRecordingLocked() const;
[[nodiscard]] bool isLockPresent() const; [[nodiscard]] bool isLockPresent() const;
[[nodiscard]] bool isListenState() const; [[nodiscard]] bool isListenState() const;
[[nodiscard]] bool isActive() const; [[nodiscard]] bool isActive() const;

View File

@ -1443,6 +1443,11 @@ void Controller::moveFromShown() {
} }
} }
bool Controller::ignoreWindowMove(QPoint position) const {
return _replyArea->ignoreWindowMove(position)
|| _header->ignoreWindowMove(position);
}
rpl::lifetime &Controller::lifetime() { rpl::lifetime &Controller::lifetime() {
return _lifetime; return _lifetime;
} }

View File

@ -160,6 +160,8 @@ public:
void reportRequested(); void reportRequested();
void togglePinnedRequested(bool pinned); void togglePinnedRequested(bool pinned);
[[nodiscard]] bool ignoreWindowMove(QPoint position) const;
[[nodiscard]] rpl::lifetime &lifetime(); [[nodiscard]] rpl::lifetime &lifetime();
private: private:

View File

@ -542,10 +542,12 @@ void Header::rebuildVolumeControls(
: Direction::Vertical); : Direction::Vertical);
slider->setChangeProgressCallback([=](float64 value) { slider->setChangeProgressCallback([=](float64 value) {
_ignoreWindowMove = true;
_controller->changeVolume(value); _controller->changeVolume(value);
updateVolumeIcon(); updateVolumeIcon();
}); });
slider->setChangeFinishedCallback([=](float64 value) { slider->setChangeFinishedCallback([=](float64 value) {
_ignoreWindowMove = false;
_controller->volumeChangeFinished(); _controller->volumeChangeFinished();
}); });
button->setClickedCallback([=] { button->setClickedCallback([=] {
@ -623,6 +625,11 @@ void Header::raise() {
} }
} }
bool Header::ignoreWindowMove(QPoint position) const {
return _ignoreWindowMove;
}
void Header::updateDateText() { void Header::updateDateText() {
if (!_date || !_data || !_data->date) { if (!_date || !_data || !_data->date) {
return; return;

View File

@ -54,6 +54,8 @@ public:
void show(HeaderData data); void show(HeaderData data);
void raise(); void raise();
[[nodiscard]] bool ignoreWindowMove(QPoint position) const;
private: private:
void updateDateText(); void updateDateText();
void applyPauseState(); void applyPauseState();
@ -79,6 +81,7 @@ private:
std::unique_ptr<Ui::RpWidget> _privacy; std::unique_ptr<Ui::RpWidget> _privacy;
std::optional<HeaderData> _data; std::optional<HeaderData> _data;
base::Timer _dateUpdateTimer; base::Timer _dateUpdateTimer;
bool _ignoreWindowMove = false;
}; };

View File

@ -677,6 +677,10 @@ rpl::producer<bool> ReplyArea::activeValue() const {
) | rpl::distinct_until_changed(); ) | rpl::distinct_until_changed();
} }
bool ReplyArea::ignoreWindowMove(QPoint position) const {
return _controls->isRecordingPressed();
}
void ReplyArea::showPremiumToast(not_null<DocumentData*> emoji) { void ReplyArea::showPremiumToast(not_null<DocumentData*> emoji) {
// #TODO stories // #TODO stories
} }

View File

@ -67,6 +67,8 @@ public:
[[nodiscard]] rpl::producer<bool> activeValue() const; [[nodiscard]] rpl::producer<bool> activeValue() const;
[[nodiscard]] rpl::producer<bool> hasSendTextValue() const; [[nodiscard]] rpl::producer<bool> hasSendTextValue() const;
[[nodiscard]] bool ignoreWindowMove(QPoint position) const;
private: private:
class Cant; class Cant;

View File

@ -103,6 +103,10 @@ void View::togglePinnedRequested(bool pinned) {
_controller->togglePinnedRequested(pinned); _controller->togglePinnedRequested(pinned);
} }
bool View::ignoreWindowMove(QPoint position) const {
return _controller->ignoreWindowMove(position);
}
SiblingView View::sibling(SiblingType type) const { SiblingView View::sibling(SiblingType type) const {
return _controller->sibling(type); return _controller->sibling(type);
} }

View File

@ -82,6 +82,8 @@ public:
void reportRequested(); void reportRequested();
void togglePinnedRequested(bool pinned); void togglePinnedRequested(bool pinned);
[[nodiscard]] bool ignoreWindowMove(QPoint position) const;
[[nodiscard]] rpl::lifetime &lifetime(); [[nodiscard]] rpl::lifetime &lifetime();
private: private:

View File

@ -706,6 +706,8 @@ void OverlayWidget::setupWindow() {
&& (widgetPoint.y() > st::mediaviewHeaderTop) && (widgetPoint.y() > st::mediaviewHeaderTop)
&& QRect(_x, _y, _w, _h).contains(widgetPoint)) { && QRect(_x, _y, _w, _h).contains(widgetPoint)) {
return Flag::None | Flag(0); return Flag::None | Flag(0);
} else if (_stories && _stories->ignoreWindowMove(widgetPoint)) {
return Flag::None | Flag(0);
} }
return Flag::Move | Flag(0); return Flag::Move | Flag(0);
}); });

@ -1 +1 @@
Subproject commit 048156ecda89b54ea48aafd5b0f97ccffcc922c9 Subproject commit ae465109201b30fa61b643d72aaf374265c6a9ed