diff --git a/src/gui/macOS/fileprovidersocketmanager.cpp b/src/gui/macOS/fileprovidersocketmanager.cpp index 0a571dbb65..03257a467c 100644 --- a/src/gui/macOS/fileprovidersocketmanager.cpp +++ b/src/gui/macOS/fileprovidersocketmanager.cpp @@ -16,6 +16,8 @@ #include +#include "fileprovidersocketcontroller.h" + namespace OCC { @@ -61,6 +63,26 @@ void FileProviderSocketManager::slotNewConnection() return; } + connect(socket, &QLocalSocket::disconnected, + this, &FileProviderSocketManager::slotOnDisconnected); + connect(socket, &QLocalSocket::destroyed, + this, &FileProviderSocketManager::slotSocketDestroyed); + + const FileProviderSocketControllerPtr controller(new FileProviderSocketController(socket)); + _socketControllers.insert(socket, controller); +} + +void FileProviderSocketManager::slotOnDisconnected() +{ + const auto socket = qobject_cast(sender()); + Q_ASSERT(socket); + socket->deleteLater(); +} + +void FileProviderSocketManager::slotSocketDestroyed(QObject *object) +{ + const auto socket = qobject_cast(object); + _socketControllers.remove(socket); } } // namespace Mac diff --git a/src/gui/macOS/fileprovidersocketmanager.h b/src/gui/macOS/fileprovidersocketmanager.h index df6f195069..12f3f2d4dd 100644 --- a/src/gui/macOS/fileprovidersocketmanager.h +++ b/src/gui/macOS/fileprovidersocketmanager.h @@ -23,6 +23,9 @@ namespace OCC namespace Mac { +class FileProviderSocketController; +using FileProviderSocketControllerPtr = QSharedPointer; + #ifdef Q_OS_MACOS QString fileProviderSocketPath(); #endif @@ -37,10 +40,13 @@ public: private slots: void startListening(); void slotNewConnection(); + void slotOnDisconnected(); + void slotSocketDestroyed(QObject *object); private: QString _socketPath; QLocalServer _socketServer; + QHash _socketControllers; }; } // namespace Mac