]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fix for #4109
authorJohn Alhroos <john.ahlroos@itmill.com>
Wed, 10 Feb 2010 13:34:18 +0000 (13:34 +0000)
committerJohn Alhroos <john.ahlroos@itmill.com>
Wed, 10 Feb 2010 13:34:18 +0000 (13:34 +0000)
svn changeset:11251/svn branch:6.2

src/com/vaadin/terminal/gwt/client/ui/VMenuBar.java
src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java

index 0a28fd6b41f65532895d2808601cd31c960201db..75ecbd324941bc6e5722bdc1bb98395815751b2f 100644 (file)
@@ -8,11 +8,14 @@ import java.util.Stack;
 import com.google.gwt.dom.client.NodeList;
 import com.google.gwt.event.logical.shared.CloseEvent;
 import com.google.gwt.event.logical.shared.CloseHandler;
+import com.google.gwt.event.logical.shared.ValueChangeEvent;
+import com.google.gwt.event.logical.shared.ValueChangeHandler;
 import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.DeferredCommand;
 import com.google.gwt.user.client.Element;
 import com.google.gwt.user.client.Event;
+import com.google.gwt.user.client.History;
 import com.google.gwt.user.client.Timer;
 import com.google.gwt.user.client.ui.HasHTML;
 import com.google.gwt.user.client.ui.PopupPanel;
@@ -27,7 +30,8 @@ import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.Util;
 
 public class VMenuBar extends Widget implements Paintable,
-        CloseHandler<PopupPanel>, ContainerResizedListener {
+CloseHandler<PopupPanel>, ContainerResizedListener,
+ValueChangeHandler<String> {
 
     /** Set the CSS class name to allow styling. */
     public static final String CLASSNAME = "v-menubar";
@@ -76,6 +80,8 @@ public class VMenuBar extends Widget implements Paintable,
 
         if (!subMenu) {
             setStylePrimaryName(CLASSNAME);
+            // Monitor back&forward buttons
+            History.addValueChangeHandler(this);
         } else {
             setStylePrimaryName(CLASSNAME + "-submenu");
         }
@@ -866,4 +872,12 @@ public class VMenuBar extends Widget implements Paintable,
         return w;
     }
 
+    public void onValueChange(ValueChangeEvent<String> arg0) {
+        // Close menu if user uses back & forward buttons #4109
+        if (!subMenu) {
+            setSelected(null);
+            hideChildren();
+            menuVisible = false;
+        }
+    }
 }
index 3c5ef55a6d292c283e042294eb0e3ad8883b24c4..49cc539744b8fa46a947fdec323e0fbc433912dd 100644 (file)
@@ -19,11 +19,14 @@ import com.google.gwt.dom.client.TableRowElement;
 import com.google.gwt.dom.client.TableSectionElement;
 import com.google.gwt.event.dom.client.ScrollEvent;
 import com.google.gwt.event.dom.client.ScrollHandler;
+import com.google.gwt.event.logical.shared.ValueChangeEvent;
+import com.google.gwt.event.logical.shared.ValueChangeHandler;
 import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.DeferredCommand;
 import com.google.gwt.user.client.Element;
 import com.google.gwt.user.client.Event;
+import com.google.gwt.user.client.History;
 import com.google.gwt.user.client.Timer;
 import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.FlowPanel;
@@ -64,7 +67,8 @@ import com.vaadin.terminal.gwt.client.ui.VScrollTable.VScrollTableBody.VScrollTa
  * 
  * TODO implement unregistering for child components in Cells
  */
-public class VScrollTable extends FlowPanel implements Table, ScrollHandler {
+public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
+        ValueChangeHandler<String> {
 
     public static final String CLASSNAME = "v-table";
     public static final String ITEM_CLICK_EVENT_ID = "itemClick";
@@ -159,6 +163,8 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler {
 
         rowRequestHandler = new RowRequestHandler();
 
+        // Handle back & forward browser buttons
+        History.addValueChangeHandler(this);
     }
 
     @SuppressWarnings("unchecked")
@@ -3064,4 +3070,8 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler {
         }
     }
 
+    public void onValueChange(ValueChangeEvent<String> arg0) {
+        client.getContextMenu().hide();
+    }
+
 }