]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fire actions before removing menu from the DOM (#20080)
authorMatti Tahvonen <matti@vaadin.com>
Tue, 31 May 2016 11:00:00 +0000 (14:00 +0300)
committerVaadin Code Review <review@vaadin.com>
Tue, 30 Aug 2016 16:27:09 +0000 (16:27 +0000)
Change-Id: Ic1cd285c697a05d186d81935f632881e4cf561bf

client/src/main/java/com/vaadin/client/ui/VMenuBar.java

index b3825d2de545a374c8d58504badb6546d66d1edc..e0cea1c8378ea1e36eaebd530f797c442bebde9c 100644 (file)
@@ -21,7 +21,6 @@ import java.util.List;
 import java.util.Queue;
 
 import com.google.gwt.core.client.GWT;
-import com.google.gwt.core.client.Scheduler;
 import com.google.gwt.core.client.Scheduler.ScheduledCommand;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.Style;
@@ -437,16 +436,16 @@ public class VMenuBar extends SimpleFocusablePanel implements
      */
     public void itemClick(CustomMenuItem item) {
         if (item.getCommand() != null) {
-            setSelected(null);
-
-            if (visibleChildMenu != null) {
-                visibleChildMenu.hideChildren();
+            try {
+                item.getCommand().execute();
+            } finally {
+                setSelected(null);
+                if (visibleChildMenu != null) {
+                    visibleChildMenu.hideChildren();
+                }
+                hideParents(true);
+                menuVisible = false;
             }
-
-            hideParents(true);
-            menuVisible = false;
-            Scheduler.get().scheduleDeferred(item.getCommand());
-
         } else {
             if (item.getSubMenu() != null
                     && item.getSubMenu() != visibleChildMenu) {
@@ -1523,23 +1522,19 @@ public class VMenuBar extends SimpleFocusablePanel implements
                 // selection there
                 openMenuAndFocusFirstIfPossible(getSelected());
             } else {
-                final Command command = getSelected().getCommand();
-
-                setSelected(null);
-                hideParents(true);
-
-                // #17076 keyboard selected menuitem without children: do
-                // not leave menu to visible ("hover open") mode
-                menuVisible = false;
-
-                Scheduler.get().scheduleDeferred(new ScheduledCommand() {
-                    @Override
-                    public void execute() {
-                        if (command != null) {
-                            command.execute();
-                        }
+                try {
+                    final Command command = getSelected().getCommand();
+                    if (command != null) {
+                        command.execute();
                     }
-                });
+                } finally {
+                    setSelected(null);
+                    hideParents(true);
+
+                    // #17076 keyboard selected menuitem without children: do
+                    // not leave menu to visible ("hover open") mode
+                    menuVisible = false;
+                }
             }
         }