loleaflet/dist/toolbar/toolbar.js                |   63 ++++--------
 loleaflet/src/control/Control.DocumentRepair.js  |    2 
 loleaflet/src/control/Control.Layers.js          |    2 
 loleaflet/src/control/Control.PartsPreview.js    |    2 
 loleaflet/src/control/Control.Permission.js      |    2 
 loleaflet/src/control/Control.Selection.js       |    2 
 loleaflet/src/control/Control.Tabs.js            |    2 
 loleaflet/src/control/Control.js                 |    4 
 loleaflet/src/layer/marker/ClipboardContainer.js |   26 ++++-
 loleaflet/src/layer/tile/TileLayer.js            |   56 ++++++-----
 loleaflet/src/map/Map.js                         |   62 +-----------
 loleaflet/src/map/handler/Map.Drag.js            |   40 +-------
 loleaflet/src/map/handler/Map.Keyboard.js        |  112 ++++++++++-------------
 loleaflet/src/map/handler/Map.Mouse.js           |    2 
 loleaflet/src/map/handler/Map.Tap.js             |   70 ++++++--------
 15 files changed, 173 insertions(+), 274 deletions(-)

New commits:
commit 4b148695a7ece17875142e1f406edacc79752ac6
Author:     Henry Castro <[email protected]>
AuthorDate: Sun Aug 12 21:06:10 2018 -0400
Commit:     Jan Holesovsky <[email protected]>
CommitDate: Thu Aug 16 20:28:22 2018 +0200

    loleaflet: fix the number of users label from the status bar
    
    Change-Id: I0b7e66c73a335295e5e61510bc0b68fc5c08ca58

diff --git a/loleaflet/dist/toolbar/toolbar.js 
b/loleaflet/dist/toolbar/toolbar.js
index 512057c79..c6925cfe3 100644
--- a/loleaflet/dist/toolbar/toolbar.js
+++ b/loleaflet/dist/toolbar/toolbar.js
@@ -28,13 +28,6 @@ function _mobilify() {
                        statusbar.hide(item.id);
                }
        });
-
-       nUsers = '%n';
-       oneUser = '1';
-       noUser = '0';
-       updateUserListCount();
-
-       $('#document-name-input').hide();
 }
 
 function resizeToolbar() {
@@ -1070,10 +1063,18 @@ map.on('doclayerinit', function () {
 
                break;
        }
-       toolbarUp.refresh();
-       statusbar.refresh();
+
        if (L.Browser.mobile) {
                _mobilify();
+               nUsers = '%n';
+               oneUser = '1';
+               noUser = '0';
+               $('#document-name-input').hide();
+       } else {
+               nUsers = _('%n users');
+               oneUser = _('1 user');
+               noUser = _('0 users');
+               $('#document-name-input').show();
        }
 
        updateUserListCount();
commit 77160ebcb4af447476b053a62bb0870eb5fb5a71
Author:     Henry Castro <[email protected]>
AuthorDate: Wed Aug 8 15:08:09 2018 -0400
Commit:     Jan Holesovsky <[email protected]>
CommitDate: Thu Aug 16 20:28:22 2018 +0200

    loleaflet: mobile: remove invalid input focus
    
    Change-Id: Ieb29394daac95a7a0666a852e7e375ab6d665429

diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js
index 5e8783205..d04c2e817 100644
--- a/loleaflet/src/map/Map.js
+++ b/loleaflet/src/map/Map.js
@@ -829,7 +829,6 @@ L.Map = L.Evented.extend({
 
                                        vex.dialogID = -1;
                                        this._startInactiveTimer();
-                                       this.focus();
                                        return vex.close(id);
                                }
                        } else {
@@ -838,7 +837,6 @@ L.Map = L.Evented.extend({
                }
 
                this._startInactiveTimer();
-               this.focus();
                return false;
        },
 
commit 895390438449837533d0ab1439c7918fb8928751
Author:     Henry Castro <[email protected]>
AuthorDate: Wed Aug 8 09:05:50 2018 -0400
Commit:     Jan Holesovsky <[email protected]>
CommitDate: Thu Aug 16 20:28:22 2018 +0200

    loleaflet: mobile: fix the status bar that loses the input focus
    
    Change-Id: Ia39a33295e3a1c153636e2dd33a232cbe2b399b7

diff --git a/loleaflet/dist/toolbar/toolbar.js 
b/loleaflet/dist/toolbar/toolbar.js
index 6185cc213..512057c79 100644
--- a/loleaflet/dist/toolbar/toolbar.js
+++ b/loleaflet/dist/toolbar/toolbar.js
@@ -37,42 +37,13 @@ function _mobilify() {
        $('#document-name-input').hide();
 }
 
-function _unmobilify() {
-       var toolbarUp = w2ui['toolbar-up'];
-       var statusbar = w2ui['toolbar-down'];
-
-       toolbarUp.items.forEach(function(item) {
-               if (item.mobile === false && item.hidden) {
-                       toolbarUp.show(item.id);
-               }
-       });
-
-       statusbar.items.forEach(function(item) {
-               if (item.mobile === false && item.hidden) {
-                       statusbar.show(item.id);
-               }
-       });
-
-       nUsers = _('%n users');
-       oneUser = _('1 user');
-       noUser = _('0 users');
-       updateUserListCount();
-
-       $('#document-name-input').show();
-}
-
 function resizeToolbar() {
-       var toolbarUp = w2ui['toolbar-up'];
-       var statusbar = w2ui['toolbar-down'];
-
-       if ($(window).width() < mobileWidth) {
-               _mobilify();
-       } else {
-               _unmobilify();
+       if ($(window).width() !== map.getSize().x) {
+               var toolbarUp = w2ui['toolbar-up'];
+               var statusbar = w2ui['toolbar-down'];
+               toolbarUp.resize();
+               statusbar.resize();
        }
-
-       toolbarUp.resize();
-       statusbar.resize();
 }
 
 function _cancelSearch() {
@@ -1101,9 +1072,14 @@ map.on('doclayerinit', function () {
        }
        toolbarUp.refresh();
        statusbar.refresh();
-       resizeToolbar();
-});
+       if (L.Browser.mobile) {
+               _mobilify();
+       }
 
+       updateUserListCount();
+       toolbarUp.refresh();
+       statusbar.refresh();
+});
 
 map.on('commandstatechanged', function (e) {
        var toolbar = w2ui['toolbar-up'];
commit a8db51441f9681836426464fb06dc7cac2cfa410
Author:     Henry Castro <[email protected]>
AuthorDate: Tue Aug 7 21:10:19 2018 -0400
Commit:     Jan Holesovsky <[email protected]>
CommitDate: Thu Aug 16 20:28:22 2018 +0200

    loleaflet: mobile: fix invalidate size
    
    Change-Id: Ic4d06f2cf9a945bef4e8b81acd483238bf4e2bdb

diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js
index f799a5855..5e8783205 100644
--- a/loleaflet/src/map/Map.js
+++ b/loleaflet/src/map/Map.js
@@ -350,41 +350,12 @@ L.Map = L.Evented.extend({
                return this.panTo(newCenter, options);
        },
 
-       invalidateSize: function (options) {
+       invalidateSize: function () {
                if (!this._loaded) { return this; }
 
-               options = L.extend({
-                       animate: false,
-                       pan: true
-               }, options === true ? {animate: true} : options);
-
                var oldSize = this.getSize();
                this._sizeChanged = true;
-
-               var newSize = this.getSize(),
-                   oldCenter = oldSize.divideBy(2).round(),
-                   newCenter = newSize.divideBy(2).round(),
-                   offset = oldCenter.subtract(newCenter);
-
-               if (!offset.x && !offset.y) { return this; }
-
-               if (options.animate && options.pan) {
-                       this.panBy(offset);
-
-               } else {
-                       if (options.pan) {
-                               this._rawPanBy(offset);
-                       }
-
-                       this.fire('move');
-
-                       if (options.debounceMoveend) {
-                               clearTimeout(this._sizeTimer);
-                               this._sizeTimer = setTimeout(L.bind(this.fire, 
this, 'moveend'), 200);
-                       } else {
-                               this.fire('moveend');
-                       }
-               }
+               var newSize = this.getSize();
 
                return this.fire('resize', {
                        oldSize: oldSize,
@@ -828,7 +799,7 @@ L.Map = L.Evented.extend({
        _onResize: function () {
                L.Util.cancelAnimFrame(this._resizeRequest);
                this._resizeRequest = L.Util.requestAnimFrame(
-                       function () { this.invalidateSize({debounceMoveend: 
true}); }, this, false, this._container);
+                       function () { this.invalidateSize(); }, this, false, 
this._container);
        },
 
        _activate: function () {
commit 5fa2c00b70c723dbdd2a19a096882662225bdb23
Author:     Henry Castro <[email protected]>
AuthorDate: Sun Aug 5 18:30:16 2018 -0400
Commit:     Jan Holesovsky <[email protected]>
CommitDate: Thu Aug 16 20:28:22 2018 +0200

    loleaflet: mobile: show the cursor only if clipContainer is focused
    
    Change-Id: I209952df810d23b244e8b963304115fd81e30a81

diff --git a/loleaflet/src/layer/marker/ClipboardContainer.js 
b/loleaflet/src/layer/marker/ClipboardContainer.js
index b6f80e871..63b136183 100644
--- a/loleaflet/src/layer/marker/ClipboardContainer.js
+++ b/loleaflet/src/layer/marker/ClipboardContainer.js
@@ -17,7 +17,9 @@ L.ClipboardContainer = L.Layer.extend({
                L.DomEvent.on(this._textArea, 'copy cut paste ' +
                              'keydown keypress keyup ' +
                              'compositionstart compositionupdate 
compositionend textInput',
-                             this._map._handleDOMEvent, this._map);
+                             this._map._handleDOMEvent, this._map)
+                         .on(this._textArea, 'focus', this.onGotFocus, this)
+                         .on(this._textArea, 'blur', this.onLostFocus, this);
        },
 
        onRemove: function () {
@@ -28,10 +30,24 @@ L.ClipboardContainer = L.Layer.extend({
                L.DomEvent.off(this._textArea, 'copy cut paste ' +
                               'keydown keypress keyup ' +
                               'compositionstart compositionupdate 
compositionend textInput',
-                              this._map._handleDOMEvent, this._map);
+                              this._map._handleDOMEvent, this._map)
+                         .off(this._textArea, 'focus', this.onGotFocus, this)
+                         .off(this._textArea, 'blur', this.onLostFocus, this);
+       },
+
+       onGotFocus: function () {
+               this.setLatLng(this._map._docLayer._updateCursorPos());
+       },
+
+       onLostFocus: function () {
+               this._map.removeLayer(this._map._docLayer._cursorMarker);
        },
 
        focus: function(focus) {
+               if (this._map._permission !== 'edit') {
+                       return;
+               }
+
                if (focus === false) {
                        this._textArea.blur();
                } else {
diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index 79be20cc8..09f3dc93d 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -1445,6 +1445,22 @@ L.TileLayer = L.GridLayer.extend({
                this._onUpdateCursor();
        },
 
+       _updateCursorPos: function () {
+               var pixBounds = 
L.bounds(this._map.latLngToLayerPoint(this._visibleCursor.getSouthWest()),
+                       
this._map.latLngToLayerPoint(this._visibleCursor.getNorthEast()));
+               var cursorPos = this._visibleCursor.getNorthWest();
+
+               if (!this._cursorMarker) {
+                       this._cursorMarker = L.cursor(cursorPos, 
pixBounds.getSize().multiplyBy(this._map.getZoomScale(this._map.getZoom())), 
{blink: true});
+               }
+               else {
+                       this._cursorMarker.setLatLng(cursorPos, 
pixBounds.getSize().multiplyBy(this._map.getZoomScale(this._map.getZoom())));
+               }
+
+               this._map.addLayer(this._cursorMarker);
+               return this._visibleCursor.getNorthWest();
+       },
+
        // Update cursor layer (blinking cursor).
        _onUpdateCursor: function (scroll) {
                var cursorPos = this._visibleCursor.getNorthWest();
@@ -1477,23 +1493,11 @@ L.TileLayer = L.GridLayer.extend({
        // the state of the document (if the falgs are set)
        _updateCursorAndOverlay: function (update) {
                if (this._map._permission === 'edit'
+               && this._map._clipboardContainer._textArea === 
document.activeElement
                && this._isCursorVisible
                && this._isCursorOverlayVisible
                && !this._isEmptyRectangle(this._visibleCursor)) {
-
-                       var pixBounds = 
L.bounds(this._map.latLngToLayerPoint(this._visibleCursor.getSouthWest()),
-                                                                        
this._map.latLngToLayerPoint(this._visibleCursor.getNorthEast()));
-
-                       var cursorPos = this._visibleCursor.getNorthWest();
-
-                       if (!this._cursorMarker) {
-                               this._cursorMarker = L.cursor(cursorPos, 
pixBounds.getSize().multiplyBy(this._map.getZoomScale(this._map.getZoom())), 
{blink: true});
-                       }
-                       else {
-                               this._cursorMarker.setLatLng(cursorPos, 
pixBounds.getSize().multiplyBy(this._map.getZoomScale(this._map.getZoom())));
-                       }
-                       this._map.addLayer(this._cursorMarker);
-                       
this._map._clipboardContainer.setLatLng(this._visibleCursor.getNorthWest());
+                       this._updateCursorPos();
                }
                else if (this._cursorMarker) {
                        this._map.removeLayer(this._cursorMarker);
commit 745836293ac29a0b310286f8ddaa72b66d8b2185
Author:     Henry Castro <[email protected]>
AuthorDate: Sun Aug 5 16:50:25 2018 -0400
Commit:     Jan Holesovsky <[email protected]>
CommitDate: Thu Aug 16 20:28:22 2018 +0200

    loleaflet: mobile: replace refocusOnMap with map focus
    
    Change-Id: I271ea3a3ed22320b1184e1bfc348ecb69f681fd8

diff --git a/loleaflet/src/control/Control.DocumentRepair.js 
b/loleaflet/src/control/Control.DocumentRepair.js
index aafe9deb1..c27541d59 100644
--- a/loleaflet/src/control/Control.DocumentRepair.js
+++ b/loleaflet/src/control/Control.DocumentRepair.js
@@ -119,7 +119,7 @@ L.Control.DocumentRepair = L.Control.extend({
 
        _onCloseClick: function (e) {
                this._map.enable(true);
-               this._refocusOnMap();
+               this._map.focus();
                this.remove();
        },
 
diff --git a/loleaflet/src/control/Control.Layers.js 
b/loleaflet/src/control/Control.Layers.js
index 2eae18a61..a8b955fe1 100644
--- a/loleaflet/src/control/Control.Layers.js
+++ b/loleaflet/src/control/Control.Layers.js
@@ -238,7 +238,7 @@ L.Control.Layers = L.Control.extend({
 
                this._handlingClick = false;
 
-               this._refocusOnMap();
+               this._map.focus();
        },
 
        _expand: function () {
diff --git a/loleaflet/src/control/Control.PartsPreview.js 
b/loleaflet/src/control/Control.PartsPreview.js
index f466be8c6..4f16f9054 100644
--- a/loleaflet/src/control/Control.PartsPreview.js
+++ b/loleaflet/src/control/Control.PartsPreview.js
@@ -70,7 +70,7 @@ L.Control.PartsPreview = L.Control.extend({
                        .on(img, 'click', L.DomEvent.stopPropagation)
                        .on(img, 'click', L.DomEvent.stop)
                        .on(img, 'click', this._setPart, this)
-                       .on(img, 'click', this._refocusOnMap, this);
+                       .on(img, 'click', this._map.focus, this._map);
                this._map.getPreview(i, i, 180, 180, {autoUpdate: 
this.options.autoUpdate});
 
                return img;
diff --git a/loleaflet/src/control/Control.Permission.js 
b/loleaflet/src/control/Control.Permission.js
index 1178580fa..bdbd222e9 100644
--- a/loleaflet/src/control/Control.Permission.js
+++ b/loleaflet/src/control/Control.Permission.js
@@ -26,7 +26,7 @@ L.Control.PermissionSwitch = L.Control.extend({
                else {
                        this._map.setPermission('view');
                }
-               this._refocusOnMap();
+               this._map.focus();
        },
 
        _onUpdatePermission: function (e) {
diff --git a/loleaflet/src/control/Control.Selection.js 
b/loleaflet/src/control/Control.Selection.js
index af0ed0e2c..75a6d74ca 100644
--- a/loleaflet/src/control/Control.Selection.js
+++ b/loleaflet/src/control/Control.Selection.js
@@ -26,7 +26,7 @@ L.Control.Selection = L.Control.extend({
                else {
                        this._map.disableSelection();
                }
-               this._refocusOnMap();
+               this._map.focus();
        },
 
        _onUpdatePermission: function (e) {
diff --git a/loleaflet/src/control/Control.Tabs.js 
b/loleaflet/src/control/Control.Tabs.js
index 8295f2fd6..76e2f946e 100644
--- a/loleaflet/src/control/Control.Tabs.js
+++ b/loleaflet/src/control/Control.Tabs.js
@@ -126,7 +126,7 @@ L.Control.Tabs = L.Control.extend({
                                                .on(tab, 'click', 
L.DomEvent.stopPropagation)
                                                .on(tab, 'click', 
L.DomEvent.stop)
                                                .on(tab, 'click', 
this._setPart, this)
-                                               .on(tab, 'click', 
this._refocusOnMap, this);
+                                               .on(tab, 'click', 
this._map.focus, this._map);
                                        this._spreadsheetTabs[id] = tab;
                                }
                        }
diff --git a/loleaflet/src/control/Control.js b/loleaflet/src/control/Control.js
index abc2ac57f..99f797560 100644
--- a/loleaflet/src/control/Control.js
+++ b/loleaflet/src/control/Control.js
@@ -77,10 +77,6 @@ L.Control = L.Class.extend({
                }
                var corner = this._map._controlCorners[this.options.position];
                return corner.hasChildNodes();
-       },
-
-       _refocusOnMap: function () {
-               this._map.focus();
        }
 });
 
commit 85b28b2bcacf908f7109ae6d50952819f94d5b3c
Author:     Henry Castro <[email protected]>
AuthorDate: Sun Aug 5 16:39:03 2018 -0400
Commit:     Jan Holesovsky <[email protected]>
CommitDate: Thu Aug 16 20:28:22 2018 +0200

    loleaflet: mobile: replace clipboardContainer with map focus
    
    Change-Id: I616e5b8417522ec06d7311f335d3c60888a32b82

diff --git a/loleaflet/src/layer/marker/ClipboardContainer.js 
b/loleaflet/src/layer/marker/ClipboardContainer.js
index 4dc7792a7..b6f80e871 100644
--- a/loleaflet/src/layer/marker/ClipboardContainer.js
+++ b/loleaflet/src/layer/marker/ClipboardContainer.js
@@ -32,10 +32,10 @@ L.ClipboardContainer = L.Layer.extend({
        },
 
        focus: function(focus) {
-               if (focus) {
-                       this._textArea.focus();
-               } else {
+               if (focus === false) {
                        this._textArea.blur();
+               } else {
+                       this._textArea.focus();
                }
        },
 
diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index 3db127030..79be20cc8 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -270,7 +270,7 @@ L.TileLayer = L.GridLayer.extend({
                for (var key in this._selectionHandles) {
                        this._selectionHandles[key].on('drag dragend', 
this._onSelectionHandleDrag, this);
                }
-               this._map._clipboardContainer.focus(true);
+               this._map.focus();
 
                map.setPermission(this.options.permission);
 
@@ -1677,7 +1677,7 @@ L.TileLayer = L.GridLayer.extend({
                }
                if (e.type === 'dragend') {
                        e.target.isDragged = false;
-                       this._map._clipboardContainer.focus(true);
+                       this._map.focus();
                        this._map.fire('scrollvelocity', {vx: 0, vy: 0});
                }
 
diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js
index 2c4412e1e..f799a5855 100644
--- a/loleaflet/src/map/Map.js
+++ b/loleaflet/src/map/Map.js
@@ -660,7 +660,7 @@ L.Map = L.Evented.extend({
                console.debug('focus:');
                if (this._docLayer) {
                        console.debug('focus: focussing');
-                       this._clipboardContainer.focus(true);
+                       this._clipboardContainer.focus();
                }
        },
 
@@ -1063,8 +1063,7 @@ L.Map = L.Evented.extend({
                // Calling from some other place with no real 'click' event 
doesn't work
                if (type === 'click') {
                        if (this._permission === 'edit') {
-                               this._clipboardContainer.focus(false);
-                               this._clipboardContainer.focus(true);
+                               this.focus();
                        }
 
                        // unselect if anything is selected already
diff --git a/loleaflet/src/map/handler/Map.Keyboard.js 
b/loleaflet/src/map/handler/Map.Keyboard.js
index 787cd60f6..7fc588c61 100644
--- a/loleaflet/src/map/handler/Map.Keyboard.js
+++ b/loleaflet/src/map/handler/Map.Keyboard.js
@@ -229,7 +229,7 @@ L.Map.Keyboard = L.Handler.extend({
                if (this._map._permission === 'edit') {
                        return;
                }
-               this._map._container.focus();
+               this._map.focus();
        },
 
        // Convert javascript key codes to UNO key codes.
@@ -513,7 +513,7 @@ L.Map.Keyboard = L.Handler.extend({
                case 93: // Right Cmd (Safari)
                        // we prepare for a copy or cut event
                        
this._map._clipboardContainer.setValue(window.getSelection().toString());
-                       this._map._clipboardContainer.focus(true);
+                       this._map.focus();
                        this._map._clipboardContainer.select();
                        return true;
                case 80: // p
diff --git a/loleaflet/src/map/handler/Map.Mouse.js 
b/loleaflet/src/map/handler/Map.Mouse.js
index d5b280a0c..91ad67b9b 100644
--- a/loleaflet/src/map/handler/Map.Mouse.js
+++ b/loleaflet/src/map/handler/Map.Mouse.js
@@ -150,7 +150,7 @@ L.Map.Mouse = L.Handler.extend({
                                        var docLayer = this._map._docLayer;
                                        this._mouseEventsQueue = [];
                                        docLayer._postMouseEvent('buttonup', 
mousePos.x, mousePos.y, 1, buttons, modifier);
-                                       
this._map._clipboardContainer.focus(true);
+                                       this._map.focus();
                                }, this));
                                this._holdMouseEvent = 
setTimeout(L.bind(this._executeMouseEvents, this), timeOut);
 
commit 5a5bd7eae16b27bfa4cabb60c1904bd4433b350e
Author:     Henry Castro <[email protected]>
AuthorDate: Tue Aug 7 09:11:20 2018 -0400
Commit:     Jan Holesovsky <[email protected]>
CommitDate: Thu Aug 16 20:28:22 2018 +0200

    loleaflet: mobile: use setValue
    
    Change-Id: Ica14c95e2aec31423a47d904c3c499b706261370

diff --git a/loleaflet/src/map/handler/Map.Keyboard.js 
b/loleaflet/src/map/handler/Map.Keyboard.js
index 975a93e41..787cd60f6 100644
--- a/loleaflet/src/map/handler/Map.Keyboard.js
+++ b/loleaflet/src/map/handler/Map.Keyboard.js
@@ -392,7 +392,7 @@ L.Map.Keyboard = L.Handler.extend({
                        // get the composited char codes
                        // clear the input now - best to do this ASAP so the 
input
                        // is clear for the next word
-                       this._map._clipboardContainer._textArea.value = '';
+                       this._map._clipboardContainer.setValue('');
                        // Set all keycodes to zero
                        this._map._docLayer._postCompositionEvent(0, 'end', '');
                }
commit 8a6c22417308cd0a2d766c9df045460ff5beefa2
Author:     Henry Castro <[email protected]>
AuthorDate: Wed Aug 1 21:20:12 2018 -0400
Commit:     Jan Holesovsky <[email protected]>
CommitDate: Thu Aug 16 20:28:22 2018 +0200

    loleaflet: mobile: fix panning inside max bounds
    
    Change-Id: I5c08a529cb05471f3e248ab403dff5370de0ee46

diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js
index b3ef7730b..2c4412e1e 100644
--- a/loleaflet/src/map/Map.js
+++ b/loleaflet/src/map/Map.js
@@ -12,6 +12,7 @@ L.Map = L.Evented.extend({
                zoom: 10,
                minZoom: 1,
                maxZoom: 20,
+               maxBounds: L.latLngBounds([0, 0], [-100, 100]),
                fadeAnimation: false, // Not useful for typing.
                trackResize: true,
                markerZoomAnimation: true,
@@ -325,25 +326,14 @@ L.Map = L.Evented.extend({
                return this.fire('moveend');
        },
 
-       setMaxBounds: function (bounds, options) {
+       setMaxBounds: function (bounds) {
                bounds = L.latLngBounds(bounds);
 
                this.options.maxBounds = bounds;
-               options = options || {};
-
-               if (!bounds) {
-                       return this.off('moveend', this._panInsideMaxBounds);
-               }
 
                if (this._loaded) {
-                       this._panInsideMaxBounds();
-               }
-
-               if (options.panInside === false) {
-                       return this.off('moveend', this._panInsideMaxBounds);
+                       this.panInsideBounds(this.options.maxBounds);
                }
-
-               return this.on('moveend', this._panInsideMaxBounds);
        },
 
        setDocBounds: function (bounds) {
@@ -806,10 +796,6 @@ L.Map = L.Evented.extend({
                return this.getMaxZoom() - this.getMinZoom();
        },
 
-       _panInsideMaxBounds: function () {
-               this.panInsideBounds(this.options.maxBounds);
-       },
-
        _checkIfLoaded: function () {
                if (!this._loaded) {
                        throw new Error('Set map center and zoom first.');
commit 26aad36771ebd5a304b763912184acd2ea26dfdf
Author:     Henry Castro <[email protected]>
AuthorDate: Wed Aug 1 21:14:02 2018 -0400
Commit:     Jan Holesovsky <[email protected]>
CommitDate: Thu Aug 16 20:28:22 2018 +0200

    loleaflet: mobile: fix dragging the document layer
    
    Change-Id: I7047781926581c84ea8f1cb6576799d91099f6b5

diff --git a/loleaflet/src/map/handler/Map.Drag.js 
b/loleaflet/src/map/handler/Map.Drag.js
index 10b3b4aca..bb177a3b9 100644
--- a/loleaflet/src/map/handler/Map.Drag.js
+++ b/loleaflet/src/map/handler/Map.Drag.js
@@ -9,9 +9,6 @@ L.Map.mergeOptions({
        inertiaDeceleration: 3400, // px/s^2
        inertiaMaxSpeed: Infinity, // px/s
        easeLinearity: 0.2,
-
-       // TODO refactor, move to CRS
-       worldCopyJump: false
 });
 
 L.Map.Drag = L.Handler.extend({
@@ -25,16 +22,10 @@ L.Map.Drag = L.Handler.extend({
                        this._draggable.on({
                                down: this._onDown,
                                dragstart: this._onDragStart,
+                               predrag: this._onPreDrag,
                                drag: this._onDrag,
                                dragend: this._onDragEnd
                        }, this);
-
-                       if (map.options.worldCopyJump) {
-                               this._draggable.on('predrag', this._onPreDrag, 
this);
-                               map.on('viewreset', this._onViewReset, this);
-
-                               map.whenReady(this._onViewReset, this);
-                       }
                }
                this._draggable.enable();
        },
@@ -92,17 +83,10 @@ L.Map.Drag = L.Handler.extend({
        },
 
        _onPreDrag: function () {
-               // TODO refactor to be able to adjust map pane position after 
zoom
-               var worldWidth = this._worldWidth,
-                   halfWidth = Math.round(worldWidth / 2),
-                   dx = this._initialWorldOffset,
-                   x = this._draggable._newPos.x,
-                   newX1 = (x - halfWidth + dx) % worldWidth + halfWidth - dx,
-                   newX2 = (x + halfWidth + dx) % worldWidth - halfWidth - dx,
-                   newX = Math.abs(newX1 + dx) < Math.abs(newX2 + dx) ? newX1 
: newX2;
-
-               this._draggable._absPos = this._draggable._newPos.clone();
-               this._draggable._newPos.x = newX;
+               var org = this._map.getPixelOrigin();
+               var size = 
this._map.getLayerMaxBounds().getSize().subtract(this._map.getSize());
+               this._draggable._newPos.x = Math.max(Math.min(org.x, 
this._draggable._newPos.x), org.x - size.x);
+               this._draggable._newPos.y = Math.max(Math.min(org.y, 
this._draggable._newPos.y), org.y - size.y);
        },
 
        _onDragEnd: function (e) {
@@ -115,9 +99,7 @@ L.Map.Drag = L.Handler.extend({
 
                if (noInertia) {
                        map.fire('moveend');
-
                } else {
-
                        var direction = 
this._lastPos.subtract(this._positions[0]),
                            duration = (this._lastTime - this._times[0]) / 1000,
                            ease = options.easeLinearity,
@@ -133,18 +115,6 @@ L.Map.Drag = L.Handler.extend({
 
                        if (!offset.x || !offset.y) {
                                map.fire('moveend');
-
-                       } else {
-                               offset = map._limitOffset(offset, 
map.options.maxBounds);
-
-                               L.Util.requestAnimFrame(function () {
-                                       map.panBy(offset, {
-                                               duration: decelerationDuration,
-                                               easeLinearity: ease,
-                                               noMoveStart: true,
-                                               animate: true
-                                       });
-                               });
                        }
                }
        }
commit a725f23064aff4f1a34ef47dd288f9871bfe651a
Author:     Henry Castro <[email protected]>
AuthorDate: Sun Jul 29 15:01:10 2018 -0400
Commit:     Jan Holesovsky <[email protected]>
CommitDate: Thu Aug 16 20:28:22 2018 +0200

    loleaflet: mobile: fix delete with backspace
    
    Change-Id: I36eddf8b81849592982d01f3a4c7f3be0f0c0ee3

diff --git a/loleaflet/src/map/handler/Map.Keyboard.js 
b/loleaflet/src/map/handler/Map.Keyboard.js
index f83caf3d3..975a93e41 100644
--- a/loleaflet/src/map/handler/Map.Keyboard.js
+++ b/loleaflet/src/map/handler/Map.Keyboard.js
@@ -172,13 +172,13 @@ L.Map.Keyboard = L.Handler.extend({
 
                this._map.on('mousedown', this._onMouseDown, this);
                this._map.on('keydown keyup keypress', this._onKeyDown, this);
-               this._map.on('compositionstart compositionupdate compositionend 
textInput', this._onKeyDown, this);
+               this._map.on('compositionstart compositionupdate compositionend 
textInput', this._onIME, this);
        },
 
        removeHooks: function () {
                this._map.off('mousedown', this._onMouseDown, this);
                this._map.off('keydown keyup keypress', this._onKeyDown, this);
-               this._map.off('compositionstart compositionupdate 
compositionend textInput', this._onKeyDown, this);
+               this._map.off('compositionstart compositionupdate 
compositionend textInput', this._onIME, this);
        },
 
        _ignoreKeyEvent: function(e) {
@@ -295,25 +295,6 @@ L.Map.Keyboard = L.Handler.extend({
                var charCode = e.originalEvent.charCode;
                var keyCode = e.originalEvent.keyCode;
 
-               if (e.type === 'compositionstart' || e.type === 
'compositionupdate') {
-                       this._isComposing = true; // we are starting composing 
with IME
-                       var txt = '';
-                       for (var i = 0; i < e.originalEvent.data.length; i++) {
-                               txt += e.originalEvent.data[i];
-                       }
-                       if (txt) {
-                               compEventFn('input', txt);
-                       }
-               }
-
-               if (e.type === 'compositionend') {
-                       this._isComposing = false; // stop of composing with IME
-                       // get the composited char codes
-                       // clear the input now - best to do this ASAP so the 
input
-                       // is clear for the next word
-                       inputEle.value = '';
-               }
-
                if (!this._isComposing && e.type === 'keyup') {
                        // not compositing and keyup, clear the input so it is 
ready
                        // for next word (or char only)
@@ -339,14 +320,12 @@ L.Map.Keyboard = L.Handler.extend({
                        }
                        else if (e.type === 'keydown') {
                                this._keyHandled = false;
-                               this._bufferedTextInputEvent = null;
 
                                if (this.handleOnKeyDownKeys[keyCode] && 
charCode === 0) {
                                        keyEventFn('input', charCode, 
unoKeyCode);
                                }
                        }
-                       else if ((e.type === 'keypress' || e.type === 
'compositionend') &&
-                                (!this.handleOnKeyDownKeys[keyCode] || 
charCode !== 0)) {
+                       else if ((e.type === 'keypress') && 
(!this.handleOnKeyDownKeys[keyCode] || charCode !== 0)) {
                                if (charCode === keyCode && charCode !== 13) {
                                        // Chrome sets keyCode = charCode for 
printable keys
                                        // while LO requires it to be 0
@@ -357,47 +336,13 @@ L.Map.Keyboard = L.Handler.extend({
                                        // key press times will be paired with 
the invalidation messages
                                        docLayer._debugKeypressQueue.push(+new 
Date());
                                }
-                               if (e.type === 'compositionend') {
-                                       // Set all keycodes to zero
-                                       compEventFn('end', '');
-                               } else {
-                                       keyEventFn('input', charCode, 
unoKeyCode);
-                               }
 
+                               keyEventFn('input', charCode, unoKeyCode);
                                this._keyHandled = true;
                        }
-                       else if (e.type === 'textInput') {
-                               // Store the textInput event
-                               this._bufferedTextInputEvent = e;
-                       }
                        else if (e.type === 'keyup') {
-                               // Hack for making space and spell-check text 
insert work
-                               // in Chrome (on Andorid) or Chrome with IME.
-                               //
-                               // Chrome (Android) IME triggers keyup/keydown 
input with
-                               // code 229 when hitting space (as with all 
composiiton events)
-                               // with addition to 'textinput' event, in which 
we only see that
-                               // space was entered. Similar situation is also 
when inserting
-                               // a soft-keyboard spell-check item - it is 
visible only with
-                               // 'textinput' event (no composition event is 
fired).
-                               // To make this work we need to insert 
textinput.data here..
-                               //
-                               // TODO: Maybe make sure this is only triggered 
when keydown has
-                               // 229 code. Also we need to detect that 
composition was overriden
-                               // (part or whole word deleted) with the 
spell-checked word. (for
-                               // example: enter 'tar' and with spell-check 
correct that to 'rat')
-
-                               if (!this._keyHandled && 
this._bufferedTextInputEvent) {
-                                       var textInputData = 
this._bufferedTextInputEvent.originalEvent.data;
-                                       charCode = e.originalEvent.keyCode;
-                                       for (var i = 0; i < 
textInputData.length; i++) {
-                                               keyEventFn('input', 
textInputData[i].charCodeAt(), 0);
-                                       }
-                               }
                                keyEventFn('up', charCode, unoKeyCode);
-
                                this._keyHandled = true;
-                               this._bufferedTextInputEvent = null;
                        }
                        if (keyCode === 9) {
                                // tab would change focus to other DOM elements
@@ -430,6 +375,51 @@ L.Map.Keyboard = L.Handler.extend({
                L.DomEvent.stopPropagation(e.originalEvent);
        },
 
+       _onIME: function (e) {
+               if (e.type === 'compositionstart' || e.type === 
'compositionupdate') {
+                       this._isComposing = true; // we are starting composing 
with IME
+                       var txt = '';
+                       for (var i = 0; i < e.originalEvent.data.length; i++) {
+                               txt += e.originalEvent.data[i];
+                       }
+                       if (txt) {
+                               this._map._docLayer._postCompositionEvent(0, 
'input', txt);
+                       }
+               }
+
+               if (e.type === 'compositionend') {
+                       this._isComposing = false; // stop of composing with IME
+                       // get the composited char codes
+                       // clear the input now - best to do this ASAP so the 
input
+                       // is clear for the next word
+                       this._map._clipboardContainer._textArea.value = '';
+                       // Set all keycodes to zero
+                       this._map._docLayer._postCompositionEvent(0, 'end', '');
+               }
+
+               if (e.type === 'textInput' && !this._keyHandled) {
+                       // Hack for making space and spell-check text insert 
work
+                       // in Chrome (on Andorid) or Chrome with IME.
+                       //
+                       // Chrome (Android) IME triggers keyup/keydown input 
with
+                       // code 229 when hitting space (as with all composiiton 
events)
+                       // with addition to 'textinput' event, in which we only 
see that
+                       // space was entered. Similar situation is also when 
inserting
+                       // a soft-keyboard spell-check item - it is visible 
only with
+                       // 'textinput' event (no composition event is fired).
+                       // To make this work we need to insert textinput.data 
here..
+                       //
+                       // TODO: Maybe make sure this is only triggered when 
keydown has
+                       // 229 code. Also we need to detect that composition 
was overriden
+                       // (part or whole word deleted) with the spell-checked 
word. (for
+                       // example: enter 'tar' and with spell-check correct 
that to 'rat')
+                       var data = e.originalEvent.data;
+                       for (var idx = 0; idx < data.length; idx++) {
+                               this._map._docLayer._postKeyboardEvent('input', 
data[idx].charCodeAt(), 0);
+                       }
+               }
+       },
+
        _handleCtrlCommand: function (e) {
                // Control
                if (e.originalEvent.keyCode == 17)
commit d99e6783e2a6db82494069a0d9d84d3aa3820440
Author:     Henry Castro <[email protected]>
AuthorDate: Sun Jul 29 14:46:51 2018 -0400
Commit:     Jan Holesovsky <[email protected]>
CommitDate: Thu Aug 16 20:28:22 2018 +0200

    loleaflet: mobile: check tolerance when the move event occurs
    
    Change-Id: I9e1d28e1b198e81f876a323c978478e4ccea7474

diff --git a/loleaflet/src/map/handler/Map.Tap.js 
b/loleaflet/src/map/handler/Map.Tap.js
index 3b8db8a85..caf474bff 100644
--- a/loleaflet/src/map/handler/Map.Tap.js
+++ b/loleaflet/src/map/handler/Map.Tap.js
@@ -70,8 +70,11 @@ L.Map.Tap = L.Handler.extend({
 
        _onMove: function (e) {
                var first = e.touches[0];
-               this._newPos = new L.Point(first.clientX, first.clientY);
-               this._simulateEvent('mousemove', first);
+               var newPos = new L.Point(first.clientX, first.clientY);
+               if (newPos.distanceTo(this._startPos) > 
this._map.options.tapTolerance) {
+                       this._newPos = newPos;
+                       this._simulateEvent('mousemove', first);
+               }
        },
 
        _simulateEvent: function (type, e) {
commit e9cd680857feb0c28f1323d2adce9c2eab0f2536
Author:     Henry Castro <[email protected]>
AuthorDate: Tue Jul 24 13:57:44 2018 -0400
Commit:     Jan Holesovsky <[email protected]>
CommitDate: Thu Aug 16 20:28:22 2018 +0200

    loleaflet: mobile: handle long click
    
    Change-Id: I3c3ecce737e5c2457e922e2e612f0312dfab72dd

diff --git a/loleaflet/src/map/handler/Map.Tap.js 
b/loleaflet/src/map/handler/Map.Tap.js
index bc0b27e6e..3b8db8a85 100644
--- a/loleaflet/src/map/handler/Map.Tap.js
+++ b/loleaflet/src/map/handler/Map.Tap.js
@@ -21,31 +21,21 @@ L.Map.Tap = L.Handler.extend({
 
                L.DomEvent.preventDefault(e);
 
-               this._fireClick = true;
-
                // don't simulate click or track longpress if more than 1 touch
                if (e.touches.length > 1) {
-                       this._fireClick = false;
                        clearTimeout(this._holdTimeout);
                        return;
                }
 
-               var first = e.touches[0],
-                   el = first.target;
+               var first = e.touches[0];
 
                this._startPos = this._newPos = new L.Point(first.clientX, 
first.clientY);
 
-               // if touching a link, highlight it
-               if (el.tagName && el.tagName.toLowerCase() === 'a') {
-                       L.DomUtil.addClass(el, 'leaflet-active');
-               }
-
                // simulate long hold but setting a timeout
                this._holdTimeout = setTimeout(L.bind(function () {
                        if (this._isTapValid()) {
-                               this._fireClick = false;
-                               this._onUp();
-                               this._simulateEvent('contextmenu', first);
+                               this._fireDblClick = true;
+                               this._onUp(e);
                        }
                }, this), 1000);
 
@@ -65,21 +55,12 @@ L.Map.Tap = L.Handler.extend({
                        touchend: this._onUp
                }, this);
 
-               if (this._fireClick && e && e.changedTouches) {
-
-                       var first = e.changedTouches[0],
-                           el = first.target;
-
-                       if (el && el.tagName && el.tagName.toLowerCase() === 
'a') {
-                               L.DomUtil.removeClass(el, 'leaflet-active');
-                       }
+               var first = e.changedTouches[0];
+               this._simulateEvent('mouseup', first);
 
-                       this._simulateEvent('mouseup', first);
-
-                       // simulate click if the touch didn't move too much
-                       if (this._isTapValid()) {
-                               this._simulateEvent('click', first);
-                       }
+               if (this._fireDblClick) {
+                       this._simulateEvent('dblclick', first);
+                       this._fireDblClick = false;
                }
        },
 
@@ -90,21 +71,27 @@ L.Map.Tap = L.Handler.extend({
        _onMove: function (e) {
                var first = e.touches[0];
                this._newPos = new L.Point(first.clientX, first.clientY);
+               this._simulateEvent('mousemove', first);
        },
 
        _simulateEvent: function (type, e) {
-               var simulatedEvent = document.createEvent('MouseEvents');
-
-               simulatedEvent._simulated = true;
-               e.target._simulatedClick = true;
-
-               simulatedEvent.initMouseEvent(
-                       type, true, true, window, 1,
-                       e.screenX, e.screenY,
-                       e.clientX, e.clientY,
-                       false, false, false, false, 0, null);
-
-               e.target.dispatchEvent(simulatedEvent);
+               var simulatedEvent = {
+                       type: type,
+                       canBubble: false,
+                       cancelable: true,
+                       screenX: e.screenX,
+                       screenY: e.screenY,
+                       clientX: e.clientX,
+                       clientY: e.clientY,
+                       ctrlKey: false,
+                       altKey: false,
+                       shiftKey: false,
+                       metaKey: false,
+                       button: 0,
+                       target: e.target,
+                       preventDefault: function () {}
+               };
+               this._map._handleDOMEvent(simulatedEvent);
        }
 });
 
commit 35c1d1602541d27b6b7405b5e38eb2e677665867
Author:     Henry Castro <[email protected]>
AuthorDate: Mon Jul 23 14:52:58 2018 -0400
Commit:     Jan Holesovsky <[email protected]>
CommitDate: Thu Aug 16 20:28:22 2018 +0200

    loleaflet: mobile: do not zoom out when edits a document
    
    Change-Id: Ic5b78df16c8ac0ccfb7334e6809b58665cd04494

diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index 7b0ffa3d4..3db127030 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -2049,8 +2049,11 @@ L.TileLayer = L.GridLayer.extend({
 
        _fitWidthZoom: function (e, maxZoom) {
                if (isNaN(this._docWidthTwips)) { return; }
-               var size = e ? e.newSize : this._map.getSize();
-               var widthTwips = size.x * this._map.options.tileWidthTwips / 
this._tileSize;
+               var oldSize = e ? e.oldSize : this._map.getSize();
+               var newSize = e ? e.newSize : this._map.getSize();
+               if (newSize.x - oldSize.x === 0) { return; }
+
+               var widthTwips = newSize.x * this._map.options.tileWidthTwips / 
this._tileSize;
                var ratio = widthTwips / this._docWidthTwips;
 
                maxZoom = maxZoom ? maxZoom : this.options.maxZoom;
commit e25dc8bba06375c375202515e718f56c983f3e45
Author:     Henry Castro <[email protected]>
AuthorDate: Mon Apr 16 17:17:08 2018 -0400
Commit:     Jan Holesovsky <[email protected]>
CommitDate: Thu Aug 16 20:28:22 2018 +0200

    loleaflet: fix when document window zooms out until it disappears
    
    Change-Id: If0f7234429130aed47dbc9156fde2e125680638f

diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index d5575ce91..7b0ffa3d4 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -2048,20 +2048,19 @@ L.TileLayer = L.GridLayer.extend({
        },
 
        _fitWidthZoom: function (e, maxZoom) {
+               if (isNaN(this._docWidthTwips)) { return; }
                var size = e ? e.newSize : this._map.getSize();
                var widthTwips = size.x * this._map.options.tileWidthTwips / 
this._tileSize;
-               maxZoom = maxZoom ? maxZoom : this._map.getZoom();
+               var ratio = widthTwips / this._docWidthTwips;
 
+               maxZoom = maxZoom ? maxZoom : this.options.maxZoom;
                // 'fit width zoom' has no use in spreadsheets, ignore it there
                if (this._docType !== 'spreadsheet') {
                        var crsScale = this._map.options.crs.scale(1);
-                       if (this._docWidthTwips > 0)
-                       {
-                               var ratio = widthTwips / this._docWidthTwips;
-                               var zoom = this._map.getZoom() + 
Math.floor(Math.log(ratio) / Math.log(crsScale));
+                       var zoom = 10 + Math.floor(Math.log(ratio) / 
Math.log(crsScale));
 
-                               zoom = Math.max(1, zoom);
-                               zoom = Math.min(maxZoom, zoom);
+                       zoom = Math.min(maxZoom, Math.max(1, zoom));
+                       if (this._docWidthTwips * this._map.getZoomScale(zoom, 
10) < widthTwips) {
                                this._map.setZoom(zoom, {animate: false});
                        }
                }
_______________________________________________
Libreoffice-commits mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to