Merge branch 'ShowHide'
diff --git a/bundles/org.eclipse.rap.clientscripting.demo/ClientScripting Demo.launch b/bundles/org.eclipse.rap.clientscripting.demo/ClientScripting Demo.launch
index 1f347f0..439435b 100644
--- a/bundles/org.eclipse.rap.clientscripting.demo/ClientScripting Demo.launch
+++ b/bundles/org.eclipse.rap.clientscripting.demo/ClientScripting Demo.launch
@@ -18,7 +18,7 @@
 <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Declipse.ignoreApp=true -Dosgi.noShutdown=true&#13;&#10;-Dorg.eclipse.equinox.http.jetty.log.stderr.threshold=info"/>

 <stringAttribute key="org.eclipse.rap.launch.browserMode" value="INTERNAL"/>

 <stringAttribute key="org.eclipse.rap.launch.contextpath" value=""/>

-<stringAttribute key="org.eclipse.rap.launch.dataLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.rap.ui.launch/ClientScriptingDemo"/>

+<stringAttribute key="org.eclipse.rap.launch.dataLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.rap.tools.launch/ClientScriptingDemo"/>

 <booleanAttribute key="org.eclipse.rap.launch.developmentMode" value="true"/>

 <stringAttribute key="org.eclipse.rap.launch.entryPoint" value=""/>

 <stringAttribute key="org.eclipse.rap.launch.libraryVariant" value="DEBUG"/>

@@ -35,7 +35,7 @@
 <booleanAttribute key="org.eclipse.rap.launch.useSessionTimeout" value="false"/>

 <stringAttribute key="pde.version" value="3.3"/>

 <booleanAttribute key="show_selected_only" value="false"/>

-<stringAttribute key="target_bundles" value="com.ibm.icu.base@default:default,javax.servlet*2.5.0.v200910301333@default:default,javax.servlet*3.0.0.v201103241727@default:default,javax.servlet*3.0.0.v201112011016@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.beans@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.runtime@default:true,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.util@default:default,org.eclipse.help@default:default,org.eclipse.jetty.continuation@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true"/>

+<stringAttribute key="target_bundles" value="com.ibm.icu.base@default:default,javax.servlet@default:default,javax.xml@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.beans@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.runtime@default:true,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.util@default:default,org.eclipse.help@default:default,org.eclipse.jetty.continuation@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true"/>

 <booleanAttribute key="tracing" value="false"/>

 <booleanAttribute key="useCustomFeatures" value="false"/>

 <booleanAttribute key="useDefaultConfigArea" value="true"/>

diff --git a/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/CustomBehaviors.java b/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/CustomBehaviors.java
index 8a64440..3f81c9c 100644
--- a/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/CustomBehaviors.java
+++ b/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/CustomBehaviors.java
@@ -72,6 +72,8 @@
     listener.addTo( widget, ClientListener.MouseDoubleClick );
     listener.addTo( widget, ClientListener.Selection );
     listener.addTo( widget, ClientListener.DefaultSelection );
+    listener.addTo( widget, ClientListener.Show );
+    listener.addTo( widget, ClientListener.Hide );
   }
 
   public static void addPaintingBehavior( final Canvas canvas ) {
diff --git a/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/Demo.java b/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/Demo.java
index 03e3636..47201ce 100644
--- a/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/Demo.java
+++ b/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/Demo.java
@@ -23,6 +23,8 @@
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
 
@@ -99,6 +101,11 @@
     list.setLayoutData( new GridData( SWT.FILL, SWT.TOP, false, false) );
     list.setItems( new String[]{ "Look", "in", "your", "javascript", "console" } );
     CustomBehaviors.addLoggerBehavior( list );
+    Menu popup = new Menu( list );
+    new MenuItem( popup, SWT.PUSH ).setText( "Item 1" );
+    new MenuItem( popup, SWT.PUSH ).setText( "Item 2" );
+    list.setMenu( popup );
+    CustomBehaviors.addLoggerBehavior( popup );
   }
 
   private static void addHeaderLabel( Composite parent, String text ) {
diff --git a/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/Logger.js b/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/Logger.js
index 5763833..95c1bbd 100644
--- a/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/Logger.js
+++ b/bundles/org.eclipse.rap.clientscripting.demo/src/org/eclipse/rap/clientscripting/demo/Logger.js
@@ -1,8 +1,19 @@
 var handleEvent = function( event ) {
   if( window.console && console.log ) {
-    console.log( event );
+    var info = [ getTypeString( event ) ];
     if( event.widget.getSelection && event.type == SWT.Selection ) {
-      console.log( event.widget.getSelection() );
+      info.push( '"' + event.widget.getSelection() + '"' );
+    }
+    console.log( info.join( " " ) );
+  }
+};
+
+var getTypeString = function( event ) {
+  var result;
+  for( var type in SWT ) {
+    if( type.charCodeAt( 1 ) >= 97 && SWT[ type ] === event.type ) {
+      result = type;
     }
   }
+  return result;
 };
diff --git a/bundles/org.eclipse.rap.clientscripting/js/org/eclipse/rap/clientscripting/ClientScriptingUtil.js b/bundles/org.eclipse.rap.clientscripting/js/org/eclipse/rap/clientscripting/ClientScriptingUtil.js
index e08aed0..5b562f9 100644
--- a/bundles/org.eclipse.rap.clientscripting/js/org/eclipse/rap/clientscripting/ClientScriptingUtil.js
+++ b/bundles/org.eclipse.rap.clientscripting/js/org/eclipse/rap/clientscripting/ClientScriptingUtil.js
@@ -51,7 +51,9 @@
       "MouseDoubleClick" : "dblclick",
       "Paint" : "paint",
       "FocusIn" : "focus",
-      "FocusOut" : "blur"
+      "FocusOut" : "blur",
+      "Show" : "appear",
+      "Hide" : "disappear"
     },
     "rwt.widgets.List" : {
       "Selection" : "changeSelection",
diff --git a/bundles/org.eclipse.rap.clientscripting/js/org/eclipse/rap/clientscripting/SWT.js b/bundles/org.eclipse.rap.clientscripting/js/org/eclipse/rap/clientscripting/SWT.js
index 8c70ec7..b0ba007 100644
--- a/bundles/org.eclipse.rap.clientscripting/js/org/eclipse/rap/clientscripting/SWT.js
+++ b/bundles/org.eclipse.rap.clientscripting/js/org/eclipse/rap/clientscripting/SWT.js
@@ -82,6 +82,15 @@
    */
   FocusOut : 16,
 
+  /**
+   * The show event type
+   */
+  Show : 22,
+
+  /**
+   * The hide event type
+   */
+  Hide : 23,
 
   /**
    * The modify event type
diff --git a/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/ClientListener.java b/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/ClientListener.java
index 9175d75..8aa98b6 100644
--- a/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/ClientListener.java
+++ b/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/ClientListener.java
@@ -50,6 +50,8 @@
   public static final int DefaultSelection = SWT.DefaultSelection;
   public static final int FocusIn = SWT.FocusIn;
   public static final int FocusOut = SWT.FocusOut;
+  public static final int Show = SWT.Show;
+  public static final int Hide = SWT.Hide;
   public static final int Modify = SWT.Modify;
   public static final int Verify = SWT.Verify;
 
diff --git a/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/ClientListenerUtil.java b/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/ClientListenerUtil.java
index f0ab028..7780008 100644
--- a/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/ClientListenerUtil.java
+++ b/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/ClientListenerUtil.java
@@ -51,6 +51,12 @@
       case ClientListener.Modify:
         result = "Modify";
       break;
+      case ClientListener.Show:
+        result = "Show";
+      break;
+      case ClientListener.Hide:
+        result = "Hide";
+      break;
       case ClientListener.Verify:
         result = "Verify";
       break;
diff --git a/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/EventBinding_Test.js b/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/EventBinding_Test.js
index d2ec84d..01bd90a 100644
--- a/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/EventBinding_Test.js
+++ b/tests/org.eclipse.rap.clientscripting.jstest/js/org/eclipse/rap/clientscripting/EventBinding_Test.js
@@ -207,6 +207,26 @@
       assertEquals( 1, logger.log.length );
     },
 
+    testBindShow : function() {
+      var logger = this._createLogger();
+      text.setVisibility( false );
+
+      new EventBinding( text, "Show", logger );
+      text.setVisibility( true );
+
+      assertEquals( 1, logger.log.length );
+    },
+
+    testBindHide : function() {
+      var logger = this._createLogger();
+      text.setVisibility( true );
+
+      new EventBinding( text, "Hide", logger );
+      text.setVisibility( false );
+
+      assertEquals( 1, logger.log.length );
+    },
+
     testBindVerifyEvent : function() {
       TestUtil.flush();
       var logger = this._createLogger();