simplify emision of QFileSystemWatcher signals

the proxy signals are just redundant

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2022-12-20 20:49:17 +02:00
parent 279e569c51
commit 668ccbb7c4
5 changed files with 22 additions and 59 deletions

View file

@ -35,47 +35,6 @@ QFileSystemWatcherPrivate::QFileSystemWatcherPrivate()
{
}
void QFileSystemWatcherPrivate::init()
{
Q_Q(const QFileSystemWatcher);
QObject::connect(watcher,
SIGNAL(fileChanged(QString,bool)),
q,
SLOT(_q_fileChanged(QString,bool)));
QObject::connect(watcher,
SIGNAL(directoryChanged(QString,bool)),
q,
SLOT(_q_directoryChanged(QString,bool)));
}
void QFileSystemWatcherPrivate::_q_fileChanged(const QString &path, bool removed)
{
Q_Q(QFileSystemWatcher);
if (!files.contains(path)) {
// the path was removed after a change was detected, but before we delivered the signal
return;
}
if (removed)
files.removeAll(path);
emit q->fileChanged(path);
}
void QFileSystemWatcherPrivate::_q_directoryChanged(const QString &path, bool removed)
{
Q_Q(QFileSystemWatcher);
if (!directories.contains(path)) {
// perhaps the path was removed after a change was detected, but before we delivered the signal
return;
}
if (removed)
directories.removeAll(path);
emit q->directoryChanged(path);
}
/*!
\class QFileSystemWatcher
\brief The QFileSystemWatcher class provides an interface for monitoring files and directories for modifications.
@ -111,7 +70,15 @@ void QFileSystemWatcherPrivate::_q_directoryChanged(const QString &path, bool re
QFileSystemWatcher::QFileSystemWatcher(QObject *parent)
: QObject(*new QFileSystemWatcherPrivate, parent)
{
d_func()->init();
Q_D(QFileSystemWatcher);
connect(
d->watcher, SIGNAL(fileChanged(QString)),
this, SIGNAL(fileChanged(QString))
);
connect(
d->watcher, SIGNAL(directoryChanged(QString)),
this, SIGNAL(directoryChanged(QString))
);
}
/*!
@ -121,7 +88,15 @@ QFileSystemWatcher::QFileSystemWatcher(QObject *parent)
QFileSystemWatcher::QFileSystemWatcher(const QStringList &paths, QObject *parent)
: QObject(*new QFileSystemWatcherPrivate, parent)
{
d_func()->init();
Q_D(QFileSystemWatcher);
connect(
d->watcher, SIGNAL(fileChanged(QString)),
this, SIGNAL(fileChanged(QString))
);
connect(
d->watcher, SIGNAL(directoryChanged(QString)),
this, SIGNAL(directoryChanged(QString))
);
addPaths(paths);
}

View file

@ -53,10 +53,6 @@ public:
Q_SIGNALS:
void fileChanged(const QString &path);
void directoryChanged(const QString &path);
private:
Q_PRIVATE_SLOT(d_func(), void _q_fileChanged(const QString &path, bool removed))
Q_PRIVATE_SLOT(d_func(), void _q_directoryChanged(const QString &path, bool removed))
};
QT_END_NAMESPACE

View file

@ -50,14 +50,9 @@ class QFileSystemWatcherPrivate : public QObjectPrivate
public:
QFileSystemWatcherPrivate();
void init();
QFileSystemWatcherEngineUnix *watcher;
QStringList files, directories;
// private slots
void _q_fileChanged(const QString &path, bool removed);
void _q_directoryChanged(const QString &path, bool removed);
};
QT_END_NAMESPACE

View file

@ -34,7 +34,6 @@ QFileSystemWatcherEngineUnix::QFileSystemWatcherEngineUnix()
: timer(this)
{
connect(&timer, SIGNAL(timeout()), this, SLOT(timeout()));
timer.start(PollingInterval);
}
QStringList QFileSystemWatcherEngineUnix::addPaths(const QStringList &paths,
@ -96,11 +95,10 @@ void QFileSystemWatcherEngineUnix::timeout()
if (x.value() != fi) {
if (!fi.exists()) {
fit.remove();
emit fileChanged(path, true);
} else {
x.value() = fi;
emit fileChanged(path, false);
}
emit fileChanged(path);
}
}
QMutableHashIterator<QString, QStatInfo> dit(directories);
@ -113,11 +111,10 @@ void QFileSystemWatcherEngineUnix::timeout()
if (!fi.dirEquals(x.value())) {
if (!fi.exists()) {
dit.remove();
emit directoryChanged(path, true);
} else {
x.value() = fi;
emit directoryChanged(path, false);
}
emit directoryChanged(path);
}
}
}

View file

@ -61,8 +61,8 @@ public:
QStringList removePaths(const QStringList &paths, QStringList *files, QStringList *directories);
Q_SIGNALS:
void fileChanged(const QString &path, bool removed);
void directoryChanged(const QString &path, bool removed);
void fileChanged(const QString &path);
void directoryChanged(const QString &path);
private Q_SLOTS:
void timeout();