Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Biggs2015-09-22 09:39:43 +0000
committerMatt Biggs2015-09-22 09:49:17 +0000
commit47f2f5538654377f31c6d5ace5fb42c19f8f2b42 (patch)
treec1bf92f66be4a60565653125a95d1885b346955e
parent01ad74a5a8706697ea0e60d5d7b6befc400e72fa (diff)
downloadorg.eclipse.swtbot-47f2f5538654377f31c6d5ace5fb42c19f8f2b42.tar.gz
org.eclipse.swtbot-47f2f5538654377f31c6d5ace5fb42c19f8f2b42.tar.xz
org.eclipse.swtbot-47f2f5538654377f31c6d5ace5fb42c19f8f2b42.zip
Fixes to work around bug 469581. Mars release broke dynamic menu
contributions. These have been fixed however due to timing issues SWTBot managed to get hold of menu items that are not properly parented within the e4 model. This change resolves those issues. Change-Id: I829bfc5e99f7d11ec9e0d3c3827399b6556c473e Signed-off-by: Matt Biggs <zebbedi@gmail.com>
-rw-r--r--org.eclipse.swtbot.e4.finder/src/org/eclipse/swtbot/e4/finder/finders/MenuFinder.java10
-rw-r--r--org.eclipse.swtbot.swt.finder/src/org/eclipse/swtbot/swt/finder/finders/MenuFinder.java7
2 files changed, 14 insertions, 3 deletions
diff --git a/org.eclipse.swtbot.e4.finder/src/org/eclipse/swtbot/e4/finder/finders/MenuFinder.java b/org.eclipse.swtbot.e4.finder/src/org/eclipse/swtbot/e4/finder/finders/MenuFinder.java
index caa1fce0..950d1538 100644
--- a/org.eclipse.swtbot.e4.finder/src/org/eclipse/swtbot/e4/finder/finders/MenuFinder.java
+++ b/org.eclipse.swtbot.e4.finder/src/org/eclipse/swtbot/e4/finder/finders/MenuFinder.java
@@ -17,6 +17,7 @@ import java.util.List;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
@@ -145,7 +146,7 @@ public class MenuFinder {
private List<MenuItem> findMenusInternal(final Menu bar, final Matcher<MenuItem> matcher, final boolean recursive) {
LinkedHashSet<MenuItem> result = new LinkedHashSet<MenuItem>();
if (bar != null) {
-// bar.notifyListeners(SWT.Show, new Event());
+ bar.notifyListeners(SWT.Show, new Event());
MenuItem[] items = bar.getItems();
for (MenuItem menuItem : items) {
if (isSeparator(menuItem)) {
@@ -156,7 +157,12 @@ public class MenuFinder {
if (recursive)
result.addAll(findMenusInternal(menuItem.getMenu(), matcher, recursive));
}
-// bar.notifyListeners(SWT.Hide, new Event());
+ // Do not close menus which contain the item we're looking for - this destroys dynamic menu contributions
+ // giving us the SWT MenuItem but without a E4 model attached (and therefore cannot be used).
+ // @see https://bugs.eclipse.org/bugs/show_bug.cgi?id=469581
+ if (result.isEmpty()) {
+ bar.notifyListeners(SWT.Hide, new Event());
+ }
}
return new ArrayList<MenuItem>(result);
}
diff --git a/org.eclipse.swtbot.swt.finder/src/org/eclipse/swtbot/swt/finder/finders/MenuFinder.java b/org.eclipse.swtbot.swt.finder/src/org/eclipse/swtbot/swt/finder/finders/MenuFinder.java
index 56cc622e..57211b00 100644
--- a/org.eclipse.swtbot.swt.finder/src/org/eclipse/swtbot/swt/finder/finders/MenuFinder.java
+++ b/org.eclipse.swtbot.swt.finder/src/org/eclipse/swtbot/swt/finder/finders/MenuFinder.java
@@ -160,7 +160,12 @@ public class MenuFinder {
if (recursive)
result.addAll(findMenusInternal(menuItem.getMenu(), matcher, recursive));
}
- bar.notifyListeners(SWT.Hide, new Event());
+ // Do not close menus which contain the item we're looking for - this destroys dynamic menu contributions
+ // giving us the SWT MenuItem but without a E4 model attached (and therefore cannot be used).
+ // @see https://bugs.eclipse.org/bugs/show_bug.cgi?id=469581
+ if (result.isEmpty()) {
+ bar.notifyListeners(SWT.Hide, new Event());
+ }
}
return new ArrayList<MenuItem>(result);
}

Back to the top