mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-06 23:24:01 +02:00
Fix crash in jump-to-topic from filtered results.
This commit is contained in:
parent
01773e5bb1
commit
5e6a4d9e8d
2 changed files with 42 additions and 16 deletions
|
@ -1170,7 +1170,7 @@ void InnerWidget::clearIrrelevantState() {
|
|||
setHashtagPressed(-1);
|
||||
_hashtagDeleteSelected = _hashtagDeletePressed = false;
|
||||
_filteredSelected = -1;
|
||||
setFilteredPressed(-1);
|
||||
setFilteredPressed(-1, false);
|
||||
_peerSearchSelected = -1;
|
||||
setPeerSearchPressed(-1);
|
||||
_searchedSelected = -1;
|
||||
|
@ -1297,7 +1297,7 @@ void InnerWidget::mousePressEvent(QMouseEvent *e) {
|
|||
setCollapsedPressed(_collapsedSelected);
|
||||
setHashtagPressed(_hashtagSelected);
|
||||
_hashtagDeletePressed = _hashtagDeleteSelected;
|
||||
setFilteredPressed(_filteredSelected);
|
||||
setFilteredPressed(_filteredSelected, _selectedTopicJump);
|
||||
setPeerSearchPressed(_peerSearchSelected);
|
||||
setSearchedPressed(_searchedSelected);
|
||||
if (base::in_range(_collapsedSelected, 0, _collapsedRows.size())) {
|
||||
|
@ -1336,10 +1336,21 @@ void InnerWidget::mousePressEvent(QMouseEvent *e) {
|
|||
const auto &result = _filterResults[_filteredPressed];
|
||||
const auto row = result.row;
|
||||
const auto filterId = _filterId;
|
||||
const auto origin = e->pos()
|
||||
- QPoint(0, filteredOffset() + result.top);
|
||||
const auto updateCallback = [=] { repaintDialogRow(filterId, row); };
|
||||
if (_pressedTopicJump) {
|
||||
row->addTopicJumpRipple(
|
||||
origin,
|
||||
_topicJumpCache.get(),
|
||||
updateCallback);
|
||||
} else {
|
||||
row->clearTopicJumpRipple();
|
||||
row->addRipple(
|
||||
e->pos() - QPoint(0, filteredOffset() + result.top),
|
||||
origin,
|
||||
QSize(width(), row->height()),
|
||||
[=] { repaintDialogRow(filterId, row); });
|
||||
updateCallback);
|
||||
}
|
||||
} else if (base::in_range(_peerSearchPressed, 0, _peerSearchResults.size())) {
|
||||
auto &result = _peerSearchResults[_peerSearchPressed];
|
||||
auto row = &result->row;
|
||||
|
@ -1613,7 +1624,7 @@ void InnerWidget::mousePressReleased(
|
|||
auto hashtagDeletePressed = _hashtagDeletePressed;
|
||||
_hashtagDeletePressed = false;
|
||||
auto filteredPressed = _filteredPressed;
|
||||
setFilteredPressed(-1);
|
||||
setFilteredPressed(-1, false);
|
||||
auto peerSearchPressed = _peerSearchPressed;
|
||||
setPeerSearchPressed(-1);
|
||||
auto searchedPressed = _searchedPressed;
|
||||
|
@ -1655,11 +1666,15 @@ void InnerWidget::setPressed(Row *pressed, bool pressedTopicJump) {
|
|||
_pressed->stopLastRipple();
|
||||
}
|
||||
_pressed = pressed;
|
||||
if (pressed || !pressedTopicJump) {
|
||||
_pressedTopicJump = pressedTopicJump;
|
||||
const auto history = pressedTopicJump ? pressed->history() : nullptr;
|
||||
const auto history = pressedTopicJump
|
||||
? pressed->history()
|
||||
: nullptr;
|
||||
const auto item = history ? history->chatListMessage() : nullptr;
|
||||
_pressedTopicJumpRootId = item ? item->topicRootId() : MsgId();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void InnerWidget::clearPressed() {
|
||||
|
@ -1673,11 +1688,22 @@ void InnerWidget::setHashtagPressed(int pressed) {
|
|||
_hashtagPressed = pressed;
|
||||
}
|
||||
|
||||
void InnerWidget::setFilteredPressed(int pressed) {
|
||||
void InnerWidget::setFilteredPressed(int pressed, bool pressedTopicJump) {
|
||||
if (_filteredPressed != pressed
|
||||
|| _pressedTopicJump != pressedTopicJump) {
|
||||
if (base::in_range(_filteredPressed, 0, _filterResults.size())) {
|
||||
_filterResults[_filteredPressed].row->stopLastRipple();
|
||||
}
|
||||
_filteredPressed = pressed;
|
||||
if (pressed >= 0 || !pressedTopicJump) {
|
||||
_pressedTopicJump = pressedTopicJump;
|
||||
const auto history = pressedTopicJump
|
||||
? _filterResults[pressed].row->history()
|
||||
: nullptr;
|
||||
const auto item = history ? history->chatListMessage() : nullptr;
|
||||
_pressedTopicJumpRootId = item ? item->topicRootId() : MsgId();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void InnerWidget::setPeerSearchPressed(int pressed) {
|
||||
|
|
|
@ -246,7 +246,7 @@ private:
|
|||
void setPressed(Row *pressed, bool pressedTopicJump);
|
||||
void clearPressed();
|
||||
void setHashtagPressed(int pressed);
|
||||
void setFilteredPressed(int pressed);
|
||||
void setFilteredPressed(int pressed, bool pressedTopicJump);
|
||||
void setPeerSearchPressed(int pressed);
|
||||
void setSearchedPressed(int pressed);
|
||||
bool isPressed() const {
|
||||
|
|
Loading…
Add table
Reference in a new issue