Don't allow forwarding local items by drag.

This commit is contained in:
John Preston 2024-07-01 13:20:08 +04:00
parent 715dff0a3e
commit e54204b136
2 changed files with 38 additions and 19 deletions

View file

@ -1731,7 +1731,9 @@ std::unique_ptr<QMimeData> HistoryInner::prepareDrag() {
updateDragSelection(nullptr, nullptr, false); updateDragSelection(nullptr, nullptr, false);
_selectScroll.cancel(); _selectScroll.cancel();
if (!urls.isEmpty()) mimeData->setUrls(urls); if (!urls.isEmpty()) {
mimeData->setUrls(urls);
}
if (uponSelected && !_controller->adaptive().isOneColumn()) { if (uponSelected && !_controller->adaptive().isOneColumn()) {
auto selectedState = getSelectionState(); auto selectedState = getSelectionState();
if (selectedState.count > 0 && selectedState.count == selectedState.canForwardCount) { if (selectedState.count > 0 && selectedState.count == selectedState.canForwardCount) {
@ -1752,21 +1754,21 @@ std::unique_ptr<QMimeData> HistoryInner::prepareDrag() {
== forwardSelectionState.canForwardCount)) { == forwardSelectionState.canForwardCount)) {
forwardIds = getSelectedItems(); forwardIds = getSelectedItems();
} else if (_mouseCursorState == CursorState::Date) { } else if (_mouseCursorState == CursorState::Date) {
forwardIds = session().data().itemOrItsGroup(_mouseActionItem); const auto item = _mouseActionItem;
if (item && item->allowsForward()) {
forwardIds = session().data().itemOrItsGroup(item);
}
} else if ((pressedView->isHiddenByGroup() && pressedHandler) } else if ((pressedView->isHiddenByGroup() && pressedHandler)
|| (pressedView->media() || (pressedView->media()
&& pressedView->media()->dragItemByHandler(pressedHandler))) { && pressedView->media()->dragItemByHandler(pressedHandler))) {
const auto item = _dragStateItem const auto item = _dragStateItem
? _dragStateItem ? _dragStateItem
: _mouseActionItem; : _mouseActionItem;
forwardIds = MessageIdsList(1, item->fullId()); if (item && item->allowsForward()) {
forwardIds = MessageIdsList(1, item->fullId());
}
} }
if (forwardIds.empty()) {
return nullptr;
}
session().data().setMimeForwardIds(std::move(forwardIds));
auto result = std::make_unique<QMimeData>();
result->setData(u"application/x-td-forward"_q, "1");
if (pressedHandler) { if (pressedHandler) {
const auto lnkDocument = reinterpret_cast<DocumentData*>( const auto lnkDocument = reinterpret_cast<DocumentData*>(
pressedHandler->property( pressedHandler->property(
@ -1774,12 +1776,23 @@ std::unique_ptr<QMimeData> HistoryInner::prepareDrag() {
if (lnkDocument) { if (lnkDocument) {
const auto filepath = lnkDocument->filepath(true); const auto filepath = lnkDocument->filepath(true);
if (!filepath.isEmpty()) { if (!filepath.isEmpty()) {
QList<QUrl> urls;
urls.push_back(QUrl::fromLocalFile(filepath)); urls.push_back(QUrl::fromLocalFile(filepath));
result->setUrls(urls);
} }
} }
} }
if (forwardIds.empty() && urls.isEmpty()) {
return nullptr;
}
auto result = std::make_unique<QMimeData>();
if (!forwardIds.empty()) {
session().data().setMimeForwardIds(std::move(forwardIds));
result->setData(u"application/x-td-forward"_q, "1");
}
if (!urls.isEmpty()) {
result->setUrls(urls);
}
return result; return result;
} }
return nullptr; return nullptr;

View file

@ -3778,12 +3778,7 @@ std::unique_ptr<QMimeData> ListWidget::prepareDrag() {
forwardIds = MessageIdsList(1, exactItem->fullId()); forwardIds = MessageIdsList(1, exactItem->fullId());
} }
} }
if (forwardIds.empty()) {
return nullptr;
}
session().data().setMimeForwardIds(std::move(forwardIds));
auto result = std::make_unique<QMimeData>();
result->setData(u"application/x-td-forward"_q, "1");
if (pressedHandler) { if (pressedHandler) {
const auto lnkDocument = reinterpret_cast<DocumentData*>( const auto lnkDocument = reinterpret_cast<DocumentData*>(
pressedHandler->property( pressedHandler->property(
@ -3791,12 +3786,23 @@ std::unique_ptr<QMimeData> ListWidget::prepareDrag() {
if (lnkDocument) { if (lnkDocument) {
const auto filepath = lnkDocument->filepath(true); const auto filepath = lnkDocument->filepath(true);
if (!filepath.isEmpty()) { if (!filepath.isEmpty()) {
QList<QUrl> urls;
urls.push_back(QUrl::fromLocalFile(filepath)); urls.push_back(QUrl::fromLocalFile(filepath));
result->setUrls(urls);
} }
} }
} }
if (forwardIds.empty() && urls.isEmpty()) {
return nullptr;
}
auto result = std::make_unique<QMimeData>();
if (!forwardIds.empty()) {
session().data().setMimeForwardIds(std::move(forwardIds));
result->setData(u"application/x-td-forward"_q, "1");
}
if (!urls.isEmpty()) {
result->setUrls(urls);
}
return result; return result;
} }
return nullptr; return nullptr;