diff --git a/Telegram/SourceFiles/info/media/info_media_inner_widget.cpp b/Telegram/SourceFiles/info/media/info_media_inner_widget.cpp index 5ee9aa5c2b..42ec30b8af 100644 --- a/Telegram/SourceFiles/info/media/info_media_inner_widget.cpp +++ b/Telegram/SourceFiles/info/media/info_media_inner_widget.cpp @@ -216,11 +216,23 @@ void InnerWidget::refreshSearchField() { st::infoMediaSearch); _searchField->resizeToWidth(width()); _searchField->show(); + search->queryChanges() + | rpl::start_with_next([this] { + scrollToSearchField(); + }, _searchField->lifetime()); } else { _searchField = nullptr; } } +void InnerWidget::scrollToSearchField() { + Expects(_searchField != nullptr); + + auto top = _searchField->y(); + auto bottom = top + _searchField->height(); + _scrollToRequests.fire({ top, bottom }); +} + object_ptr<ListWidget> InnerWidget::setupList() { auto result = object_ptr<ListWidget>( this, @@ -232,7 +244,10 @@ object_ptr<ListWidget> InnerWidget::setupList() { using namespace rpl::mappers; result->scrollToRequests() | rpl::map([widget = result.data()](int to) { - return widget->y() + to; + return Ui::ScrollToRequest { + widget->y() + to, + -1 + }; }) | rpl::start_to_stream( _scrollToRequests, diff --git a/Telegram/SourceFiles/info/media/info_media_inner_widget.h b/Telegram/SourceFiles/info/media/info_media_inner_widget.h index 8ceec3fd98..1cfaec6e71 100644 --- a/Telegram/SourceFiles/info/media/info_media_inner_widget.h +++ b/Telegram/SourceFiles/info/media/info_media_inner_widget.h @@ -21,6 +21,7 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org #pragma once #include "ui/rp_widget.h" +#include "ui/widgets/scroll_area.h" #include "base/unique_qptr.h" #include "info/media/info_media_widget.h" #include "info/media/info_media_list_widget.h" @@ -51,7 +52,7 @@ public: void saveState(not_null<Memento*> memento); void restoreState(not_null<Memento*> memento); - rpl::producer<int> scrollToRequests() const { + rpl::producer<Ui::ScrollToRequest> scrollToRequests() const { return _scrollToRequests.events(); } rpl::producer<SelectedItems> selectedListValue() const; @@ -77,6 +78,7 @@ private: Type type() const; void refreshSearchField(); + void scrollToSearchField(); object_ptr<ListWidget> setupList(); const not_null<Controller*> _controller; @@ -90,7 +92,7 @@ private: bool _inResize = false; - rpl::event_stream<int> _scrollToRequests; + rpl::event_stream<Ui::ScrollToRequest> _scrollToRequests; rpl::event_stream<rpl::producer<SelectedItems>> _selectedLists; }; diff --git a/Telegram/SourceFiles/info/media/info_media_widget.cpp b/Telegram/SourceFiles/info/media/info_media_widget.cpp index a0c685157b..4351cfd9a9 100644 --- a/Telegram/SourceFiles/info/media/info_media_widget.cpp +++ b/Telegram/SourceFiles/info/media/info_media_widget.cpp @@ -88,8 +88,8 @@ Widget::Widget( this, controller)); _inner->scrollToRequests() - | rpl::start_with_next([this](int skip) { - scrollTo({ skip, -1 }); + | rpl::start_with_next([this](Ui::ScrollToRequest request) { + scrollTo(request); }, _inner->lifetime()); } diff --git a/Telegram/SourceFiles/info/media/info_media_widget.h b/Telegram/SourceFiles/info/media/info_media_widget.h index dabd2a27bc..c5bbe0ca9e 100644 --- a/Telegram/SourceFiles/info/media/info_media_widget.h +++ b/Telegram/SourceFiles/info/media/info_media_widget.h @@ -25,10 +25,6 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org #include "storage/storage_shared_media.h" #include "data/data_search_controller.h" -namespace Ui { -class SearchFieldController; -} // namespace Ui - namespace Info { namespace Media { diff --git a/Telegram/SourceFiles/ui/search_field_controller.h b/Telegram/SourceFiles/ui/search_field_controller.h index 5e296b44f1..edc0e7aebc 100644 --- a/Telegram/SourceFiles/ui/search_field_controller.h +++ b/Telegram/SourceFiles/ui/search_field_controller.h @@ -51,6 +51,9 @@ public: rpl::producer<QString> queryValue() const { return _query.value(); } + rpl::producer<QString> queryChanges() const { + return _query.changes(); + } rpl::lifetime &lifetime() { return _lifetime;