loleaflet/src/map/handler/Map.Keyboard.js |  108 +++++++++++++-----------------
 1 file changed, 49 insertions(+), 59 deletions(-)

New commits:
commit 42823fcafb89bb854036fe09bbc6281ac50189c9
Author:     Henry Castro <hcas...@collabora.com>
AuthorDate: Sun Jul 29 15:01:10 2018 -0400
Commit:     Henry Castro <hcas...@collabora.com>
CommitDate: Sun Jul 29 15:03:57 2018 -0400

    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 16d31528f..9e1bad2ca 100644
--- a/loleaflet/src/map/handler/Map.Keyboard.js
+++ b/loleaflet/src/map/handler/Map.Keyboard.js
@@ -173,13 +173,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) {
@@ -296,25 +296,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)
@@ -340,14 +321,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
@@ -358,47 +337,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 idx = 0; idx < 
textInputData.length; idx++) {
-                                               keyEventFn('input', 
textInputData[idx].charCodeAt(), 0);
-                                       }
-                               }
                                keyEventFn('up', charCode, unoKeyCode);
-
                                this._keyHandled = true;
-                               this._bufferedTextInputEvent = null;
                        }
                        if (keyCode === 9) {
                                // tab would change focus to other DOM elements
@@ -431,6 +376,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)
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to