Minor refactorings in ModelListener
diff --git a/bundles/org.eclipse.rap.addons.dropdown.viewer/src/org/eclipse/rap/addons/dropdown/viewer/internal/resources/ModelListener.js b/bundles/org.eclipse.rap.addons.dropdown.viewer/src/org/eclipse/rap/addons/dropdown/viewer/internal/resources/ModelListener.js
index 68153a1..25efb58 100644
--- a/bundles/org.eclipse.rap.addons.dropdown.viewer/src/org/eclipse/rap/addons/dropdown/viewer/internal/resources/ModelListener.js
+++ b/bundles/org.eclipse.rap.addons.dropdown.viewer/src/org/eclipse/rap/addons/dropdown/viewer/internal/resources/ModelListener.js
@@ -39,7 +39,7 @@
 // Event Handling
 
 function onChangeUserText( event ) {
-  this.set( "suggestion", null, { "sourceEvent" : "change:userText" } );
+  this.set( "suggestion", null, { "action" : "sync" } );
   var query = createQuery( event.value.toLowerCase() );
   var results = searchItems( this.get( "elements" ), query );
   this.set( "results", results );
@@ -48,11 +48,10 @@
 function onChangeResults( event ) {
   if( this.get( "autoComplete" ) ) {
     var items = this.get( "results" ).items;
-    var options = { "sourceEvent" : "change:results" };
     if( items.length === 1 ) {
-      this.set( "suggestion", items[ 0 ], options );
+      this.set( "suggestion", items[ 0 ] );
     } else {
-      this.set( "suggestion", null, options );
+      this.set( "suggestion", null );
     }
   }
 }
@@ -62,15 +61,16 @@
   if( event.value !== -1 ) {
     suggestion = this.get( "results" ).items[ event.value ] || "";
   }
-  this.set( "suggestion", suggestion, { "sourceEvent" : "change:resultSelection" } );
+  var options = { "action" : "selection" };
+  this.set( "suggestion", suggestion, options );
 }
 
 function onChangeSuggestion( event ) {
-  if( event.options.sourceEvent !== "change:userText" ) {
+  if( event.options.action !== "sync" ) {
     var userText = this.get( "userText" ) || "";
     var text = event.value || userText;
     this.set( "text", text );
-    if( event.options.sourceEvent === "change:resultSelection" ) {
+    if( event.options.action === "selection" ) {
       if( event.value === null ) {
         this.set( "textSelection", [ text.length , text.length ] );
       } else {
diff --git a/tests/org.eclipse.rap.addons.dropdown.test/jasmine/jasmine/specs/ModelListenerSpec.js b/tests/org.eclipse.rap.addons.dropdown.test/jasmine/jasmine/specs/ModelListenerSpec.js
index a9c331d..689f29e 100644
--- a/tests/org.eclipse.rap.addons.dropdown.test/jasmine/jasmine/specs/ModelListenerSpec.js
+++ b/tests/org.eclipse.rap.addons.dropdown.test/jasmine/jasmine/specs/ModelListenerSpec.js
@@ -162,7 +162,6 @@
         model.set( "userText", "ba" );
 
         expect( model.get( "suggestion" ) ).toBeNull();
-        expect( log[ 0 ][ 0 ].options.sourceEvent ).toBe( "change:userText" );
       } );
 
       it( "updates results", function() {
@@ -196,14 +195,14 @@
         expect( model.get( "suggestion" ) ).toBeNull();
       } );
 
-      it( "sets sourceEvent option", function() {
+      it( "sets action option", function() {
         model.addListener( "change:resultSelection", createClientListener( "ModelListener" ) );
         model.addListener( "change:suggestion", logger );
         model.set( "results", { "items" : [ "bar", "banana" ] } );
 
         model.set( "resultSelection", 1 );
 
-        expect( log[ 0 ][ 0 ].options.sourceEvent ).toBe( "change:resultSelection" );
+        expect( log[ 0 ][ 0 ].options.action ).toBe( "selection" );
       } );
 
     } );
@@ -215,7 +214,7 @@
         model.set( "text", "bar" );
         model.set( "textSelection", [ 0, 0 ] );
 
-        model.set( "suggestion", "foo", { "sourceEvent" : "change:userText" } );
+        model.set( "suggestion", "foo", { "action" : "sync" } );
 
         expect( model.get( "text" ) ).toEqual( "bar" );
         expect( model.get( "textSelection" ) ).toEqual( [ 0, 0 ] );
@@ -232,7 +231,7 @@
       it( "sets textSelection for result selection", function() {
         model.addListener( "change:suggestion", createClientListener( "ModelListener" ) );
 
-        model.set( "suggestion", "foo", { "sourceEvent" : "change:resultSelection" } );
+        model.set( "suggestion", "foo", { "action" : "selection" } );
 
         expect( model.get( "textSelection" ) ).toEqual( [ 0, 3 ] );
       } );
@@ -241,7 +240,7 @@
         model.addListener( "change:suggestion", createClientListener( "ModelListener" ) );
         model.set( "userText", "foo" );
 
-        model.set( "suggestion", "foobar", { "sourceEvent" : "change:results" } );
+        model.set( "suggestion", "foobar" );
 
         expect( model.get( "textSelection" ) ).toEqual( [ 3, 6 ] );
       } );
@@ -250,7 +249,7 @@
         model.addListener( "change:suggestion", createClientListener( "ModelListener" ) );
         model.set( "userText", "bar" );
 
-        model.set( "suggestion", null, { "sourceEvent" : "change:resultSelection" } );
+        model.set( "suggestion", null, { "action" : "selection" } );
 
         expect( model.get( "text" ) ).toEqual( "bar" );
       } );
@@ -259,7 +258,7 @@
         model.addListener( "change:suggestion", createClientListener( "ModelListener" ) );
         model.set( "userText", "bar" );
 
-        model.set( "suggestion", null, { "sourceEvent" : "change:resultSelection" } );
+        model.set( "suggestion", null, { "action" : "selection" } );
 
         expect( model.get( "textSelection" ) ).toEqual( [ 3, 3 ] );
       } );
@@ -297,28 +296,6 @@
         expect( model.get( "suggestion" ) ).toBeNull();
       } );
 
-      it( "sets sourceEvent option when setting suggestion", function() {
-        model.set( "suggestion", "ban" );
-        model.set( "autoComplete", true );
-        model.addListener( "change:results", createClientListener( "ModelListener" ) );
-        model.addListener( "change:suggestion", logger );
-
-        model.set( "results", { "items" : [ "banana" ] } );
-
-        expect( log[ 0 ][ 0 ].options.sourceEvent ).toBe( "change:results" );
-      } );
-
-      it( "sets sourceEvent option when resetting suggestion", function() {
-        model.set( "suggestion", "ban" );
-        model.set( "autoComplete", true );
-        model.addListener( "change:results", createClientListener( "ModelListener" ) );
-        model.addListener( "change:suggestion", logger );
-
-        model.set( "results", { "items" : [ "banana", "apple" ] } );
-
-        expect( log[ 0 ][ 0 ].options.sourceEvent ).toBe( "change:results" );
-      } );
-
     } );
 
     describe( "accept", function() {