Scroll to field on search query update.

This commit is contained in:
John Preston 2017-11-06 14:00:37 +04:00
parent 3992ff6b59
commit 11a3308cf5
5 changed files with 25 additions and 9 deletions

View File

@ -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,

View File

@ -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;
};

View File

@ -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());
}

View File

@ -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 {

View File

@ -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;