mirror of
https://github.com/telegramdesktop/tdesktop
synced 2025-03-20 18:28:11 +00:00
Scroll to field on search query update.
This commit is contained in:
parent
3992ff6b59
commit
11a3308cf5
@ -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,
|
||||
|
@ -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;
|
||||
|
||||
};
|
||||
|
@ -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());
|
||||
}
|
||||
|
||||
|
@ -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 {
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user