wsd/ClientSession.cpp | 58 ++++++++++++++++++++++++++------------------------ wsd/ClientSession.hpp | 1 2 files changed, 32 insertions(+), 27 deletions(-)
New commits: commit 3daf7893dff625dab59ecaec1d9af360350fd517 Author: Tamás Zolnai <tamas.zol...@collabora.com> Date: Tue Jun 19 16:15:37 2018 +0200 Handle part number a bit more robust in case of Writer Change-Id: I7390f1c5f4289be67deacf3540068c040b230584 diff --git a/wsd/ClientSession.cpp b/wsd/ClientSession.cpp index 46bdfe775..85f740bea 100644 --- a/wsd/ClientSession.cpp +++ b/wsd/ClientSession.cpp @@ -48,7 +48,8 @@ ClientSession::ClientSession(const std::string& id, _tileWidthPixel(0), _tileHeightPixel(0), _tileWidthTwips(0), - _tileHeightTwips(0) + _tileHeightTwips(0), + _isTextDocument(false) { const size_t curConnections = ++LOOLWSD::NumConnections; LOG_INF("ClientSession ctor [" << getName() << "], current number of connections: " << curConnections); @@ -291,17 +292,20 @@ bool ClientSession::_handleInput(const char *buffer, int length) } else if (tokens[0] == "setclientpart") { - int temp; - if (tokens.size() != 2 || - !getTokenInteger(tokens[1], "part", temp)) + if(!_isTextDocument) { - sendTextFrame("error: cmd=setclientpart kind=syntax"); - return false; - } - else - { - _clientSelectedPart = temp; - return forwardToChild(std::string(buffer, length), docBroker); + int temp; + if (tokens.size() != 2 || + !getTokenInteger(tokens[1], "part", temp)) + { + sendTextFrame("error: cmd=setclientpart kind=syntax"); + return false; + } + else + { + _clientSelectedPart = temp; + return forwardToChild(std::string(buffer, length), docBroker); + } } } else if (tokens[0] == "clientzoom") @@ -724,17 +728,20 @@ bool ClientSession::handleKitToClientMessage(const char* buffer, const int lengt } else if (tokens[0] == "setpart:" && tokens.size() == 2) { - int setPart; - if(getTokenInteger(tokens[1], "part", setPart)) - { - _clientSelectedPart = setPart; - } - else if (stringToInteger(tokens[1], setPart)) + if(!_isTextDocument) { + int setPart; + if(getTokenInteger(tokens[1], "part", setPart)) + { _clientSelectedPart = setPart; - } - else - return false; + } + else if (stringToInteger(tokens[1], setPart)) + { + _clientSelectedPart = setPart; + } + else + return false; + } } else if (tokens.size() == 3 && tokens[0] == "saveas:") { @@ -865,7 +872,7 @@ bool ClientSession::handleKitToClientMessage(const char* buffer, const int lengt std::string docType; if(getTokenString(token, "type", docType)) { - _docType = docType; + _isTextDocument = docType.find("text") != std::string::npos; } } @@ -1102,7 +1109,7 @@ void ClientSession::handleTileInvalidation(const std::string& message, if(!_clientVisibleArea.hasSurface() || _tileWidthPixel == 0 || _tileHeightPixel == 0 || _tileWidthTwips == 0 || _tileHeightTwips == 0 || - _clientSelectedPart == -1) + (_clientSelectedPart == -1 && !_isTextDocument)) { return; } @@ -1111,14 +1118,11 @@ void ClientSession::handleTileInvalidation(const std::string& message, int part = result.first; Util::Rectangle& invalidateRect = result.second; - if(_docType.find("text") != std::string::npos) // For Writer we don't have separate parts - part = 0; - - if(part == -1) // If no part is specifed we use the part used by the client + if( part == -1 ) // If no part is specifed we use the part used by the client part = _clientSelectedPart; std::vector<TileDesc> invalidTiles; - if(part == _clientSelectedPart) + if(part == _clientSelectedPart || _isTextDocument) { Util::Rectangle intersection; intersection._x1 = std::max(invalidateRect._x1, _clientVisibleArea._x1); diff --git a/wsd/ClientSession.hpp b/wsd/ClientSession.hpp index ed8266bbc..decc6c227 100644 --- a/wsd/ClientSession.hpp +++ b/wsd/ClientSession.hpp @@ -196,6 +196,7 @@ private: // Type of the docuemnt, extracter from status message std::string _docType; + bool _isTextDocument; std::vector<std::string> _tilesOnFly; boost::optional<std::chrono::time_point<std::chrono::steady_clock>> _tileCounterStartTime; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits