diff --git a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp index c06bc9f5d0..fbf03a4df8 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp @@ -536,7 +536,8 @@ void InnerWidget::paintEvent(QPaintEvent *e) { const auto reorderingPinned = (_aboveIndex >= 0) && !_pinnedRows.empty(); const auto reorderingIndex = promoted + _aboveIndex; - const auto reorderingRow = (reorderingIndex < list.size()) + const auto reorderingRow = (reorderingIndex >= 0 + && reorderingIndex < list.size()) ? (list.cbegin() + reorderingIndex)->get() : nullptr; if (reorderingRow) { diff --git a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.h b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.h index c1a8d7765f..f21b8eb278 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.h +++ b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.h @@ -198,6 +198,9 @@ private: }; struct FilterResult { + FilterResult(not_null row) : row(row) { + } + not_null row; int top = 0; diff --git a/Telegram/SourceFiles/dialogs/dialogs_list.cpp b/Telegram/SourceFiles/dialogs/dialogs_list.cpp index 0d47d06f4e..c985d7007e 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_list.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_list.cpp @@ -164,7 +164,7 @@ Row *List::rowAtY(int y) const { return (top <= y && bottom > y) ? row.get() : nullptr; } -List::const_iterator List::findByY(int y) const { +List::iterator List::findByY(int y) const { return ranges::lower_bound(_rows, y, ranges::less(), [](const Row *row) { return row->top() + row->height(); }); diff --git a/Telegram/SourceFiles/dialogs/dialogs_list.h b/Telegram/SourceFiles/dialogs/dialogs_list.h index 683d473422..30388b89f0 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_list.h +++ b/Telegram/SourceFiles/dialogs/dialogs_list.h @@ -64,8 +64,7 @@ public: return cfind(value); } [[nodiscard]] iterator find(Row *value) { return cfind(value); } - [[nodiscard]] const_iterator findByY(int y) const; - [[nodiscard]] iterator findByY(int y) { return findByY(y); } + [[nodiscard]] iterator findByY(int y) const; private: void adjustByName(not_null row);