summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2017-07-28 10:54:44 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2017-07-31 07:22:00 +0000
commit256854cf9760f2b8e8702c2ce2066f67213c0169 (patch)
treee34f0fc1b8e9c6cc5becca60e0cbac06c4f81d12 /src
parent6b7b37cf2e3a9bccecf6f4c03eab7ee5b9e1b255 (diff)
Windows/QFileSystemModel: Fix updating of removed drives
Previously, the updating of drives in QFileSystemModel was connected to a signal triggering when a drive containing watched files was removed via QFileSystemWatcher notification. This did not trigger when a drive that was not expanded in the view was removed, since no files were watched. Since QFileSystemModel is not interested in the path of the drive being removed, add a generic signal triggered by DBT_DEVTYP_VOLUME/DBT_DEVICEREMOVECOMPLETE and use that to update the drives. Complements 8e79806d08ab77aa0f87b69a2ef65789216f41c0. Task-number: QTBUG-18729 Task-number: QTBUG-53436 Change-Id: Ibcde4665824c41151042237d4d620c48bc1e2e18 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/corelib/io/qfilesystemwatcher_win.cpp9
-rw-r--r--src/widgets/dialogs/qfileinfogatherer.cpp2
2 files changed, 7 insertions, 4 deletions
diff --git a/src/corelib/io/qfilesystemwatcher_win.cpp b/src/corelib/io/qfilesystemwatcher_win.cpp
index ff0d45935c..2b5cb63282 100644
--- a/src/corelib/io/qfilesystemwatcher_win.cpp
+++ b/src/corelib/io/qfilesystemwatcher_win.cpp
@@ -113,7 +113,8 @@ public:
signals:
void driveAdded();
- void driveRemoved(const QString &);
+ void driveRemoved(); // Some drive removed
+ void driveRemoved(const QString &); // Watched/known drive removed
void driveLockForRemoval(const QString &);
void driveLockForRemovalFailed(const QString &);
@@ -252,7 +253,8 @@ inline void QWindowsRemovableDriveListener::handleDbtDriveArrivalRemoval(const M
case DBT_DEVICEARRIVAL:
emit driveAdded();
break;
- case DBT_DEVICEREMOVECOMPLETE: // handled by DBT_DEVTYP_HANDLE above
+ case DBT_DEVICEREMOVECOMPLETE: // See above for handling of drives registered with watchers
+ emit driveRemoved();
break;
}
}
@@ -348,7 +350,8 @@ QWindowsFileSystemWatcherEngine::QWindowsFileSystemWatcherEngine(QObject *parent
this, &QWindowsFileSystemWatcherEngine::driveLockForRemoval);
QObject::connect(m_driveListener, &QWindowsRemovableDriveListener::driveLockForRemovalFailed,
this, &QWindowsFileSystemWatcherEngine::driveLockForRemovalFailed);
- QObject::connect(m_driveListener, &QWindowsRemovableDriveListener::driveRemoved,
+ QObject::connect(m_driveListener,
+ QOverload<const QString &>::of(&QWindowsRemovableDriveListener::driveRemoved),
this, &QWindowsFileSystemWatcherEngine::driveRemoved);
#endif // !Q_OS_WINRT
}
diff --git a/src/widgets/dialogs/qfileinfogatherer.cpp b/src/widgets/dialogs/qfileinfogatherer.cpp
index 9f2d15d31b..710ee611b9 100644
--- a/src/widgets/dialogs/qfileinfogatherer.cpp
+++ b/src/widgets/dialogs/qfileinfogatherer.cpp
@@ -98,7 +98,7 @@ QFileInfoGatherer::QFileInfoGatherer(QObject *parent)
if (listener.canConvert<QObject *>()) {
if (QObject *driveListener = listener.value<QObject *>()) {
connect(driveListener, SIGNAL(driveAdded()), this, SLOT(driveAdded()));
- connect(driveListener, SIGNAL(driveRemoved(QString)), this, SLOT(driveRemoved()));
+ connect(driveListener, SIGNAL(driveRemoved()), this, SLOT(driveRemoved()));
}
}
# endif // Q_OS_WIN && !Q_OS_WINRT