diff --git a/projectui/nbproject/project.xml b/projectui/nbproject/project.xml
--- a/projectui/nbproject/project.xml
+++ b/projectui/nbproject/project.xml
@@ -185,7 +185,7 @@
- 8.4
+ 8.6
diff --git a/projectui/src/org/netbeans/modules/project/ui/actions/MainProjectAction.java b/projectui/src/org/netbeans/modules/project/ui/actions/MainProjectAction.java
--- a/projectui/src/org/netbeans/modules/project/ui/actions/MainProjectAction.java
+++ b/projectui/src/org/netbeans/modules/project/ui/actions/MainProjectAction.java
@@ -42,7 +42,6 @@
package org.netbeans.modules.project.ui.actions;
import java.awt.Dialog;
-import java.awt.EventQueue;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
@@ -54,7 +53,6 @@
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.netbeans.api.project.Project;
-import org.netbeans.api.project.ProjectManager;
import org.netbeans.api.project.ProjectUtils;
import org.netbeans.api.project.ui.OpenProjects;
import org.netbeans.modules.project.ui.NoMainProjectWarning;
@@ -69,6 +67,7 @@
import org.openide.util.Lookup;
import org.openide.util.Mutex;
import org.openide.util.NbBundle;
+import org.openide.util.RequestProcessor;
import org.openide.util.WeakListeners;
/** Invokes command on the main project.
@@ -80,6 +79,7 @@
private String command;
private ProjectActionPerformer performer;
private String name;
+ static final RequestProcessor RP = new RequestProcessor(MainProjectAction.class);
public MainProjectAction(ProjectActionPerformer performer, String name, Icon icon) {
this( null, performer, name, icon );
@@ -178,15 +178,13 @@
public void propertyChange( PropertyChangeEvent evt ) {
if ( evt.getPropertyName() == OpenProjectList.PROPERTY_MAIN_PROJECT ||
evt.getPropertyName() == OpenProjectList.PROPERTY_OPEN_PROJECTS ) {
- Mutex.EVENT.readAccess(new Runnable() {
- public void run() {
- refreshView(null);
- }
- });
+ refreshView(null);
}
}
- private void refreshView(Lookup context) {
+ private void refreshView(final Lookup context) {
+ RP.post(new Runnable() {
+ public @Override void run() {
Project p = OpenProjectList.getDefault().getMainProject();
Lookup theContext = context;
@@ -211,28 +209,35 @@
}
boolean noOpenProject = OpenProjectList.getDefault ().getOpenProjects ().length == 0;
+ Project mainProject = OpenProjectList.getDefault().getMainProject();
+
+ final String presenterName = getPresenterName(name, mainProject, p);
+ final boolean enabled;
if ( command == null ) {
- enable( performer.enable( p ) );
+ enabled = performer.enable(p);
}
else {
if ( p == null ) {
- enable(false);
+ enabled = false;
}
else if ( ActionsUtil.commandSupported ( p, command, Lookup.EMPTY ) ) {
- enable( !noOpenProject );
+ enabled = !noOpenProject;
}
else {
- enable( false );
+ enabled = false;
}
}
- Project mainProject = OpenProjectList.getDefault().getMainProject();
-
- String presenterName = getPresenterName(name, mainProject, p);
+ Mutex.EVENT.writeAccess(new Runnable() {
+ public void run() {
putValue("menuText", presenterName);
putValue(SHORT_DESCRIPTION, Actions.cutAmpersand(presenterName));
-
+ setEnabled(enabled);
+ }
+ });
+ }
+ });
}
private String getPresenterName(String name, Project mPrj, Project cPrj) {
@@ -253,18 +258,6 @@
return toReturn;
}
- private void enable(final boolean enable) {
- if (!EventQueue.isDispatchThread()) {
- EventQueue.invokeLater(new Runnable() {
- public void run() {
- setEnabled(enable);
- }
- });
- } else {
- setEnabled(enable);
- }
- }
-
private boolean showNoMainProjectWarning(Project[] projects, String action) {
boolean canceled;
final JButton okButton = new JButton (NbBundle.getMessage (NoMainProjectWarning.class, "LBL_NoMainClassWarning_ChooseMainProject_OK")); // NOI18N
diff --git a/projectui/test/unit/src/org/netbeans/modules/project/ui/actions/MainProjectActionTest.java b/projectui/test/unit/src/org/netbeans/modules/project/ui/actions/MainProjectActionTest.java
--- a/projectui/test/unit/src/org/netbeans/modules/project/ui/actions/MainProjectActionTest.java
+++ b/projectui/test/unit/src/org/netbeans/modules/project/ui/actions/MainProjectActionTest.java
@@ -40,6 +40,7 @@
package org.netbeans.modules.project.ui.actions;
import java.awt.EventQueue;
+import java.util.concurrent.TimeUnit;
import javax.swing.Action;
import org.netbeans.api.project.Project;
import org.netbeans.api.project.ui.OpenProjects;
@@ -97,6 +98,7 @@
run.init();
assertEquals("No calls to the Project when outside of AWT", 0, prj.counter);
EventQueue.invokeAndWait(run);
+ assertTrue(MainProjectAction.RP.awaitTermination(5, TimeUnit.MINUTES));
assertEquals("One call to the Project from AWT", 2, prj.counter);
run.finish();
}
@@ -122,16 +124,13 @@
public String[] getSupportedActions() {
counter++;
- assertTrue("Need to be called from AWT thread", EventQueue.isDispatchThread());
return new String[] { ActionProvider.COMMAND_BUILD };
}
public void invokeAction(String command, Lookup context) throws IllegalArgumentException {
- assertTrue("Need to be called from AWT thread", EventQueue.isDispatchThread());
}
public boolean isActionEnabled(String command, Lookup context) throws IllegalArgumentException {
- assertTrue("Need to be called from AWT thread", EventQueue.isDispatchThread());
return true;
}
}