cypress_test/integration_tests/common/helper.js          |    6 ++
 cypress_test/integration_tests/mobile/calc/focus_spec.js |   31 +++++++++++++++
 loleaflet/src/control/Control.MobileWizard.js            |    7 ++-
 loleaflet/src/layer/tile/TileLayer.js                    |   20 ++++-----
 loleaflet/src/map/Map.js                                 |   10 ++--
 5 files changed, 57 insertions(+), 17 deletions(-)

New commits:
commit 30f9f7bfdcc3e0c53df50132c8283a1d161d9f7f
Author:     Ashod Nakashian <ashod.nakash...@collabora.co.uk>
AuthorDate: Tue Mar 24 18:30:06 2020 -0400
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Wed Mar 25 12:29:25 2020 +0100

    leaflet: allow keyboard with Calc MobileWizard
    
    This is to facilitate searching for a formula,
    which is shown as a list via the Mobile Wizard.
    
    Change-Id: If4ae2dfbce1c9cf153354d1c3a2ff7a8f4af3ea2
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/91020
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Andras Timar <andras.ti...@collabora.com>

diff --git a/loleaflet/src/control/Control.MobileWizard.js 
b/loleaflet/src/control/Control.MobileWizard.js
index e18b8ccdf..1f10b1a60 100644
--- a/loleaflet/src/control/Control.MobileWizard.js
+++ b/loleaflet/src/control/Control.MobileWizard.js
@@ -317,7 +317,12 @@ L.Control.MobileWizard = L.Control.extend({
                        else mWizardContentLength = 
data.children[0].children.length;
 
                        this._showWizard(mWizardContentLength);
-                       this._hideKeyboard();
+                       if (!this._map._docLayer.isCalc()) {
+                               // In Calc, the wizard is used for the formulas,
+                               // and it's easier to allow the user to search
+                               // for a formula by typing the first few 
characters.
+                               this._hideKeyboard();
+                       }
 
                        // Morph the sidebar into something prettier
                        if (isSidebar)
commit e9157a886f5a915ae36cec2bcfcb8472c785624b
Author:     Ashod Nakashian <ashod.nakash...@collabora.co.uk>
AuthorDate: Tue Mar 24 12:15:51 2020 -0400
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Wed Mar 25 12:29:14 2020 +0100

    leaflet: don't allow focus stealing
    
    This improves typing in the formula-bar.
    
    Change-Id: I14359b5b4e842b68b1807d286e1831b3805bb4ea
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/91019
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Andras Timar <andras.ti...@collabora.com>

diff --git a/cypress_test/integration_tests/common/helper.js 
b/cypress_test/integration_tests/common/helper.js
index 31c2a34fc..d5f110056 100644
--- a/cypress_test/integration_tests/common/helper.js
+++ b/cypress_test/integration_tests/common/helper.js
@@ -80,6 +80,10 @@ function assertHaveKeyboardInput() {
 function assertCursorAndFocus() {
        cy.log('Verifying Cursor and Focus.');
 
+       // Active element must be the textarea named clipboard.
+       cy.document().its('activeElement.className')
+               .should('be.eq', 'clipboard');
+
        // In edit mode, we should have the blinking cursor.
        cy.get('.leaflet-cursor.blinking-cursor')
                .should('exist');
@@ -122,7 +126,7 @@ function clearAllText() {
 // clipboard (which Cypress doesn't support).
 // Takes a closure f that takes the text
 // string as argument. Use as follows:
-// helper.getTextForClipboard((htmlText, plainText) => {
+// helper.getTextForClipboard((plainText) => {
 //     expect(plainText, 'Selection Text').to.equal(testText);
 // });
 function getTextForClipboard(f) {
diff --git a/cypress_test/integration_tests/mobile/calc/focus_spec.js 
b/cypress_test/integration_tests/mobile/calc/focus_spec.js
index 9b375db34..481d61165 100644
--- a/cypress_test/integration_tests/mobile/calc/focus_spec.js
+++ b/cypress_test/integration_tests/mobile/calc/focus_spec.js
@@ -70,4 +70,35 @@ describe('Calc focus tests', function() {
                cy.document().its('activeElement.className')
                        .should('be.eq', 'clipboard');
        });
+
+       it('Formula-bar focus', function() {
+               // Click on edit button
+               helper.enableEditingMobile();
+
+               // Body has the focus -> can't type in the document
+               cy.document().its('activeElement.tagName')
+                       .should('be.eq', 'BODY');
+
+               helper.assertNoKeyboardInput();
+
+               // One tap on a cell -> no document focus
+               calcHelper.clickOnFirstCell();
+
+               cy.get('.leaflet-marker-icon')
+                       .should('be.visible');
+
+               // No focus
+               cy.document().its('activeElement.tagName')
+                       .should('be.eq', 'BODY');
+
+               // Click in the formula-bar.
+               cy.get('.inputbar_container')
+                       .click();
+
+               helper.assertCursorAndFocus();
+
+               // Type some text.
+               cy.get('textarea.clipboard')
+                       .type('blah');
+       });
 });
diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index 46b3a4612..ba321a18e 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -1171,7 +1171,7 @@ L.TileLayer = L.GridLayer.extend({
                        this._showURLPopUp(cursorPos, obj.hyperlink.link);
                }
 
-               if (!this._map.editorHasFocus() && (modifierViewId === 
this._viewId) && (this._map._permission === 'edit')) {
+               if (!this._map.editorHasFocus() && this._map._isCursorVisible 
&& (modifierViewId === this._viewId) && (this._map._permission === 'edit')) {
                        // Regain cursor if we had been out of focus and now 
have input.
                        // (only if it is our own cursor and the input is 
actually not
                        // going into a dialog)
@@ -2188,20 +2188,18 @@ L.TileLayer = L.GridLayer.extend({
 
                        this._updateCursorPos();
 
-                       // Update the cursor/keyboard only when the document 
has focus.
-                       if (this._map.editorHasFocus()) {
-                               this._map._textInput.showCursor();
+                       this._map._textInput.showCursor();
 
-                               // Don't show the keyboard when the Wizard is 
visible.
-                               if (!window.mobileWizard) {
-                                       // If the user is editing, show the 
keyboard, but don't change
-                                       // anything if nothing is changed.
-                                       this._map.focus(true);
-                               }
+                       // Don't show the keyboard when the Wizard is visible.
+                       if (!window.mobileWizard) {
+                               // If the user is editing, show the keyboard, 
but don't change
+                               // anything if nothing is changed.
+                               this._map.focus(true);
                        }
                } else {
                        this._map._textInput.hideCursor();
-                       this._map.focus(false);
+                       if (this._map.editorHasFocus()) // Allow input if a 
dialog has the focus.
+                               this._map.focus(false);
                }
        },
 
diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js
index 024192295..38f0803dc 100644
--- a/loleaflet/src/map/Map.js
+++ b/loleaflet/src/map/Map.js
@@ -1408,12 +1408,14 @@ L.Map = L.Evented.extend({
                this._activeDialog = dialog;
                this._isSearching = false;
 
-               var doclayer = this._docLayer;
-               if (doclayer)
+               if (this.editorHasFocus()) {
+                       // The document has the focus.
+                       var doclayer = this._docLayer;
                        doclayer._updateCursorAndOverlay();
-
-               if (acceptInput !== undefined)
+               } else if (acceptInput !== undefined) {
+                       // A dialog has the focus.
                        this.focus(acceptInput);
+               }
        },
 
        // Our browser tab lost focus.
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to