mirror of
https://invent.kde.org/system/dolphin
synced 2024-09-17 15:31:20 +00:00
Drag and drop: Adjust destination if the item is no directory or desktop-file
The URL of the view should be used as destination target if a dropping is not done above a directory or desktop-file. BUG: 293511 FIXED-IN: 4.8.1
This commit is contained in:
parent
a3a19f4a06
commit
3c83d8f14d
|
@ -257,7 +257,7 @@ int KFileItemModel::indexForKeyboardSearch(const QString& text, int startFromInd
|
|||
bool KFileItemModel::supportsDropping(int index) const
|
||||
{
|
||||
const KFileItem item = fileItem(index);
|
||||
return item.isNull() ? false : item.isDir();
|
||||
return item.isNull() ? false : item.isDir() || item.isDesktopFile();
|
||||
}
|
||||
|
||||
QString KFileItemModel::roleDescription(const QByteArray& role) const
|
||||
|
|
|
@ -255,8 +255,7 @@ void FoldersPanel::slotViewContextMenuRequested(const QPointF& pos)
|
|||
void FoldersPanel::slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* event)
|
||||
{
|
||||
if (index >= 0) {
|
||||
KFileItemModel* model = fileItemModel();
|
||||
KFileItem destItem = model->fileItem(index);
|
||||
KFileItem destItem = fileItemModel()->fileItem(index);
|
||||
if (destItem.isNull()) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -830,10 +830,13 @@ void DolphinView::slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* even
|
|||
{
|
||||
KUrl destUrl;
|
||||
KFileItem destItem = fileItemModel()->fileItem(index);
|
||||
if (destItem.isNull()) {
|
||||
if (destItem.isNull() || (!destItem.isDir() && !destItem.isDesktopFile())) {
|
||||
// Use the URL of the view as drop target if the item is no directory
|
||||
// or desktop-file
|
||||
destItem = fileItemModel()->rootItem();
|
||||
destUrl = url();
|
||||
} else {
|
||||
// The item represents a directory or desktop-file
|
||||
destUrl = destItem.url();
|
||||
}
|
||||
|
||||
|
|
|
@ -41,15 +41,18 @@ QString DragAndDropHelper::dropUrls(const KFileItem& destItem, const KUrl& destU
|
|||
"org.kde.DndExtract", "extractSelectedFilesTo");
|
||||
message.setArguments(QVariantList() << destUrl.pathOrUrl());
|
||||
QDBusConnection::sessionBus().call(message);
|
||||
} else {
|
||||
} else if (!destItem.isNull() && (destItem.isDir() || destItem.isDesktopFile())) {
|
||||
// Drop into a directory or a desktop-file
|
||||
const KUrl::List urls = KUrl::List::fromMimeData(event->mimeData());
|
||||
foreach (const KUrl& url, urls) {
|
||||
if (url == destUrl) {
|
||||
return i18nc("@info:status", "A folder cannot be dropped into itself");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
KonqOperations::doDrop(destItem, destUrl, event, QApplication::activeWindow());
|
||||
} else {
|
||||
KonqOperations::doDrop(KFileItem(), destUrl, event, QApplication::activeWindow());
|
||||
}
|
||||
|
||||
return QString();
|
||||
|
|
|
@ -34,10 +34,11 @@ class LIBDOLPHINPRIVATE_EXPORT DragAndDropHelper
|
|||
{
|
||||
public:
|
||||
/**
|
||||
* Handles the dropping of URLs to the given
|
||||
* destination. A context menu with the options
|
||||
* 'Move Here', 'Copy Here', 'Link Here' and
|
||||
* 'Cancel' is offered to the user.
|
||||
* Handles the dropping of URLs to the given destination. A context menu
|
||||
* with the options 'Move Here', 'Copy Here', 'Link Here' and 'Cancel' is
|
||||
* offered to the user. The drag destination must represent a directory or
|
||||
* a desktop-file, otherwise the dropping gets ignored.
|
||||
*
|
||||
* @param destItem Item of the destination. Can be 0 (KFileItem::isNull()) if
|
||||
* no file-item is available for the destination. In this case
|
||||
* destUrl is used as fallback. For performance reasons it is
|
||||
|
@ -45,8 +46,9 @@ public:
|
|||
* @param destUrl URL of the item destination. Is used only if destItem::isNull()
|
||||
* is true.
|
||||
* @param event Drop event.
|
||||
* @return Error message if dropping is not possible. If an empty string
|
||||
* is returned, the dropping has been successful.
|
||||
* @return Error message intended to be shown for users if dropping is not
|
||||
* possible. If an empty string is returned, the dropping has been
|
||||
* successful.
|
||||
*/
|
||||
static QString dropUrls(const KFileItem& destItem,
|
||||
const KUrl& destUrl,
|
||||
|
|
Loading…
Reference in a new issue