Make '?' toggle the help dialog closed

Bug: GERRIT-184
Signed-off-by: Shawn O. Pearce <sop@google.com>
diff --git a/src/main/java/com/google/gwtexpui/globalkey/client/ShowHelpCommand.java b/src/main/java/com/google/gwtexpui/globalkey/client/ShowHelpCommand.java
index 0620244..f95c55e 100644
--- a/src/main/java/com/google/gwtexpui/globalkey/client/ShowHelpCommand.java
+++ b/src/main/java/com/google/gwtexpui/globalkey/client/ShowHelpCommand.java
@@ -15,12 +15,16 @@
 package com.google.gwtexpui.globalkey.client;
 
 import com.google.gwt.event.dom.client.KeyPressEvent;
+import com.google.gwt.event.logical.shared.CloseEvent;
+import com.google.gwt.event.logical.shared.CloseHandler;
 import com.google.gwt.user.client.Window;
+import com.google.gwt.user.client.ui.PopupPanel;
 import com.google.gwt.user.client.ui.PopupPanel.PositionCallback;
 
 
 public class ShowHelpCommand extends KeyCommand {
   public static final ShowHelpCommand INSTANCE = new ShowHelpCommand();
+  private static KeyHelpPopup current;
 
   public ShowHelpCommand() {
     super(0, '?', Util.C.showHelp());
@@ -28,7 +32,21 @@
 
   @Override
   public void onKeyPress(final KeyPressEvent event) {
+    if (current != null) {
+      // Already open? Close the dialog.
+      //
+      current.hide();
+      current = null;
+      return;
+    }
+
     final KeyHelpPopup help = new KeyHelpPopup();
+    help.addCloseHandler(new CloseHandler<PopupPanel>() {
+      @Override
+      public void onClose(final CloseEvent<PopupPanel> event) {
+        current = null;
+      }
+    });
     help.setPopupPositionAndShow(new PositionCallback() {
       @Override
       public void setPosition(final int pWidth, final int pHeight) {