[Libreoffice-commits] online.git: loolwsd/ChildSession.cpp loolwsd/LOOLKit.cpp
Ashod Nakashian
ashod.nakashian at collabora.co.uk
Mon Oct 3 05:33:10 UTC 2016
loolwsd/ChildSession.cpp | 12 ++++++------
loolwsd/LOOLKit.cpp | 3 ++-
2 files changed, 8 insertions(+), 7 deletions(-)
New commits:
commit ce832fbc114b7ddcf8fc7802a6a42d6a62254cd5
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date: Sun Oct 2 16:44:11 2016 -0400
loolwsd: get the invalidated part from the callback directly
By default LOK doesn't provide the part where the invalidated
tile is. The part # is found using API, but due to the fact
that callbacks are processed asynchronously, the part #
may well have changed by the time the invalidation is
processed. This could result in buggy invalidations
where no modification took place.
With the new API flag LOK_FEATURE_PART_IN_INVALIDATION_CALLBACK
the part # is included in the callback, which is parsed
and used to inform the client with the correct part #.
Change-Id: Ibd85764bfdc41ebf1aae490df335bd503284ae91
Reviewed-on: https://gerrit.libreoffice.org/29467
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
Tested-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/loolwsd/ChildSession.cpp b/loolwsd/ChildSession.cpp
index 1d39b17..81e5c8d 100644
--- a/loolwsd/ChildSession.cpp
+++ b/loolwsd/ChildSession.cpp
@@ -977,18 +977,17 @@ void ChildSession::loKitCallback(const int nType, const std::string& rPayload)
{
case LOK_CALLBACK_INVALIDATE_TILES:
{
- const auto curPart = _loKitDocument->getPart();
-
- StringTokenizer tokens(rPayload, " ", StringTokenizer::TOK_IGNORE_EMPTY | StringTokenizer::TOK_TRIM);
- if (tokens.count() == 4)
+ StringTokenizer tokens(rPayload, ",", StringTokenizer::TOK_IGNORE_EMPTY | StringTokenizer::TOK_TRIM);
+ if (tokens.count() == 5)
{
- int x, y, width, height;
+ int part, x, y, width, height;
try
{
x = std::stoi(tokens[0]);
y = std::stoi(tokens[1]);
width = std::stoi(tokens[2]);
height = std::stoi(tokens[3]);
+ part = std::stoi(tokens[4]);
}
catch (const std::out_of_range&)
{
@@ -998,10 +997,11 @@ void ChildSession::loKitCallback(const int nType, const std::string& rPayload)
y = 0;
width = INT_MAX;
height = INT_MAX;
+ part = 0;
}
sendTextFrame("invalidatetiles:"
- " part=" + std::to_string(curPart) +
+ " part=" + std::to_string(part) +
" x=" + std::to_string(x) +
" y=" + std::to_string(y) +
" width=" + std::to_string(width) +
diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp
index f73de13..33a4921 100644
--- a/loolwsd/LOOLKit.cpp
+++ b/loolwsd/LOOLKit.cpp
@@ -1105,7 +1105,8 @@ private:
{
_loKit->get()->pClass->registerCallback(_loKit->get(), GlobalCallback, this);
const auto flags = LOK_FEATURE_DOCUMENT_PASSWORD
- | LOK_FEATURE_DOCUMENT_PASSWORD_TO_MODIFY;
+ | LOK_FEATURE_DOCUMENT_PASSWORD_TO_MODIFY
+ | LOK_FEATURE_PART_IN_INVALIDATION_CALLBACK;
_loKit->setOptionalFeatures(flags);
}
More information about the Libreoffice-commits
mailing list