loleaflet/src/control/Parts.js            |   11 +++++-----
 loleaflet/src/layer/tile/CalcTileLayer.js |   32 +++++++++++++++++++++---------
 2 files changed, 29 insertions(+), 14 deletions(-)

New commits:
commit e6814552df0f4a7a8910e898013b8ca3b112df35
Author:     Dennis Francis <dennis.fran...@collabora.com>
AuthorDate: Mon Jul 13 13:57:53 2020 +0530
Commit:     Dennis Francis <dennis.fran...@collabora.com>
CommitDate: Mon Jul 13 12:10:43 2020 +0200

    request sheet-geometry data just after sending setclientpart to core...
    
    instead of doing it on getting a 'setpart' back from core.
    
    This is helpful in the following respects:
    
    1. On new sheet insert, setpart is not sent by the core.
    2. On sheet-switch, new sheet's messages (cursor) can arrive before we
    get sheet-geometry-data because it is requested only after setpart
    which is too late.
    3. save almost all of the round-trip time for sheet-geometry data.
    
    Change-Id: Id6464be72c2ff6e8dce006d8e7ba3141b8d6cf1b
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/98621
    Tested-by: Jenkins
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Dennis Francis <dennis.fran...@collabora.com>

diff --git a/loleaflet/src/control/Parts.js b/loleaflet/src/control/Parts.js
index d112557f7..3fc5c0961 100644
--- a/loleaflet/src/control/Parts.js
+++ b/loleaflet/src/control/Parts.js
@@ -32,6 +32,12 @@ L.Map.include({
                        this._socket.sendMessage('resetselection');
                }
 
+               // If this wasn't triggered from the server,
+               // then notify the server of the change.
+               if (!external) {
+                       this._socket.sendMessage('setclientpart part=' + 
docLayer._selectedPart);
+               }
+
                this.fire('updateparts', {
                        selectedPart: docLayer._selectedPart,
                        selectedParts: docLayer._selectedParts,
@@ -39,11 +45,6 @@ L.Map.include({
                        docType: docLayer._docType
                });
 
-               // 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);
diff --git a/loleaflet/src/layer/tile/CalcTileLayer.js 
b/loleaflet/src/layer/tile/CalcTileLayer.js
index dfe2fd9e2..36d8d43af 100644
--- a/loleaflet/src/layer/tile/CalcTileLayer.js
+++ b/loleaflet/src/layer/tile/CalcTileLayer.js
@@ -234,6 +234,9 @@ L.CalcTileLayer = (L.Browser.mobile ? L.TileLayer : 
L.CanvasTileLayer).extend({
 
        _onUpdateParts: function (e) {
                if (typeof this._prevSelectedPart === 'number' && !e.source) {
+                       this._clearMsgReplayStore();
+                       this.refreshViewData(undefined, false /* 
compatDataSrcOnly */, true /* sheetGeometryChanged */);
+                       this._switchSplitPanesContext();
                        this.hideAnnotations(this._prevSelectedPart);
                        this.showAnnotations();
                }
@@ -445,9 +448,7 @@ L.CalcTileLayer = (L.Browser.mobile ? L.TileLayer : 
L.CanvasTileLayer).extend({
        _onSetPartMsg: function (textMsg) {
                var part = parseInt(textMsg.match(/\d+/g)[0]);
                if (!this.isHiddenPart(part)) {
-                       this._clearMsgReplayStore();
-                       this._switchSplitPanesContext();
-                       this.refreshViewData(undefined, false /* 
compatDataSrcOnly */, true /* sheetGeometryChanged */);
+                       this.refreshViewData(undefined, true /* 
compatDataSrcOnly */, false /* sheetGeometryChanged */);
                }
        },
 
@@ -723,10 +724,10 @@ L.CalcTileLayer = (L.Browser.mobile ? L.TileLayer : 
L.CanvasTileLayer).extend({
                        this._sheetGeomFirstWait = false;
                        this.sheetGeometry = new L.SheetGeometry(jsonMsgObj,
                                this._tileWidthTwips, this._tileHeightTwips,
-                               this._tileSize, this._tilePixelScale);
+                               this._tileSize, this._tilePixelScale, 
this._selectedPart);
                }
                else {
-                       this.sheetGeometry.update(jsonMsgObj);
+                       this.sheetGeometry.update(jsonMsgObj, /* 
checkCompleteness */ false, this._selectedPart);
                }
 
                this._replayPrintTwipsMsgs();
@@ -1073,17 +1074,19 @@ L.SheetGeometry = L.Class.extend({
        // all flags (ie 'columns', 'rows', 'sizes', 'hidden', 'filtered',
        // 'groups') enabled.
        initialize: function (sheetGeomJSON, tileWidthTwips, tileHeightTwips,
-               tileSizeCSSPixels, dpiScale) {
+               tileSizeCSSPixels, dpiScale, part) {
 
                if (typeof sheetGeomJSON !== 'object' ||
                        typeof tileWidthTwips !== 'number' ||
                        typeof tileHeightTwips !== 'number' ||
                        typeof tileSizeCSSPixels !== 'number' ||
-                       typeof dpiScale !== 'number') {
+                       typeof dpiScale !== 'number' ||
+                       typeof part !== 'number') {
                        console.error('Incorrect constructor argument types or 
missing required arguments');
                        return;
                }
 
+               this._part = -1;
                this._columns = new L.SheetDimension();
                this._rows = new L.SheetDimension();
                this._unoCommand = '.uno:SheetGeometryData';
@@ -1092,10 +1095,10 @@ L.SheetGeometry = L.Class.extend({
                this.setTileGeometryData(tileWidthTwips, tileHeightTwips, 
tileSizeCSSPixels,
                        dpiScale, false /* update position info ?*/);
 
-               this.update(sheetGeomJSON, /* checkCompleteness */ true);
+               this.update(sheetGeomJSON, /* checkCompleteness */ true, part);
        },
 
-       update: function (sheetGeomJSON, checkCompleteness) {
+       update: function (sheetGeomJSON, checkCompleteness, part) {
 
                if (!this._testValidity(sheetGeomJSON, checkCompleteness)) {
                        return false;
@@ -1116,12 +1119,23 @@ L.SheetGeometry = L.Class.extend({
                        }
                }
 
+               if (updateOK) {
+                       console.assert(typeof part === 'number', 'part must be 
a number');
+                       if (part !== this._part) {
+                               this._part = part;
+                       }
+               }
+
                this._columns.setMaxIndex(+sheetGeomJSON.maxtiledcolumn);
                this._rows.setMaxIndex(+sheetGeomJSON.maxtiledrow);
 
                return updateOK;
        },
 
+       getPart: function () {
+               return this._part;
+       },
+
        setTileGeometryData: function (tileWidthTwips, tileHeightTwips, 
tileSizeCSSPixels,
                dpiScale, updatePositions) {
                this._columns.setTileGeometryData(tileWidthTwips, 
tileSizeCSSPixels, dpiScale, updatePositions);
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to