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