Fix drag starting item.

This commit is contained in:
John Preston 2023-09-25 21:37:00 +04:00
parent 013c8ebeb4
commit 26e84dbab2

View file

@ -1733,16 +1733,16 @@ std::unique_ptr<QMimeData> HistoryInner::prepareDrag() {
return nullptr; return nullptr;
} }
const auto mouseActionView = viewByItem(_mouseActionItem); const auto pressedView = viewByItem(_mouseActionItem);
bool uponSelected = false; bool uponSelected = false;
if (mouseActionView) { if (pressedView) {
if (!_selected.empty() && _selected.cbegin()->second == FullSelection) { if (!_selected.empty() && _selected.cbegin()->second == FullSelection) {
uponSelected = _dragStateItem uponSelected = _mouseActionItem
&& (_selected.find(_dragStateItem) != _selected.cend()); && (_selected.find(_mouseActionItem) != _selected.cend());
} else { } else {
StateRequest request; StateRequest request;
request.flags |= Ui::Text::StateRequest::Flag::LookupSymbol; request.flags |= Ui::Text::StateRequest::Flag::LookupSymbol;
auto dragState = mouseActionView->textState(_dragStartPosition, request); auto dragState = pressedView->textState(_dragStartPosition, request);
uponSelected = (dragState.cursor == CursorState::Text); uponSelected = (dragState.cursor == CursorState::Text);
if (uponSelected) { if (uponSelected) {
if (_selected.empty() if (_selected.empty()
@ -1783,19 +1783,15 @@ std::unique_ptr<QMimeData> HistoryInner::prepareDrag() {
} }
} }
return mimeData; return mimeData;
} else if (_dragStateItem) { } else if (pressedView) {
const auto view = viewByItem(_dragStateItem);
if (!view) {
return nullptr;
}
auto forwardIds = MessageIdsList(); auto forwardIds = MessageIdsList();
if (_mouseCursorState == CursorState::Date) { if (_mouseCursorState == CursorState::Date) {
forwardIds = session().data().itemOrItsGroup(_dragStateItem); forwardIds = session().data().itemOrItsGroup(_mouseActionItem);
} else if (view->isHiddenByGroup() && pressedHandler) { } else if (pressedView->isHiddenByGroup() && pressedHandler) {
forwardIds = MessageIdsList(1, _dragStateItem->fullId()); forwardIds = MessageIdsList(1, _mouseActionItem->fullId());
} else if (const auto media = view->media()) { } else if (const auto media = pressedView->media()) {
if (media->dragItemByHandler(pressedHandler)) { if (media->dragItemByHandler(pressedHandler)) {
forwardIds = MessageIdsList(1, _dragStateItem->fullId()); forwardIds = MessageIdsList(1, _mouseActionItem->fullId());
} }
} }
if (forwardIds.empty()) { if (forwardIds.empty()) {
@ -1804,7 +1800,7 @@ std::unique_ptr<QMimeData> HistoryInner::prepareDrag() {
session().data().setMimeForwardIds(std::move(forwardIds)); session().data().setMimeForwardIds(std::move(forwardIds));
auto result = std::make_unique<QMimeData>(); auto result = std::make_unique<QMimeData>();
result->setData(u"application/x-td-forward"_q, "1"); result->setData(u"application/x-td-forward"_q, "1");
if (const auto media = view->media()) { if (const auto media = pressedView->media()) {
if (const auto document = media->getDocument()) { if (const auto document = media->getDocument()) {
const auto filepath = document->filepath(true); const auto filepath = document->filepath(true);
if (!filepath.isEmpty()) { if (!filepath.isEmpty()) {