]> source.dussan.org Git - vaadin-framework.git/commitdiff
better fix for #4109
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Wed, 10 Mar 2010 15:21:25 +0000 (15:21 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Wed, 10 Mar 2010 15:21:25 +0000 (15:21 +0000)
svn changeset:11755/svn branch:6.3

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

index e66e8279b72c27a9852660585867f561bab646a3..fe5678bdc0f9e3c72e55b5439cac9e3ec0164828 100644 (file)
@@ -155,4 +155,15 @@ public class VContextMenu extends VOverlay implements SubPartAware {
             return null;
         }
     }
+
+    /**
+     * Hides context menu if it is currently shown by given action owner.
+     * 
+     * @param actionOwner
+     */
+    public void ensureHidden(ActionOwner actionOwner) {
+        if (this.actionOwner == actionOwner) {
+            hide();
+        }
+    }
 }
index 1e12467113f0b6823cc7714a2ddb1f468d8ae9e1..e6bd4c62887619607eeb9bd3570b9bdf4abe71bc 100644 (file)
@@ -11,14 +11,11 @@ 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;
@@ -33,8 +30,7 @@ import com.vaadin.terminal.gwt.client.UIDL;
 import com.vaadin.terminal.gwt.client.Util;
 
 public class VMenuBar extends Widget implements Paintable,
-CloseHandler<PopupPanel>, ContainerResizedListener,
-ValueChangeHandler<String> {
+        CloseHandler<PopupPanel>, ContainerResizedListener {
 
     /** Set the CSS class name to allow styling. */
     public static final String CLASSNAME = "v-menubar";
@@ -83,8 +79,6 @@ ValueChangeHandler<String> {
 
         if (!subMenu) {
             setStylePrimaryName(CLASSNAME);
-            // Monitor back&forward buttons
-            History.addValueChangeHandler(this);
         } else {
             setStylePrimaryName(CLASSNAME + "-submenu");
         }
@@ -94,6 +88,16 @@ ValueChangeHandler<String> {
                 | Event.ONLOAD);
     }
 
+    @Override
+    protected void onDetach() {
+        super.onDetach();
+        if (!subMenu) {
+            setSelected(null);
+            hideChildren();
+            menuVisible = false;
+        }
+    }
+
     @Override
     public void setWidth(String width) {
         Util.setWidthExcludingPaddingAndBorder(this, width, 0);
@@ -118,7 +122,7 @@ ValueChangeHandler<String> {
         if (client.updateComponent(this, uidl, true)) {
             return;
         }
-        this.enabled = !uidl.getBooleanAttribute("disabled");
+        enabled = !uidl.getBooleanAttribute("disabled");
 
         // For future connections
         this.client = client;
@@ -874,13 +878,4 @@ ValueChangeHandler<String> {
         }
         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 e69da3be9b43b7ff9d53f97748359278b0f7a4d5..b6c22e9a85abf7f515788097cefdf9676a121462 100644 (file)
@@ -21,14 +21,11 @@ import com.google.gwt.dom.client.TableSectionElement;
 import com.google.gwt.dom.client.Style.Visibility;
 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;
@@ -77,7 +74,7 @@ import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation;
  * TODO implement unregistering for child components in Cells
  */
 public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
-        VHasDropHandler, ValueChangeHandler<String> {
+        VHasDropHandler {
 
     public static final String CLASSNAME = "v-table";
     public static final String ITEM_CLICK_EVENT_ID = "itemClick";
@@ -173,8 +170,6 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
 
         rowRequestHandler = new RowRequestHandler();
 
-        // Handle back & forward browser buttons
-        History.addValueChangeHandler(this);
     }
 
     @SuppressWarnings("unchecked")
@@ -1679,6 +1674,12 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
             }
         }
 
+        @Override
+        protected void onDetach() {
+            super.onDetach();
+            client.getContextMenu().ensureHidden(this);
+        }
+
         class VisibleColumnAction extends Action {
 
             String colKey;
@@ -2293,6 +2294,12 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
                 }
             }
 
+            @Override
+            protected void onDetach() {
+                super.onDetach();
+                client.getContextMenu().ensureHidden(this);
+            }
+
             public String getKey() {
                 return String.valueOf(rowKey);
             }
@@ -3294,8 +3301,4 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler,
 
     }
 
-    public void onValueChange(ValueChangeEvent<String> arg0) {
-        client.getContextMenu().hide();
-    }
-
 }