From 7a6f250d89474849648ed2ee96a6bfb78c3b9ca8 Mon Sep 17 00:00:00 2001 From: Matti Tahvonen Date: Tue, 31 May 2016 14:00:00 +0300 Subject: [PATCH] Fire actions before removing menu from the DOM (#20080) Change-Id: Ic1cd285c697a05d186d81935f632881e4cf561bf --- .../java/com/vaadin/client/ui/VMenuBar.java | 47 +++++++++---------- 1 file changed, 21 insertions(+), 26 deletions(-) diff --git a/client/src/main/java/com/vaadin/client/ui/VMenuBar.java b/client/src/main/java/com/vaadin/client/ui/VMenuBar.java index b3825d2de5..e0cea1c837 100644 --- a/client/src/main/java/com/vaadin/client/ui/VMenuBar.java +++ b/client/src/main/java/com/vaadin/client/ui/VMenuBar.java @@ -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; + } } } -- 2.39.5