[Libreoffice-commits] online.git: loolwsd/LOOLKit.cpp
Ashod Nakashian
ashod.nakashian at collabora.co.uk
Mon Aug 15 03:04:47 UTC 2016
loolwsd/LOOLKit.cpp | 40 +++++++++++++++++++++++++++++++++++++---
1 file changed, 37 insertions(+), 3 deletions(-)
New commits:
commit dafa5d078de76aab9aaf8f0990b066fe476805a3
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date: Thu Aug 11 20:09:55 2016 -0400
loolwsd: split out per-view LOK callback from default
Change-Id: I01c0bb14cabbbe06bc790920d0f74d0f106bbbde
Reviewed-on: https://gerrit.libreoffice.org/28118
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
Tested-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp
index 7a7b545..6a54fd1 100644
--- a/loolwsd/LOOLKit.cpp
+++ b/loolwsd/LOOLKit.cpp
@@ -717,9 +717,41 @@ public:
private:
- static void ViewCallback(int , const char* , void* )
+ static void ViewCallback(const int nType, const char* pPayload, void* pData)
{
- //TODO: Delegate the callback.
+ Log::trace() << "Document::ViewCallback "
+ << LOKitHelper::kitCallbackTypeToString(nType)
+ << " [" << (pPayload ? pPayload : "") << "]." << Log::end;
+ Document* self = reinterpret_cast<Document*>(pData);
+ if (self == nullptr)
+ {
+ return;
+ }
+
+ std::unique_lock<std::mutex> lock(self->_mutex);
+
+ if (nType == LOK_CALLBACK_DOCUMENT_PASSWORD_TO_MODIFY ||
+ nType == LOK_CALLBACK_DOCUMENT_PASSWORD)
+ {
+ // Mark the document password type.
+ self->setDocumentPassword(nType);
+ return;
+ }
+
+ const auto viewId = self->_loKitDocument->getView();
+
+ // Forward to the same view only.
+ for (auto& it: self->_connections)
+ {
+ if (it.second->isRunning())
+ {
+ auto session = it.second->getSession();
+ if (session && session->getViewId() == viewId)
+ {
+ session->loKitCallback(nType, pPayload);
+ }
+ }
+ }
}
static void DocumentCallback(const int nType, const char* pPayload, void* pData)
@@ -848,6 +880,7 @@ private:
}
auto session = it->second->getSession();
+ auto& callback = _multiView ? ViewCallback : DocumentCallback;
if (!_loKitDocument)
{
@@ -858,6 +891,7 @@ private:
auto lock(_loKit->getLock());
if (LIBREOFFICEKIT_HAS(_loKit->get(), registerCallback))
{
+ //TODO: Use GlobalCallback for Password and statusindicator.
_loKit->get()->pClass->registerCallback(_loKit->get(), DocumentCallback, this);
const auto flags = LOK_FEATURE_DOCUMENT_PASSWORD
| LOK_FEATURE_DOCUMENT_PASSWORD_TO_MODIFY;
@@ -943,7 +977,7 @@ private:
// registerCallback(), as the previous creates a new view in Impress.
_loKitDocument->initializeForRendering(_renderOpts.c_str());
- _loKitDocument->registerCallback(DocumentCallback, this);
+ _loKitDocument->registerCallback(callback, this);
return _loKitDocument;
}
More information about the Libreoffice-commits
mailing list