mirror of
https://invent.kde.org/system/dolphin
synced 2024-07-04 17:30:55 +00:00
Fix: can't drop into remote dir
KFileItem::isDir() only works when it's created from listDir(), or from a local QUrl. For a remote QUrl, isDir always returns false, so we can't use that in supportsDropping(). As a workaround, now supportsDropping() always returns true in remote dirs -- we don't check if a remote dir is writable when dropping.
This commit is contained in:
parent
f13f3c7a26
commit
0eed595268
|
@ -52,7 +52,12 @@ KIO::DropJob *DragAndDropHelper::dropUrls(const QUrl &destUrl, QDropEvent *event
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
if (supportsDropping(destUrl)) {
|
||||
// TODO: remove this check once Qt is fixed so that it doesn't emit a QDropEvent on Wayland
|
||||
// when we called QDragMoveEvent::ignore()
|
||||
// https://codereview.qt-project.org/c/qt/qtwayland/+/541750
|
||||
KFileItem item(destUrl);
|
||||
// KFileItem(QUrl) only stat local URLs, so we always allow dropping on non-local URLs
|
||||
if (!item.isLocalFile() || supportsDropping(item)) {
|
||||
// Drop into a directory or a desktop-file
|
||||
KIO::DropJob *job = KIO::drop(event, destUrl);
|
||||
KJobWidgets::setWindow(job, window);
|
||||
|
@ -63,12 +68,6 @@ KIO::DropJob *DragAndDropHelper::dropUrls(const QUrl &destUrl, QDropEvent *event
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
bool DragAndDropHelper::supportsDropping(const QUrl &destUrl)
|
||||
{
|
||||
KFileItem item(destUrl);
|
||||
return supportsDropping(item);
|
||||
}
|
||||
|
||||
bool DragAndDropHelper::supportsDropping(const KFileItem &destItem)
|
||||
{
|
||||
return (destItem.isDir() && destItem.isWritable()) || destItem.isDesktopFile();
|
||||
|
@ -80,7 +79,8 @@ void DragAndDropHelper::updateDropAction(QDropEvent *event, const QUrl &destUrl)
|
|||
event->setDropAction(Qt::IgnoreAction);
|
||||
event->ignore();
|
||||
}
|
||||
if (supportsDropping(destUrl)) {
|
||||
KFileItem item(destUrl);
|
||||
if (!item.isLocalFile() || supportsDropping(item)) {
|
||||
event->setDropAction(event->proposedAction());
|
||||
event->accept();
|
||||
} else {
|
||||
|
|
|
@ -42,15 +42,6 @@ public:
|
|||
*/
|
||||
static KIO::DropJob *dropUrls(const QUrl &destUrl, QDropEvent *event, QWidget *window);
|
||||
|
||||
/**
|
||||
* Checks if the destination supports dropping.
|
||||
*
|
||||
* @param destUrl URL of the item destination.
|
||||
* @return True if the destination is a directory and is writable, or it's a desktop file.
|
||||
* False otherwise.
|
||||
*/
|
||||
static bool supportsDropping(const QUrl &destUrl);
|
||||
|
||||
/**
|
||||
* Checks if the destination supports dropping.
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue
Block a user