]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Fix drag and drop issue when dragging between windows
authorPeter Penz <peter.penz19@gmail.com>
Thu, 23 Feb 2012 14:51:47 +0000 (15:51 +0100)
committerPeter Penz <peter.penz19@gmail.com>
Thu, 23 Feb 2012 14:55:06 +0000 (15:55 +0100)
Explicitly check whether a dragging is ongoing to decide whether a
tooltip may be shown or not, just using QApplication::mouseButtons()
is not sufficient when dragging between windows.

BUG: 294533
FIXED-IN: 4.8.1

src/views/dolphinview.cpp
src/views/dolphinview.h

index 750cbb99849a14e5903e36bbae481aaec2c785eb..700427ed715a769f337381b17931fc8684d9350e 100644 (file)
@@ -81,6 +81,7 @@ DolphinView::DolphinView(const KUrl& url, QWidget* parent) :
     m_tabsForFiles(false),
     m_assureVisibleCurrentIndex(false),
     m_isFolderWritable(true),
     m_tabsForFiles(false),
     m_assureVisibleCurrentIndex(false),
     m_isFolderWritable(true),
+    m_dragging(false),
     m_url(url),
     m_mode(DolphinView::IconsView),
     m_additionalInfoList(),
     m_url(url),
     m_mode(DolphinView::IconsView),
     m_additionalInfoList(),
@@ -155,6 +156,7 @@ DolphinView::DolphinView(const KUrl& url, QWidget* parent) :
     }
 
     KItemListView* view = controller->view();
     }
 
     KItemListView* view = controller->view();
+    view->installEventFilter(this);
     connect(view, SIGNAL(sortOrderChanged(Qt::SortOrder,Qt::SortOrder)),
             this, SLOT(slotSortOrderChangedByHeader(Qt::SortOrder,Qt::SortOrder)));
     connect(view, SIGNAL(sortRoleChanged(QByteArray,QByteArray)),
     connect(view, SIGNAL(sortOrderChanged(Qt::SortOrder,Qt::SortOrder)),
             this, SLOT(slotSortOrderChangedByHeader(Qt::SortOrder,Qt::SortOrder)));
     connect(view, SIGNAL(sortRoleChanged(QByteArray,QByteArray)),
@@ -674,6 +676,22 @@ bool DolphinView::eventFilter(QObject* watched, QEvent* event)
         }
         break;
 
         }
         break;
 
+    case QEvent::GraphicsSceneDragEnter:
+        if (watched == m_container->controller()->view()) {
+            m_dragging = true;
+        }
+        break;
+
+    case QEvent::GraphicsSceneDragLeave:
+        if (watched == m_container->controller()->view()) {
+            m_dragging = false;
+        }
+        break;
+
+    case QEvent::GraphicsSceneDrop:
+        if (watched == m_container->controller()->view()) {
+            m_dragging = false;
+        }
     default:
         break;
     }
     default:
         break;
     }
@@ -808,7 +826,7 @@ void DolphinView::slotItemHovered(int index)
 {
     const KFileItem item = fileItemModel()->fileItem(index);
 
 {
     const KFileItem item = fileItemModel()->fileItem(index);
 
-    if (GeneralSettings::showToolTips() && hasFocus() && QApplication::mouseButtons() == Qt::NoButton) {
+    if (GeneralSettings::showToolTips() && !m_dragging) {
         QRectF itemRect = m_container->controller()->view()->itemContextRect(index);
         const QPoint pos = m_container->mapToGlobal(itemRect.topLeft().toPoint());
         itemRect.moveTo(pos);
         QRectF itemRect = m_container->controller()->view()->itemContextRect(index);
         const QPoint pos = m_container->mapToGlobal(itemRect.topLeft().toPoint());
         itemRect.moveTo(pos);
index bc65a8b7711552522571d80b9884d1102555b6e8..42ad26098d5bc51d29b004361f17443df829b3cc 100644 (file)
@@ -741,10 +741,12 @@ private:
     static QString fileSizeText(KIO::filesize_t fileSize);
 
 private:
     static QString fileSizeText(KIO::filesize_t fileSize);
 
 private:
-    bool m_active : 1;
-    bool m_tabsForFiles : 1;
-    bool m_assureVisibleCurrentIndex : 1;
-    bool m_isFolderWritable : 1;
+    bool m_active;
+    bool m_tabsForFiles;
+    bool m_assureVisibleCurrentIndex;
+    bool m_isFolderWritable;
+    bool m_dragging; // True if a dragging is done. Required to be able to decide whether a
+                     // tooltip may be shown when hovering an item.
 
     KUrl m_url;
     Mode m_mode;
 
     KUrl m_url;
     Mode m_mode;