diff --git a/Telegram/SourceFiles/history/view/history_view_replies_section.cpp b/Telegram/SourceFiles/history/view/history_view_replies_section.cpp index 12a9bb4deb..fc29b7fca1 100644 --- a/Telegram/SourceFiles/history/view/history_view_replies_section.cpp +++ b/Telegram/SourceFiles/history/view/history_view_replies_section.cpp @@ -270,7 +270,7 @@ void RepliesWidget::setupRootView() { raw->resize(raw->width(), st::historyReplyHeight); raw->paintRequest( ) | rpl::start_with_next([=](QRect clip) { - auto p = Painter(_rootView->entity()); + auto p = Painter(raw); p.fillRect(clip, st::historyPinnedBg); auto top = st::msgReplyPadding.top(); @@ -308,6 +308,25 @@ void RepliesWidget::setupRootView() { } }, raw->lifetime()); + raw->setCursor(style::cur_pointer); + const auto pressed = raw->lifetime().make_state(); + raw->events( + ) | rpl::start_with_next([=](not_null e) { + const auto mouse = static_cast(e.get()); + if (e->type() == QEvent::MouseButtonPress) { + if (mouse->button() == Qt::LeftButton) { + *pressed = true; + } + } else if (e->type() == QEvent::MouseButtonRelease) { + if (mouse->button() == Qt::LeftButton) { + if (base::take(*pressed) + && raw->rect().contains(mouse->pos())) { + showAtStart(); + } + } + } + }, raw->lifetime()); + _rootView->geometryValue( ) | rpl::start_with_next([=](QRect rect) { _rootShadow->moveToLeft( @@ -1068,6 +1087,10 @@ void RepliesWidget::scrollDownClicked() { } } +void RepliesWidget::showAtStart() { + showAtPosition(Data::MinMessagePosition); +} + void RepliesWidget::showAtEnd() { showAtPosition(Data::MaxMessagePosition); } diff --git a/Telegram/SourceFiles/history/view/history_view_replies_section.h b/Telegram/SourceFiles/history/view/history_view_replies_section.h index d70ee35bc0..fcaf23cb4b 100644 --- a/Telegram/SourceFiles/history/view/history_view_replies_section.h +++ b/Telegram/SourceFiles/history/view/history_view_replies_section.h @@ -141,6 +141,7 @@ private: void updateAdaptiveLayout(); void saveState(not_null memento); void restoreState(not_null memento); + void showAtStart(); void showAtEnd(); void showAtPosition( Data::MessagePosition position,