loleaflet/src/layer/tile/TileLayer.js         |    3 +
 loleaflet/src/map/handler/Map.TouchGesture.js |   46 ++++++++++++++++++++++----
 2 files changed, 42 insertions(+), 7 deletions(-)

New commits:
commit 9fcd4d37778d9580cc7b425787c3a8c1d9e756dd
Author:     Ashod Nakashian <ashod.nakash...@collabora.co.uk>
AuthorDate: Thu Jan 30 06:47:32 2020 -0500
Commit:     Jan Holesovsky <ke...@collabora.com>
CommitDate: Tue Feb 11 15:47:22 2020 +0100

    leaflet: second tap in cell starts editing
    
    Single taping and double taping now enter
    cell-edit mode and show the keyboard.
    
    And improve graphic selection and adding text.
    
    Change-Id: Ib38aac3165078cf143009d9ace530027bf630432
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/88034
    Tested-by: Jan Holesovsky <ke...@collabora.com>
    Reviewed-by: Jan Holesovsky <ke...@collabora.com>

diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index 86471ef82..46bd3c0a7 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -2732,6 +2732,9 @@ L.TileLayer = L.GridLayer.extend({
        // Update group layer selection handler.
        _onUpdateGraphicSelection: function () {
                if (this._graphicSelection && 
!this._isEmptyRectangle(this._graphicSelection)) {
+                       // Hide the keyboard on graphic selection, unless 
cursor is visible.
+                       this._map.focus(this.isCursorVisible());
+
                        if (this._graphicMarker) {
                                
this._graphicMarker.removeEventParent(this._map);
                                this._graphicMarker.off('scalestart scaleend', 
this._onGraphicEdit, this);
diff --git a/loleaflet/src/map/handler/Map.TouchGesture.js 
b/loleaflet/src/map/handler/Map.TouchGesture.js
index 5fb364ef9..4d8209761 100644
--- a/loleaflet/src/map/handler/Map.TouchGesture.js
+++ b/loleaflet/src/map/handler/Map.TouchGesture.js
@@ -327,13 +327,37 @@ L.Map.TouchGesture = L.Handler.extend({
                }
                this._map._contextMenu._onMouseDown({originalEvent: 
e.srcEvent});
 
+               var acceptInput = false; // No keyboard by default.
+               var sendMouseEvents = true; // By default, this is a 
single-click.
                if (docLayer) {
+                       if (docLayer.hasGraphicSelection()) {
+                               // Need keyboard when cursor is visible.
+                               acceptInput = 
this._map._docLayer.isCursorVisible();
+                       } else if (docLayer._docType === 'text') {
+                               acceptInput = true; // Always show the keyboard 
in Writer on tap.
+                       } else if (docLayer._docType === 'spreadsheet') {
+                               // If the tap is in the current cell, start 
editing.
+                               var cellCursor = docLayer._cellCursor;
+                               acceptInput = (cellCursor && 
cellCursor.contains(latlng));
+                               if (acceptInput) {
+                                       // Enter cell-edit mode on second tap 
of a selected cell.
+                                       if (this._map._permission === 'edit') {
+                                               
docLayer.postKeyboardEvent('input', 0, 769); // F2
+                                               sendMouseEvents = false; // 
Mouse events will exit editing mode.
+                                       }
+
+                               }
+                       }
+               }
+
+               if (sendMouseEvents) {
                        docLayer._postMouseEvent('buttondown', mousePos.x, 
mousePos.y, 1, 1, 0);
                        docLayer._postMouseEvent('buttonup', mousePos.x, 
mousePos.y, 1, 1, 0);
-
-                       // Take focus, but keyboard show only in Writer 
(double-tap to edit Calc/Impress).
-                       this._map.focus(this._map._docLayer._docType === 
'text');
                }
+
+               // Always move the focus to the document on tap,
+               // but only show the keyboard when we need editing.
+               this._map.focus(acceptInput);
        },
 
        _onDoubleTap: function (e) {
@@ -345,11 +369,19 @@ L.Map.TouchGesture = L.Handler.extend({
 
                var docLayer = this._map._docLayer;
                if (docLayer) {
-                       docLayer._postMouseEvent('buttondown', mousePos.x, 
mousePos.y, 2, 1, 0);
-                       docLayer._postMouseEvent('buttonup', mousePos.x, 
mousePos.y, 2, 1, 0);
+                       if (docLayer._docType === 'spreadsheet' && 
!docLayer.hasGraphicSelection()) {
+                               // Enter cell-edit mode on double-taping a cell.
+                               if (this._map._permission === 'edit') {
+                                       docLayer.postKeyboardEvent('input', 0, 
769); // F2
+                               }
+                       } else {
+                               docLayer._postMouseEvent('buttondown', 
mousePos.x, mousePos.y, 2, 1, 0);
+                               docLayer._postMouseEvent('buttonup', 
mousePos.x, mousePos.y, 2, 1, 0);
+                       }
 
-                       // Show keyboard.
-                       this._map.focus(true);
+                       // Show keyboard when no graphic selection, or  cursor 
is visible.
+                       var acceptInput = !docLayer.hasGraphicSelection() || 
docLayer.isCursorVisible();
+                       this._map.focus(acceptInput);
                }
        },
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to