diff --git a/Ghidra/Features/Base/src/main/java/ghidra/plugin/importer/ImporterUtilities.java b/Ghidra/Features/Base/src/main/java/ghidra/plugin/importer/ImporterUtilities.java index a3c7ee6560..f8e0010070 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/plugin/importer/ImporterUtilities.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/plugin/importer/ImporterUtilities.java @@ -429,13 +429,15 @@ public class ImporterUtilities { if (importedObject instanceof Program) { Program program = (Program) importedObject; + + setProgramProperties(program, fsrl, monitor); + ProgramMappingService.createAssociation(fsrl, program); + if (programManager != null) { int openState = firstProgram ? ProgramManager.OPEN_CURRENT : ProgramManager.OPEN_VISIBLE; programManager.openProgram(program, openState); } - setProgramProperties(program, fsrl, monitor); - ProgramMappingService.createAssociation(fsrl, program); importedFilesSet.add(program.getDomainFile()); } if (firstProgram) { diff --git a/Ghidra/Framework/Docking/src/main/java/ghidra/util/task/TaskDialog.java b/Ghidra/Framework/Docking/src/main/java/ghidra/util/task/TaskDialog.java index e41bf01ce2..badcfcf18c 100644 --- a/Ghidra/Framework/Docking/src/main/java/ghidra/util/task/TaskDialog.java +++ b/Ghidra/Framework/Docking/src/main/java/ghidra/util/task/TaskDialog.java @@ -25,8 +25,7 @@ import javax.swing.*; import docking.DialogComponentProvider; import docking.DockingWindowManager; import docking.widgets.OptionDialog; -import ghidra.util.HelpLocation; -import ghidra.util.SystemUtilities; +import ghidra.util.*; import ghidra.util.exception.CancelledException; import ghidra.util.timer.GTimer; @@ -205,12 +204,12 @@ public class TaskDialog extends DialogComponentProvider implements TaskMonitor { @Override public void setCancelEnabled(boolean enable) { monitorComponent.setCancelEnabled(enable); - super.setCancelEnabled(enable); + Swing.runLater(() -> super.setCancelEnabled(enable)); } @Override public boolean isCancelEnabled() { - return super.isCancelEnabled(); + return monitorComponent.isCancelEnabled(); } public synchronized void taskProcessed() { @@ -317,7 +316,7 @@ public class TaskDialog extends DialogComponentProvider implements TaskMonitor { @Override public String getMessage() { - return monitorComponent.getMessage(); + return getStatusText(); } @Override diff --git a/Ghidra/Framework/Docking/src/test/java/ghidra/util/task/AbstractTaskTest.java b/Ghidra/Framework/Docking/src/test/java/ghidra/util/task/AbstractTaskTest.java index d6e95fbccf..476a9ad6b6 100644 --- a/Ghidra/Framework/Docking/src/test/java/ghidra/util/task/AbstractTaskTest.java +++ b/Ghidra/Framework/Docking/src/test/java/ghidra/util/task/AbstractTaskTest.java @@ -23,11 +23,13 @@ import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicBoolean; import docking.test.AbstractDockingTest; +import ghidra.util.Swing; public class AbstractTaskTest extends AbstractDockingTest { protected static final int DELAY_FAST = 10; - protected static final int DELAY_SLOW = 100; + protected static final int DELAY_SLOW = TaskLauncher.INITIAL_MODAL_DELAY_MS + 100; // + some fudge + protected static final int DELAY_NONMODAL_SLOW = TaskLauncher.INITIAL_DELAY_MS + 100; // + some fudge protected static final int DELAY_LAUNCHER = DELAY_FAST * 2; // 2 - 1 for the task itself; 1 for the launcher @@ -69,7 +71,12 @@ public class AbstractTaskTest extends AbstractDockingTest { return; // not shown } - assertFalse(dialogSpy.wasShown()); + assertFalse("Dialog should not have been shown.\nEvents: " + eventQueue, + dialogSpy.wasShown()); + } + + protected void assertDialogShown() { + assertTrue("Dialog should have been shown.\nEvents: " + eventQueue, dialogSpy.wasShown()); } protected void waitForTask() throws Exception { @@ -186,7 +193,8 @@ public class AbstractTaskTest extends AbstractDockingTest { @Override public void run(TaskMonitor monitor) { postEvent(getName() + " started..."); - sleep(DELAY_SLOW); + sleep(DELAY_NONMODAL_SLOW); + Swing.runNow(() -> null); threadsFinished.countDown(); postEvent(getName() + " finished."); } diff --git a/Ghidra/Framework/Docking/src/test/java/ghidra/util/task/TaskDialogTest.java b/Ghidra/Framework/Docking/src/test/java/ghidra/util/task/TaskDialogTest.java index b6f029d232..f8af79e244 100644 --- a/Ghidra/Framework/Docking/src/test/java/ghidra/util/task/TaskDialogTest.java +++ b/Ghidra/Framework/Docking/src/test/java/ghidra/util/task/TaskDialogTest.java @@ -63,7 +63,7 @@ public class TaskDialogTest extends AbstractTaskTest { waitForTask(); - assertTrue(dialogSpy.wasShown()); + assertDialogShown(); assertSwingThreadBlockedForTask(); } @@ -89,7 +89,7 @@ public class TaskDialogTest extends AbstractTaskTest { waitForTask(); - assertTrue(dialogSpy.wasShown()); + assertDialogShown(); assertSwingThreadFinishedBeforeTask(); }