Restore user written text on selection reset in viewer
diff --git a/bundles/org.eclipse.rap.addons.dropdown.viewer/src/org/eclipse/rap/addons/dropdown/viewer/DropDownViewer.java b/bundles/org.eclipse.rap.addons.dropdown.viewer/src/org/eclipse/rap/addons/dropdown/viewer/DropDownViewer.java
index de2ba60..8930dc4 100644
--- a/bundles/org.eclipse.rap.addons.dropdown.viewer/src/org/eclipse/rap/addons/dropdown/viewer/DropDownViewer.java
+++ b/bundles/org.eclipse.rap.addons.dropdown.viewer/src/org/eclipse/rap/addons/dropdown/viewer/DropDownViewer.java
@@ -227,7 +227,7 @@
return clientListeners.getDropDownHideListener();
}
- // TODO : make exchangeable by accepting a class that extends the holder in the constructor
+ // TODO : no longer planned to be replaceable, streamline.
private ClientListenerHolder getClientListenerHolder() {
Object result = RWT.getUISession().getAttribute( ATTR_CLIENT_LISTNER_HOLDER );
if( result == null ) {
diff --git a/bundles/org.eclipse.rap.addons.dropdown.viewer/src/org/eclipse/rap/addons/dropdown/viewer/internal/resources/DropDownEventListener.js b/bundles/org.eclipse.rap.addons.dropdown.viewer/src/org/eclipse/rap/addons/dropdown/viewer/internal/resources/DropDownEventListener.js
index 40b3193..81d78ed 100644
--- a/bundles/org.eclipse.rap.addons.dropdown.viewer/src/org/eclipse/rap/addons/dropdown/viewer/internal/resources/DropDownEventListener.js
+++ b/bundles/org.eclipse.rap.addons.dropdown.viewer/src/org/eclipse/rap/addons/dropdown/viewer/internal/resources/DropDownEventListener.js
@@ -53,10 +53,10 @@
}
function handleSelection( event ) {
+ var dropdown = event.widget;
+ var viewer = rap.getObject( dropdown.getData( VIEWER_KEY ) );
+ var text = rap.getObject( viewer.get( "text" ) );
if( event.text.length > 0 ) {
- var dropdown = event.widget;
- var viewer = rap.getObject( dropdown.getData( VIEWER_KEY ) );
- var text = rap.getObject( viewer.get( "text" ) );
text.setData( "selecting", true );
text.setText( event.text );
text.setSelection( [ 0, event.text.length ] );
@@ -64,6 +64,11 @@
handleDefaultSelection( event );
dropdown.hide();
}
+ } else {
+ var userText = dropdown.getData( "userText" );
+ userText = userText ? userText : "";
+ text.setText( userText );
+ text.setSelection( [ userText.length, userText.length ] );
}
}
diff --git a/bundles/org.eclipse.rap.addons.dropdown.viewer/src/org/eclipse/rap/addons/dropdown/viewer/internal/resources/TextEventListener.js b/bundles/org.eclipse.rap.addons.dropdown.viewer/src/org/eclipse/rap/addons/dropdown/viewer/internal/resources/TextEventListener.js
index 257b0f7..765091b 100644
--- a/bundles/org.eclipse.rap.addons.dropdown.viewer/src/org/eclipse/rap/addons/dropdown/viewer/internal/resources/TextEventListener.js
+++ b/bundles/org.eclipse.rap.addons.dropdown.viewer/src/org/eclipse/rap/addons/dropdown/viewer/internal/resources/TextEventListener.js
@@ -34,11 +34,11 @@
// See Bug 404896 - [ClientScripting] Verify event keyCode is always zero when replacing txt
if( event.text !== "" /* && event.keyCode !== 0 */ ) {
event.widget.setData( "typing", true );
+ } else {
+ event.widget.setData( "deleting", true );
}
}
-//TODO : This can get very slow with huge lists. Possible optimizations include caching results,
-// limiting result length (at least until first selection occurs), and virtual rendering
function handleModify( event ) {
var widget = event.widget;
var text = widget.getText().toLowerCase();
@@ -57,8 +57,12 @@
showError( viewer, false )
}
var typing = widget.getData( "typing" );
+ if( typing || widget.getData( "deleting" ) ) {
+ dropdown.setData( "userText", widget.getText() );
+ }
var selecting = widget.getData( "selecting" );
widget.setData( "typing", false );
+ widget.setData( "deleting", false );
widget.setData( "selecting", false );
if( !selecting ) {
if( result.items.length > 0 ) {