mirror of
https://github.com/telegramdesktop/tdesktop
synced 2025-03-24 12:22:44 +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);
|
st::infoMediaSearch);
|
||||||
_searchField->resizeToWidth(width());
|
_searchField->resizeToWidth(width());
|
||||||
_searchField->show();
|
_searchField->show();
|
||||||
|
search->queryChanges()
|
||||||
|
| rpl::start_with_next([this] {
|
||||||
|
scrollToSearchField();
|
||||||
|
}, _searchField->lifetime());
|
||||||
} else {
|
} else {
|
||||||
_searchField = nullptr;
|
_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() {
|
object_ptr<ListWidget> InnerWidget::setupList() {
|
||||||
auto result = object_ptr<ListWidget>(
|
auto result = object_ptr<ListWidget>(
|
||||||
this,
|
this,
|
||||||
@ -232,7 +244,10 @@ object_ptr<ListWidget> InnerWidget::setupList() {
|
|||||||
using namespace rpl::mappers;
|
using namespace rpl::mappers;
|
||||||
result->scrollToRequests()
|
result->scrollToRequests()
|
||||||
| rpl::map([widget = result.data()](int to) {
|
| rpl::map([widget = result.data()](int to) {
|
||||||
return widget->y() + to;
|
return Ui::ScrollToRequest {
|
||||||
|
widget->y() + to,
|
||||||
|
-1
|
||||||
|
};
|
||||||
})
|
})
|
||||||
| rpl::start_to_stream(
|
| rpl::start_to_stream(
|
||||||
_scrollToRequests,
|
_scrollToRequests,
|
||||||
|
@ -21,6 +21,7 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "ui/rp_widget.h"
|
#include "ui/rp_widget.h"
|
||||||
|
#include "ui/widgets/scroll_area.h"
|
||||||
#include "base/unique_qptr.h"
|
#include "base/unique_qptr.h"
|
||||||
#include "info/media/info_media_widget.h"
|
#include "info/media/info_media_widget.h"
|
||||||
#include "info/media/info_media_list_widget.h"
|
#include "info/media/info_media_list_widget.h"
|
||||||
@ -51,7 +52,7 @@ public:
|
|||||||
void saveState(not_null<Memento*> memento);
|
void saveState(not_null<Memento*> memento);
|
||||||
void restoreState(not_null<Memento*> memento);
|
void restoreState(not_null<Memento*> memento);
|
||||||
|
|
||||||
rpl::producer<int> scrollToRequests() const {
|
rpl::producer<Ui::ScrollToRequest> scrollToRequests() const {
|
||||||
return _scrollToRequests.events();
|
return _scrollToRequests.events();
|
||||||
}
|
}
|
||||||
rpl::producer<SelectedItems> selectedListValue() const;
|
rpl::producer<SelectedItems> selectedListValue() const;
|
||||||
@ -77,6 +78,7 @@ private:
|
|||||||
Type type() const;
|
Type type() const;
|
||||||
|
|
||||||
void refreshSearchField();
|
void refreshSearchField();
|
||||||
|
void scrollToSearchField();
|
||||||
object_ptr<ListWidget> setupList();
|
object_ptr<ListWidget> setupList();
|
||||||
|
|
||||||
const not_null<Controller*> _controller;
|
const not_null<Controller*> _controller;
|
||||||
@ -90,7 +92,7 @@ private:
|
|||||||
|
|
||||||
bool _inResize = false;
|
bool _inResize = false;
|
||||||
|
|
||||||
rpl::event_stream<int> _scrollToRequests;
|
rpl::event_stream<Ui::ScrollToRequest> _scrollToRequests;
|
||||||
rpl::event_stream<rpl::producer<SelectedItems>> _selectedLists;
|
rpl::event_stream<rpl::producer<SelectedItems>> _selectedLists;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -88,8 +88,8 @@ Widget::Widget(
|
|||||||
this,
|
this,
|
||||||
controller));
|
controller));
|
||||||
_inner->scrollToRequests()
|
_inner->scrollToRequests()
|
||||||
| rpl::start_with_next([this](int skip) {
|
| rpl::start_with_next([this](Ui::ScrollToRequest request) {
|
||||||
scrollTo({ skip, -1 });
|
scrollTo(request);
|
||||||
}, _inner->lifetime());
|
}, _inner->lifetime());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,10 +25,6 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
|||||||
#include "storage/storage_shared_media.h"
|
#include "storage/storage_shared_media.h"
|
||||||
#include "data/data_search_controller.h"
|
#include "data/data_search_controller.h"
|
||||||
|
|
||||||
namespace Ui {
|
|
||||||
class SearchFieldController;
|
|
||||||
} // namespace Ui
|
|
||||||
|
|
||||||
namespace Info {
|
namespace Info {
|
||||||
namespace Media {
|
namespace Media {
|
||||||
|
|
||||||
|
@ -51,6 +51,9 @@ public:
|
|||||||
rpl::producer<QString> queryValue() const {
|
rpl::producer<QString> queryValue() const {
|
||||||
return _query.value();
|
return _query.value();
|
||||||
}
|
}
|
||||||
|
rpl::producer<QString> queryChanges() const {
|
||||||
|
return _query.changes();
|
||||||
|
}
|
||||||
|
|
||||||
rpl::lifetime &lifetime() {
|
rpl::lifetime &lifetime() {
|
||||||
return _lifetime;
|
return _lifetime;
|
||||||
|
Loading…
Reference in New Issue
Block a user