[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/apps
From:       David Faure <faure () kde ! org>
Date:       2009-02-25 11:47:39
Message-ID: 1235562459.355552.6180.nullmailer () svn ! kde ! org
[Download RAW message or body]

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<bool, QString> DolphinView::pasteInfo() const
 {
-    QPair<bool, QString> 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 <ktoolinvocation.h>
@@ -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<KIO::CopyJob *>(job);
         KIOPasteInfo * pi = new KIOPasteInfo;
@@ -527,7 +523,7 @@
                     break;
                 }
             }
-            
+
             if ( !equalDestination )
                 popup.addAction(popupMoveAction);
         }
@@ -790,4 +786,35 @@
     return static_cast<QWidget *>( parent() );
 }
 
+QPair<bool, QString> KonqOperations::pasteInfo(const KUrl& targetUrl)
+{
+    QPair<bool, QString> 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<bool, QString> pasteInfo(const KUrl& targetUrl);
+
+    /**
      * Empty the trash
      */
     static void emptyTrash( QWidget* parent );
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic