From f2478fc8d0cb65478cf36843f935fcdbcde3207f Mon Sep 17 00:00:00 2001 From: Nurhan Turgut Date: Fri, 4 Oct 2019 09:41:54 -0700 Subject: [PATCH 1/3] Fixing selection issues in Firefox. Moving text editing dom elements to glass pane. --- lib/web_ui/lib/src/engine/text_editing.dart | 3 ++- lib/web_ui/test/text_editing_test.dart | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/web_ui/lib/src/engine/text_editing.dart b/lib/web_ui/lib/src/engine/text_editing.dart index 957087eccccfa..bb9367280cf40 100644 --- a/lib/web_ui/lib/src/engine/text_editing.dart +++ b/lib/web_ui/lib/src/engine/text_editing.dart @@ -341,6 +341,7 @@ class TextEditingElement { _subscriptions.add(domElement.onKeyUp.listen((event) { _handleChange(event); })); + _subscriptions.add(domElement.onSelect.listen(_handleChange)); } else { _subscriptions.add(html.document.onSelectionChange.listen(_handleChange)); } @@ -379,7 +380,7 @@ class TextEditingElement { throw UnsupportedError( 'Unsupported input type: ${inputConfig.inputType}'); } - html.document.body.append(domElement); + domRenderer.glassPaneElement.append(domElement); } void _removeDomElement() { diff --git a/lib/web_ui/test/text_editing_test.dart b/lib/web_ui/test/text_editing_test.dart index 9f41dd320919b..143a634b8a2fa 100644 --- a/lib/web_ui/test/text_editing_test.dart +++ b/lib/web_ui/test/text_editing_test.dart @@ -75,6 +75,9 @@ void main() { expect(document.activeElement, input); expect(editingElement.domElement, input); + // Input is appended to the glass pane. + expect('${editingElement.domElement.parent.tagName}', 'FLT-GLASS-PANE'); + editingElement.disable(); expect( document.getElementsByTagName('input'), From 443ed54e2fd4f1a50b33a0245596e4a6c0c82fea Mon Sep 17 00:00:00 2001 From: Nurhan Turgut Date: Fri, 4 Oct 2019 10:41:27 -0700 Subject: [PATCH 2/3] Addressing PR comments. --- lib/web_ui/lib/src/engine/text_editing.dart | 3 +++ lib/web_ui/test/text_editing_test.dart | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/web_ui/lib/src/engine/text_editing.dart b/lib/web_ui/lib/src/engine/text_editing.dart index bb9367280cf40..c7d49bd20bac8 100644 --- a/lib/web_ui/lib/src/engine/text_editing.dart +++ b/lib/web_ui/lib/src/engine/text_editing.dart @@ -341,6 +341,9 @@ class TextEditingElement { _subscriptions.add(domElement.onKeyUp.listen((event) { _handleChange(event); })); + /// In Firefox the context menu item "Select All" does not work without + /// listening onSelect. On the other browersers onSelectionChange is + /// enough for covering "Select All" functionality. _subscriptions.add(domElement.onSelect.listen(_handleChange)); } else { _subscriptions.add(html.document.onSelectionChange.listen(_handleChange)); diff --git a/lib/web_ui/test/text_editing_test.dart b/lib/web_ui/test/text_editing_test.dart index 143a634b8a2fa..78c584189575e 100644 --- a/lib/web_ui/test/text_editing_test.dart +++ b/lib/web_ui/test/text_editing_test.dart @@ -76,7 +76,8 @@ void main() { expect(editingElement.domElement, input); // Input is appended to the glass pane. - expect('${editingElement.domElement.parent.tagName}', 'FLT-GLASS-PANE'); + expect(domRenderer.glassPaneElement.contains(editingElement.domElement), + isTrue); editingElement.disable(); expect( From 03bd4199595845d239d796d3f70f3c2d4a9f19d4 Mon Sep 17 00:00:00 2001 From: Nurhan Turgut <50856934+nturgut@users.noreply.github.com> Date: Fri, 4 Oct 2019 10:57:21 -0700 Subject: [PATCH 3/3] Update text_editing.dart fixing typo --- lib/web_ui/lib/src/engine/text_editing.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/web_ui/lib/src/engine/text_editing.dart b/lib/web_ui/lib/src/engine/text_editing.dart index c7d49bd20bac8..3491fcc7d4bc4 100644 --- a/lib/web_ui/lib/src/engine/text_editing.dart +++ b/lib/web_ui/lib/src/engine/text_editing.dart @@ -342,7 +342,7 @@ class TextEditingElement { _handleChange(event); })); /// In Firefox the context menu item "Select All" does not work without - /// listening onSelect. On the other browersers onSelectionChange is + /// listening to onSelect. On the other browsers onSelectionChange is /// enough for covering "Select All" functionality. _subscriptions.add(domElement.onSelect.listen(_handleChange)); } else {