]> git.lyx.org Git - lyx.git/blobdiff - src/support/FileMonitor.cpp
More requires --> required, for C++2a.
[lyx.git] / src / support / FileMonitor.cpp
index 2a794f29318b0442726d01182c11c17fb69518ec..a3b17ad012f3f9a86e6505790ee16a400532b446 100644 (file)
@@ -176,7 +176,14 @@ FileMonitor::FileMonitor(std::shared_ptr<FileMonitorGuard> monitor)
 
 void FileMonitor::connectToFileMonitorGuard()
 {
+       // Connections need to be asynchronous because the receiver can own this
+       // object and therefore is allowed to delete it.
+       // Qt signal:
        QObject::connect(monitor_.get(), SIGNAL(fileChanged(bool)),
+                        this, SIGNAL(fileChanged(bool)),
+                        Qt::QueuedConnection);
+       // Boost signal:
+       QObject::connect(this, SIGNAL(fileChanged(bool)),
                         this, SLOT(changed(bool)));
 }
 
@@ -187,54 +194,10 @@ signals2::connection FileMonitor::connect(slot const & slot)
 }
 
 
-void FileMonitor::disconnect()
-{
-       fileChanged_.disconnect_all_slots();
-       QObject::disconnect(this, SIGNAL(fileChanged(bool)));
-}
-
-
 void FileMonitor::changed(bool const exists)
 {
        // emit boost signal
        fileChanged_(exists);
-       Q_EMIT fileChanged(exists);
-}
-
-
-FileMonitorBlocker FileMonitor::block(int delay)
-{
-       FileMonitorBlocker blocker = blocker_.lock();
-       if (!blocker)
-               blocker_ = blocker = make_shared<FileMonitorBlockerGuard>(this);
-       blocker->setDelay(delay);
-       return blocker;
-}
-
-
-FileMonitorBlockerGuard::FileMonitorBlockerGuard(FileMonitor * monitor)
-       : monitor_(monitor), delay_(0)
-{
-       QObject::disconnect(monitor->monitor_.get(), SIGNAL(fileChanged(bool)),
-                           monitor, SLOT(changed(bool)));
-}
-
-
-void FileMonitorBlockerGuard::setDelay(int delay)
-{
-       delay_ = max(delay_, delay);
-}
-
-
-FileMonitorBlockerGuard::~FileMonitorBlockerGuard()
-{
-       if (!monitor_)
-               return;
-       // Even if delay_ is 0, the QTimer is necessary. Indeed, the notifications
-       // from QFileSystemWatcher that we meant to ignore are not going to be
-       // treated immediately, so we must yield to give us the opportunity to
-       // ignore them.
-       QTimer::singleShot(delay_, monitor_, SLOT(connectToFileMonitorGuard()));
 }
 
 
@@ -280,7 +243,7 @@ void ActiveFileMonitor::checkModified()
                }
        }
        if (changed)
-               FileMonitor::changed(exists);
+               Q_EMIT FileMonitor::fileChanged(exists);
        QTimer::singleShot(interval_, this, SLOT(clearCooldown()));
 }