SVN commit 931496 by dfaure: Restore support for pasting clipboard data (e.g. text) into a file, like konq-kde3 could do. CCMAIL: peter.penz@gmx.at M +2 -34 dolphin/src/dolphinview.cpp M +2 -0 konqueror/src/konqmainwindow.cpp M +37 -10 lib/konq/konq_operations.cpp M +8 -0 lib/konq/konq_operations.h --- trunk/KDE/kdebase/apps/dolphin/src/dolphinview.cpp #931495:931496 @@ -1043,30 +1043,7 @@ QPair DolphinView::pasteInfo() const { - QPair ret; - QClipboard* clipboard = QApplication::clipboard(); - const QMimeData* mimeData = clipboard->mimeData(); - - KUrl::List urls = KUrl::List::fromMimeData(mimeData); - if (!urls.isEmpty()) { - // disable the paste action if no writing is supported - KFileItem item(KFileItem::Unknown, KFileItem::Unknown, url()); - ret.first = KonqFileItemCapabilities(KFileItemList() << item).supportsWriting(); - - if (urls.count() == 1) { - const KFileItem item(KFileItem::Unknown, KFileItem::Unknown, urls.first(), true); - ret.second = item.isDir() ? i18nc("@action:inmenu", "Paste One Folder") : - i18nc("@action:inmenu", "Paste One File"); - - } else { - ret.second = i18ncp("@action:inmenu", "Paste One Item", "Paste %1 Items", urls.count()); - } - } else { - ret.first = false; - ret.second = i18nc("@action:inmenu", "Paste"); - } - - return ret; + return KonqOperations::pasteInfo(url()); } void DolphinView::setTabsForFilesEnabled(bool tabsForFiles) @@ -1439,16 +1416,7 @@ void DolphinView::pasteToUrl(const KUrl& url) { - QClipboard* clipboard = QApplication::clipboard(); - const QMimeData* mimeData = clipboard->mimeData(); - - const KUrl::List sourceUrls = KUrl::List::fromMimeData(mimeData); - if (KonqMimeData::decodeIsCutSelection(mimeData)) { - KonqOperations::copy(this, KonqOperations::MOVE, sourceUrls, url); - clipboard->clear(); - } else { - KonqOperations::copy(this, KonqOperations::COPY, sourceUrls, url); - } + KonqOperations::doPaste(this, url); } void DolphinView::updateZoomLevel(int oldZoomLevel) --- trunk/KDE/kdebase/apps/konqueror/src/konqmainwindow.cpp #931495:931496 @@ -3259,6 +3259,8 @@ return KParts::MainWindow::eventFilter( obj, ev ); } +// Only called when m_bLocationBarConnected, i.e. when the combobox has focus. +// The rest of the time, the part handles the cut/copy/paste actions. void KonqMainWindow::slotClipboardDataChanged() { const QMimeData *data = QApplication::clipboard()->mimeData(); --- trunk/KDE/kdebase/apps/lib/konq/konq_operations.cpp #931495:931496 @@ -21,6 +21,7 @@ */ #include "konq_operations.h" +#include "konq_fileitemcapabilities.h" #include "konqmimedata.h" #include @@ -126,17 +127,12 @@ void KonqOperations::doPaste( QWidget * parent, const KUrl & destUrl, const QPoint &pos ) { - // move or not move ? - bool move = false; - const QMimeData *data = QApplication::clipboard()->mimeData(); - if ( data->hasFormat( "application/x-kde-cutselection" ) ) { - move = KonqMimeData::decodeIsCutSelection( data ); - kDebug(1203) << "move (from clipboard data) = " << move; - } + QClipboard* clipboard = QApplication::clipboard(); + const QMimeData *data = clipboard->mimeData(); + const bool move = KonqMimeData::decodeIsCutSelection(data); KIO::Job *job = KIO::pasteClipboard( destUrl, parent, move ); - if ( job ) - { + if (job) { KonqOperations * op = new KonqOperations( parent ); KIO::CopyJob * copyJob = static_cast(job); KIOPasteInfo * pi = new KIOPasteInfo; @@ -527,7 +523,7 @@ break; } } - + if ( !equalDestination ) popup.addAction(popupMoveAction); } @@ -790,4 +786,35 @@ return static_cast( parent() ); } +QPair KonqOperations::pasteInfo(const KUrl& targetUrl) +{ + QPair ret; + QClipboard* clipboard = QApplication::clipboard(); + const QMimeData* mimeData = clipboard->mimeData(); + + const bool canPasteData = mimeData->hasText(); // TODO KIO::canPasteMimeSource(mimeData) + KUrl::List urls = KUrl::List::fromMimeData(mimeData); + if (!urls.isEmpty() || canPasteData) { + // disable the paste action if no writing is supported + KFileItem item(KFileItem::Unknown, KFileItem::Unknown, targetUrl); + ret.first = KonqFileItemCapabilities(KFileItemList() << item).supportsWriting(); + + if (urls.count() == 1) { + const KFileItem item(KFileItem::Unknown, KFileItem::Unknown, urls.first(), true); + ret.second = item.isDir() ? i18nc("@action:inmenu", "Paste One Folder") : + i18nc("@action:inmenu", "Paste One File"); + + } else if (!urls.isEmpty()) { + ret.second = i18ncp("@action:inmenu", "Paste One Item", "Paste %1 Items", urls.count()); + } else { + ret.second = i18nc("@action:inmenu", "Paste Clipboard Contents"); + } + } else { + ret.first = false; + ret.second = i18nc("@action:inmenu", "Paste"); + } + + return ret; +} + #include "konq_operations.moc" --- trunk/KDE/kdebase/apps/lib/konq/konq_operations.h #931495:931496 @@ -89,6 +89,14 @@ static void doPaste( QWidget * parent, const KUrl & destUrl, const QPoint &pos = QPoint() ); /** + * Returns the state of the paste action: + * first is whether the action should be enabled + * second is the text for the action + * @since 4.3 + */ + static QPair pasteInfo(const KUrl& targetUrl); + + /** * Empty the trash */ static void emptyTrash( QWidget* parent );