mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-07 07:33:52 +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);
|
setHashtagPressed(-1);
|
||||||
_hashtagDeleteSelected = _hashtagDeletePressed = false;
|
_hashtagDeleteSelected = _hashtagDeletePressed = false;
|
||||||
_filteredSelected = -1;
|
_filteredSelected = -1;
|
||||||
setFilteredPressed(-1);
|
setFilteredPressed(-1, false);
|
||||||
_peerSearchSelected = -1;
|
_peerSearchSelected = -1;
|
||||||
setPeerSearchPressed(-1);
|
setPeerSearchPressed(-1);
|
||||||
_searchedSelected = -1;
|
_searchedSelected = -1;
|
||||||
|
@ -1297,7 +1297,7 @@ void InnerWidget::mousePressEvent(QMouseEvent *e) {
|
||||||
setCollapsedPressed(_collapsedSelected);
|
setCollapsedPressed(_collapsedSelected);
|
||||||
setHashtagPressed(_hashtagSelected);
|
setHashtagPressed(_hashtagSelected);
|
||||||
_hashtagDeletePressed = _hashtagDeleteSelected;
|
_hashtagDeletePressed = _hashtagDeleteSelected;
|
||||||
setFilteredPressed(_filteredSelected);
|
setFilteredPressed(_filteredSelected, _selectedTopicJump);
|
||||||
setPeerSearchPressed(_peerSearchSelected);
|
setPeerSearchPressed(_peerSearchSelected);
|
||||||
setSearchedPressed(_searchedSelected);
|
setSearchedPressed(_searchedSelected);
|
||||||
if (base::in_range(_collapsedSelected, 0, _collapsedRows.size())) {
|
if (base::in_range(_collapsedSelected, 0, _collapsedRows.size())) {
|
||||||
|
@ -1336,10 +1336,21 @@ void InnerWidget::mousePressEvent(QMouseEvent *e) {
|
||||||
const auto &result = _filterResults[_filteredPressed];
|
const auto &result = _filterResults[_filteredPressed];
|
||||||
const auto row = result.row;
|
const auto row = result.row;
|
||||||
const auto filterId = _filterId;
|
const auto filterId = _filterId;
|
||||||
row->addRipple(
|
const auto origin = e->pos()
|
||||||
e->pos() - QPoint(0, filteredOffset() + result.top),
|
- QPoint(0, filteredOffset() + result.top);
|
||||||
QSize(width(), row->height()),
|
const auto updateCallback = [=] { repaintDialogRow(filterId, row); };
|
||||||
[=] { repaintDialogRow(filterId, row); });
|
if (_pressedTopicJump) {
|
||||||
|
row->addTopicJumpRipple(
|
||||||
|
origin,
|
||||||
|
_topicJumpCache.get(),
|
||||||
|
updateCallback);
|
||||||
|
} else {
|
||||||
|
row->clearTopicJumpRipple();
|
||||||
|
row->addRipple(
|
||||||
|
origin,
|
||||||
|
QSize(width(), row->height()),
|
||||||
|
updateCallback);
|
||||||
|
}
|
||||||
} else if (base::in_range(_peerSearchPressed, 0, _peerSearchResults.size())) {
|
} else if (base::in_range(_peerSearchPressed, 0, _peerSearchResults.size())) {
|
||||||
auto &result = _peerSearchResults[_peerSearchPressed];
|
auto &result = _peerSearchResults[_peerSearchPressed];
|
||||||
auto row = &result->row;
|
auto row = &result->row;
|
||||||
|
@ -1613,7 +1624,7 @@ void InnerWidget::mousePressReleased(
|
||||||
auto hashtagDeletePressed = _hashtagDeletePressed;
|
auto hashtagDeletePressed = _hashtagDeletePressed;
|
||||||
_hashtagDeletePressed = false;
|
_hashtagDeletePressed = false;
|
||||||
auto filteredPressed = _filteredPressed;
|
auto filteredPressed = _filteredPressed;
|
||||||
setFilteredPressed(-1);
|
setFilteredPressed(-1, false);
|
||||||
auto peerSearchPressed = _peerSearchPressed;
|
auto peerSearchPressed = _peerSearchPressed;
|
||||||
setPeerSearchPressed(-1);
|
setPeerSearchPressed(-1);
|
||||||
auto searchedPressed = _searchedPressed;
|
auto searchedPressed = _searchedPressed;
|
||||||
|
@ -1655,10 +1666,14 @@ void InnerWidget::setPressed(Row *pressed, bool pressedTopicJump) {
|
||||||
_pressed->stopLastRipple();
|
_pressed->stopLastRipple();
|
||||||
}
|
}
|
||||||
_pressed = pressed;
|
_pressed = pressed;
|
||||||
_pressedTopicJump = pressedTopicJump;
|
if (pressed || !pressedTopicJump) {
|
||||||
const auto history = pressedTopicJump ? pressed->history() : nullptr;
|
_pressedTopicJump = pressedTopicJump;
|
||||||
const auto item = history ? history->chatListMessage() : nullptr;
|
const auto history = pressedTopicJump
|
||||||
_pressedTopicJumpRootId = item ? item->topicRootId() : MsgId();
|
? pressed->history()
|
||||||
|
: nullptr;
|
||||||
|
const auto item = history ? history->chatListMessage() : nullptr;
|
||||||
|
_pressedTopicJumpRootId = item ? item->topicRootId() : MsgId();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1673,11 +1688,22 @@ void InnerWidget::setHashtagPressed(int pressed) {
|
||||||
_hashtagPressed = pressed;
|
_hashtagPressed = pressed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InnerWidget::setFilteredPressed(int pressed) {
|
void InnerWidget::setFilteredPressed(int pressed, bool pressedTopicJump) {
|
||||||
if (base::in_range(_filteredPressed, 0, _filterResults.size())) {
|
if (_filteredPressed != pressed
|
||||||
_filterResults[_filteredPressed].row->stopLastRipple();
|
|| _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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
_filteredPressed = pressed;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void InnerWidget::setPeerSearchPressed(int pressed) {
|
void InnerWidget::setPeerSearchPressed(int pressed) {
|
||||||
|
|
|
@ -246,7 +246,7 @@ private:
|
||||||
void setPressed(Row *pressed, bool pressedTopicJump);
|
void setPressed(Row *pressed, bool pressedTopicJump);
|
||||||
void clearPressed();
|
void clearPressed();
|
||||||
void setHashtagPressed(int pressed);
|
void setHashtagPressed(int pressed);
|
||||||
void setFilteredPressed(int pressed);
|
void setFilteredPressed(int pressed, bool pressedTopicJump);
|
||||||
void setPeerSearchPressed(int pressed);
|
void setPeerSearchPressed(int pressed);
|
||||||
void setSearchedPressed(int pressed);
|
void setSearchedPressed(int pressed);
|
||||||
bool isPressed() const {
|
bool isPressed() const {
|
||||||
|
|
Loading…
Add table
Reference in a new issue