OSDN Git Service

Dropping project blocks other programs (like file explorer).
authorcon <qtc-committer@nokia.com>
Fri, 10 Dec 2010 13:49:06 +0000 (14:49 +0100)
committercon <qtc-committer@nokia.com>
Fri, 10 Dec 2010 13:49:34 +0000 (14:49 +0100)
We have to delay or drop event handling, so the Qt code that delivers
the event can return control. The commit also prevents dropping another
file while we are currently already handling a drop.

Task-number: QTCREATORBUG-3344

src/plugins/coreplugin/mainwindow.cpp
src/plugins/coreplugin/mainwindow.h

index 37c3572..898ec1a 100644 (file)
@@ -401,7 +401,7 @@ static bool isDesktopFileManagerDrop(const QMimeData *d, QStringList *files = 0)
 
 void MainWindow::dragEnterEvent(QDragEnterEvent *event)
 {
-    if (isDesktopFileManagerDrop(event->mimeData())) {
+    if (isDesktopFileManagerDrop(event->mimeData()) && m_filesToOpenDelayed.isEmpty()) {
         event->accept();
     } else {
         event->ignore();
@@ -413,12 +413,23 @@ void MainWindow::dropEvent(QDropEvent *event)
     QStringList files;
     if (isDesktopFileManagerDrop(event->mimeData(), &files)) {
         event->accept();
-        openFiles(files, ICore::SwitchMode);
+        m_filesToOpenDelayed.append(files);
+        QTimer::singleShot(50, this, SLOT(openDelayedFiles()));
     } else {
         event->ignore();
     }
 }
 
+void MainWindow::openDelayedFiles()
+{
+    if (m_filesToOpenDelayed.isEmpty())
+        return;
+    activateWindow();
+    raise();
+    openFiles(m_filesToOpenDelayed, ICore::SwitchMode);
+    m_filesToOpenDelayed.clear();
+}
+
 IContext *MainWindow::currentContextObject() const
 {
     return m_activeContext;
index b5ec6c9..c3a4b96 100644 (file)
@@ -161,6 +161,7 @@ private slots:
     void updateFocusWidget(QWidget *old, QWidget *now);
     void setSidebarVisible(bool visible);
     void destroyVersionDialog();
+    void openDelayedFiles();
 
 private:
     void updateContextObject(IContext *context);
@@ -222,6 +223,8 @@ private:
 
     QToolButton *m_toggleSideBarButton;
     QColor m_overrideColor;
+
+    QStringList m_filesToOpenDelayed;
 };
 
 } // namespace Internal