Added selecting scroll to sections.

Fixed #17136.
This commit is contained in:
23rd 2021-10-30 19:19:44 +03:00
parent 27dc91e51a
commit c55dc00180
2 changed files with 19 additions and 9 deletions

View file

@ -326,6 +326,11 @@ ListWidget::ListWidget(
) | rpl::start_with_next([=](bool wide) { ) | rpl::start_with_next([=](bool wide) {
_isChatWide = wide; _isChatWide = wide;
}, lifetime()); }, lifetime());
_selectScroll.scrolls(
) | rpl::start_with_next([=](int d) {
delegate->listScrollTo(_visibleTop + d);
}, lifetime());
} }
Main::Session &ListWidget::session() const { Main::Session &ListWidget::session() const {
@ -2326,7 +2331,7 @@ void ListWidget::mouseActionCancel() {
_mouseAction = MouseAction::None; _mouseAction = MouseAction::None;
clearDragSelection(); clearDragSelection();
_wasSelectedText = false; _wasSelectedText = false;
//_widget->noSelectingScroll(); // #TODO select scroll _selectScroll.cancel();
} }
void ListWidget::mouseActionFinish( void ListWidget::mouseActionFinish(
@ -2410,7 +2415,7 @@ void ListWidget::mouseActionFinish(
} }
_mouseAction = MouseAction::None; _mouseAction = MouseAction::None;
_mouseSelectType = TextSelectType::Letters; _mouseSelectType = TextSelectType::Letters;
//_widget->noSelectingScroll(); // #TODO select scroll _selectScroll.cancel();
if (QGuiApplication::clipboard()->supportsSelection() if (QGuiApplication::clipboard()->supportsSelection()
&& _selectedTextItem && _selectedTextItem
@ -2605,11 +2610,14 @@ void ListWidget::mouseActionUpdate() {
} }
} }
//if (_mouseAction == MouseAction::Selecting) { if (_mouseAction == MouseAction::Selecting) {
// _widget->checkSelectingScroll(mousePos); _selectScroll.checkDeltaScroll(
//} else { mousePosition,
// _widget->noSelectingScroll(); _visibleTop,
//} // #TODO select scroll _visibleBottom);
} else {
_selectScroll.cancel();
}
} }
style::cursor ListWidget::computeMouseCursor() const { style::cursor ListWidget::computeMouseCursor() const {
@ -2652,7 +2660,7 @@ std::unique_ptr<QMimeData> ListWidget::prepareDrag() {
}(); }();
if (auto mimeData = TextUtilities::MimeDataFromText(selectedText)) { if (auto mimeData = TextUtilities::MimeDataFromText(selectedText)) {
clearDragSelection(); clearDragSelection();
// _widget->noSelectingScroll(); #TODO scroll _selectScroll.cancel();
if (!urls.isEmpty()) { if (!urls.isEmpty()) {
mimeData->setUrls(urls); mimeData->setUrls(urls);

View file

@ -9,9 +9,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/rp_widget.h" #include "ui/rp_widget.h"
#include "ui/effects/animations.h" #include "ui/effects/animations.h"
#include "ui/chat/select_scroll_manager.h" // Has base/timer.h.
#include "ui/widgets/tooltip.h" #include "ui/widgets/tooltip.h"
#include "mtproto/sender.h" #include "mtproto/sender.h"
#include "base/timer.h"
#include "data/data_messages.h" #include "data/data_messages.h"
#include "history/view/history_view_element.h" #include "history/view/history_view_element.h"
@ -590,6 +590,8 @@ private:
FullMsgId _highlightedMessageId; FullMsgId _highlightedMessageId;
base::Timer _highlightTimer; base::Timer _highlightTimer;
Ui::SelectScrollManager _selectScroll;
rpl::event_stream<FullMsgId> _requestedToEditMessage; rpl::event_stream<FullMsgId> _requestedToEditMessage;
rpl::event_stream<FullMsgId> _requestedToReplyToMessage; rpl::event_stream<FullMsgId> _requestedToReplyToMessage;
rpl::event_stream<FullMsgId> _requestedToReadMessage; rpl::event_stream<FullMsgId> _requestedToReadMessage;