loleaflet/README                          |    4 +++-
 loleaflet/spec/tilebench/TileBenchSpec.js |   28 +++++++++++++++++-----------
 loleaflet/src/control/Control.Search.js   |    5 +++++
 loleaflet/src/control/Permission.js       |    1 +
 loleaflet/src/layer/tile/TileLayer.js     |    7 ++++++-
 loolwsd/LOOLSession.cpp                   |    6 +++++-
 loolwsd/protocol.txt                      |    5 +++++
 7 files changed, 42 insertions(+), 14 deletions(-)

New commits:
commit 45793d2cb3dcb77da58c26707899afbfee1a1fc1
Author: Mihai Varga <mihai.va...@collabora.com>
Date:   Fri Aug 7 09:50:50 2015 +0300

    loleaflet: updated README with alltilesloaded event

diff --git a/loleaflet/README b/loleaflet/README
index 67faeeb..2b35a9e 100644
--- a/loleaflet/README
+++ b/loleaflet/README
@@ -101,11 +101,13 @@ Parts (like slides in presentation, or sheets in 
spreadsheets):
 Statusindicator (when the document is loading):
     - events
         map.on('statusindicator', function (e) {}) where:
-            + e.statusType = 'start' | 'setvalue' | 'finish' | 
'loleafletloaded'
+            + e.statusType = 'start' | 'setvalue' | 'finish' | 
'loleafletloaded' | 'alltilesloaded'
             + e.value == a value from 0 to 100 indicating the status
               if the statusType is 'setvalue
             + 'loleafletloaded' is fired when the JS code is initialized and 
the document
                 load request is sent and we're waiting for the tiles
+            + 'alltilesloaded' is fired when all newly requested (empty tiles) 
have been loaded
+                it is not fired during pre-fetching and during editing
 
 Save:
     - API:
commit 913ff95717b7d05a3fa22f07c42be4b2b5b39a97
Author: Mihai Varga <mihai.va...@collabora.com>
Date:   Fri Aug 7 09:49:20 2015 +0300

    loleaflet: requestLOKSession event handler

diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index 4011af5..1372443 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -111,6 +111,7 @@ L.TileLayer = L.GridLayer.extend({
                this._map.on('copy', this._onCopy, this);
                this._map.on('zoomend', this._onUpdateCursor, this);
                this._map.on('dragstart', this._onDragStart, this);
+               this._map.on('requestloksession', this._onRequestLOKSession, 
this);
                this._startMarker.on('drag dragend', 
this._onSelectionHandleDrag, this);
                this._endMarker.on('drag dragend', this._onSelectionHandleDrag, 
this);
                this._textArea = this._map._textArea;
@@ -732,6 +733,10 @@ L.TileLayer = L.GridLayer.extend({
 
        _onDragStart: function () {
                this._map.on('moveend', this._updateScrollOffset, this);
+       },
+
+       _onRequestLOKSession: function () {
+               this.sendMessage('requestloksession');
        }
 });
 
commit 2edb9086a0ebfafbc81a0326b13d510a12001b6c
Author: Mihai Varga <mihai.va...@collabora.com>
Date:   Fri Aug 7 09:44:10 2015 +0300

    loleaflet: fire 'alltilesloaded' as a statusindicator event
    
    This is fired all the new (empty) tiles have been loaded.
    This is not fire for prefetched tiles

diff --git a/loleaflet/spec/tilebench/TileBenchSpec.js 
b/loleaflet/spec/tilebench/TileBenchSpec.js
index 28ac2b0..a31a0b6 100644
--- a/loleaflet/spec/tilebench/TileBenchSpec.js
+++ b/loleaflet/spec/tilebench/TileBenchSpec.js
@@ -50,7 +50,7 @@ describe('TileBench', function () {
        });
 
        afterEach(function () {
-               map.off('alltilesloaded');
+               map.off('statusindicator');
        });
 
        after(function () {
@@ -61,9 +61,11 @@ describe('TileBench', function () {
 
        describe('Benchmarking', function () {
                it('Load all new tiles', function (done) {
-                       map.on('alltilesloaded', L.bind(function () {
-                               loadCount += 1;
-                               done();
+                       map.on('statusindicator', L.bind(function (e) {
+                               if (e.statusType === 'alltilesloaded') {
+                                       loadCount += 1;
+                                       done();
+                               }
                        }, done));
 
                });
@@ -75,9 +77,11 @@ describe('TileBench', function () {
                        var aproxTime = keyInput[keyInput.length - 1][0] + 2000;
 
                        setTimeout(L.bind(function () {
-                               map.on('alltilesloaded', L.bind(function () {
-                                       loadCount += 1;
-                                       getTimes(done);
+                               map.on('statusindicator', L.bind(function (e) {
+                                       if (e.statusType === 'alltilesloaded') {
+                                               loadCount += 1;
+                                               getTimes(done);
+                                       }
                                }, done));
 
 
@@ -115,10 +119,12 @@ describe('TileBench', function () {
                                        done();
                                }
                                else {
-                                       map.on('alltilesloaded', 
L.bind(function () {
-                                               loadCount += 1;
-                                               clearTimeout(this.timeOut);
-                                               done();
+                                       map.on('statusindicator', 
L.bind(function (e) {
+                                               if (e.statusType === 
'alltilesloaded') {
+                                                       loadCount += 1;
+                                                       
clearTimeout(this.timeOut);
+                                                       done();
+                                               }
                                        }, done));
                                }
                        }, done), 3200);
diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index eb8ca81..4011af5 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -418,7 +418,7 @@ L.TileLayer = L.GridLayer.extend({
                                if (!tile.loaded) {
                                        this._emptyTilesCount -= 1;
                                        if (this._emptyTilesCount === 0) {
-                                               
this._map.fire('alltilesloaded');
+                                               
this._map.fire('statusindicator', {statusType: 'alltilesloaded'});
                                        }
                                }
                                tile.el.src = img;
commit 2f355dcee90741d0abde671ec9e8669fc4d7f581
Author: Mihai Varga <mihai.va...@collabora.com>
Date:   Thu Aug 6 18:54:45 2015 +0300

    'requestloksession' message that starts a LOK process
    
    Used to predict the user's interaction with the document and to
    provide a better response time

diff --git a/loleaflet/src/control/Control.Search.js 
b/loleaflet/src/control/Control.Search.js
index 91e3638..c383e02 100644
--- a/loleaflet/src/control/Control.Search.js
+++ b/loleaflet/src/control/Control.Search.js
@@ -46,6 +46,9 @@ L.Control.Search = L.Control.extend({
                        this._updateDisabled();
                        this._refocusOnMap();
                }
+               else {
+                       this._map._docLayer.sendMessage('requestloksession');
+               }
        },
 
        _searchResultFound: function (e) {
@@ -82,6 +85,8 @@ L.Control.Search = L.Control.extend({
                bar.title = title;
 
                L.DomEvent
+                       .on(bar, 'click', L.DomEvent.stop)
+                       .on(bar, 'click', fn, this)
                        .on(bar, 'keyup', L.DomEvent.stop)
                        .on(bar, 'keyup', fn, this);
 
diff --git a/loleaflet/src/control/Permission.js 
b/loleaflet/src/control/Permission.js
index 8d80993..f6ed8ee 100644
--- a/loleaflet/src/control/Permission.js
+++ b/loleaflet/src/control/Permission.js
@@ -21,6 +21,7 @@ L.Map.include({
                if (this._docLayer._permission === 'edit') {
                        return;
                }
+               this._docLayer.sendMessage('requestloksession');
                this.dragging.disable();
        },
 
diff --git a/loolwsd/LOOLSession.cpp b/loolwsd/LOOLSession.cpp
index c74920f..1555017 100644
--- a/loolwsd/LOOLSession.cpp
+++ b/loolwsd/LOOLSession.cpp
@@ -259,6 +259,7 @@ bool MasterProcessSession::handleInput(const char *buffer, 
int length)
              tokens[0] != "invalidatetiles" &&
              tokens[0] != "key" &&
              tokens[0] != "mouse" &&
+             tokens[0] != "requestloksession" &&
              tokens[0] != "resetselection" &&
              tokens[0] != "saveas" &&
              tokens[0] != "selectgraphic" &&
@@ -302,7 +303,10 @@ bool MasterProcessSession::handleInput(const char *buffer, 
int length)
 
         if (_peer.expired())
             dispatchChild();
-        forwardToPeer(buffer, length);
+        if (tokens[0] != "requestloksession")
+        {
+            forwardToPeer(buffer, length);
+        }
 
         if ((tokens.count() > 1 && tokens[0] == "uno" && tokens[1] == 
".uno:Save")) {
            _tileCache->documentSaved();
diff --git a/loolwsd/protocol.txt b/loolwsd/protocol.txt
index 10b17f9..734d317 100644
--- a/loolwsd/protocol.txt
+++ b/loolwsd/protocol.txt
@@ -43,6 +43,11 @@ mouse type=<type> x=<x> y=<y> count=<count>
 
     <type> is 'buttondown', 'buttonup' or 'move', others are numbers.
 
+requestloksession
+
+    requests the initialization of a LOK process in an attempt to predict the 
user's
+    interaction with the document
+
 resetselection
 
 saveas url=<url> format=<format> options=<options>
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to