[Libreoffice-commits] online.git: loleaflet/src
Ashod Nakashian
ashod.nakashian at collabora.co.uk
Mon Apr 17 05:06:28 UTC 2017
loleaflet/src/control/Parts.js | 11 ++++++++---
loleaflet/src/layer/tile/CalcTileLayer.js | 2 +-
loleaflet/src/layer/tile/ImpressTileLayer.js | 2 +-
3 files changed, 10 insertions(+), 5 deletions(-)
New commits:
commit 624380089e193870bc8b1fb37fd19800a3377a2a
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date: Sun Apr 16 22:56:26 2017 -0400
loleaflet: don't send setclientpart when the server sets part
Client now sends setclientpart only when it wants to change
the current part number, but not when it is updating
the current part when it receives setpart from the server.
When switching parts (either by the keyboard or mouse)
LoKit sends a notification of the current part and
invalidates tiles. As a reaction to that the client
cancels its tiles and requests new tiles for the
new part. In addition, it sends setclientpart
back with the new part number.
This works fine, except when the client switches
between parts quickly (as when randomly pressing
page-up and page-down quickly in impress), by
the time LoKit receives the second request the
client would have reacted to switching the first
by sending setclientpart for the first. This
will result in a resonance back and forth ad
infinitum (or when the client goes inactive).
The client shouldn't echo back the part number
which the LoKit has told it (it should only send it
to explicitly set it itself). But the server should
be smart enough to remove duplicate setpart
notifications from the client queue. This reduces
the chances of an ocillation like that to happen.
Change-Id: Ia8a1bb25e427ab910129340ce599e3743983463b
Reviewed-on: https://gerrit.libreoffice.org/36598
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
Tested-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/loleaflet/src/control/Parts.js b/loleaflet/src/control/Parts.js
index a7e4fd5b..1071db03 100644
--- a/loleaflet/src/control/Parts.js
+++ b/loleaflet/src/control/Parts.js
@@ -2,7 +2,7 @@
* Document parts switching handler
*/
L.Map.include({
- setPart: function (part) {
+ setPart: function (part, external) {
var docLayer = this._docLayer;
docLayer._prevSelectedPart = docLayer._selectedPart;
if (part === 'prev') {
@@ -30,7 +30,12 @@ L.Map.include({
parts: docLayer._parts,
docType: docLayer._docType
});
- this._socket.sendMessage('setclientpart part=' + docLayer._selectedPart);
+
+ // If this wasn't triggered from the server,
+ // then notify the server of the change.
+ if (!external) {
+ this._socket.sendMessage('setclientpart part=' + docLayer._selectedPart);
+ }
docLayer.eachView(docLayer._viewCursors, docLayer._onUpdateViewCursor, docLayer);
docLayer.eachView(docLayer._cellViewCursors, docLayer._onUpdateCellViewCursor, docLayer);
docLayer.eachView(docLayer._graphicViewMarkers, docLayer._onUpdateGraphicViewSelection, docLayer);
@@ -260,7 +265,7 @@ L.Map.include({
};
this._socket.sendMessage('uno .uno:Name ' + JSON.stringify(command));
- this.setPart(this._docLayer, nPos);
+ this.setPart(this._docLayer);
}
},
diff --git a/loleaflet/src/layer/tile/CalcTileLayer.js b/loleaflet/src/layer/tile/CalcTileLayer.js
index 9fba31fc..d0e300bf 100644
--- a/loleaflet/src/layer/tile/CalcTileLayer.js
+++ b/loleaflet/src/layer/tile/CalcTileLayer.js
@@ -334,7 +334,7 @@ L.CalcTileLayer = L.TileLayer.extend({
_onSetPartMsg: function (textMsg) {
var part = parseInt(textMsg.match(/\d+/g)[0]);
if (part !== this._selectedPart) {
- this._map.setPart(part);
+ this._map.setPart(part, true);
this._map.fire('setpart', {selectedPart: this._selectedPart});
// TODO: test it!
this._map.fire('updaterowcolumnheaders');
diff --git a/loleaflet/src/layer/tile/ImpressTileLayer.js b/loleaflet/src/layer/tile/ImpressTileLayer.js
index 09015cbf..09f8707f 100644
--- a/loleaflet/src/layer/tile/ImpressTileLayer.js
+++ b/loleaflet/src/layer/tile/ImpressTileLayer.js
@@ -343,7 +343,7 @@ L.ImpressTileLayer = L.TileLayer.extend({
_onSetPartMsg: function (textMsg) {
var part = parseInt(textMsg.match(/\d+/g)[0]);
if (part !== this._selectedPart) {
- this._map.setPart(part);
+ this._map.setPart(part, true);
this._map.fire('setpart', {selectedPart: this._selectedPart});
}
},
More information about the Libreoffice-commits
mailing list