diff --git a/src/org/omegat/core/CoreEvents.java b/src/org/omegat/core/CoreEvents.java index d9adf08787..6c4a33ad5b 100644 --- a/src/org/omegat/core/CoreEvents.java +++ b/src/org/omegat/core/CoreEvents.java @@ -111,9 +111,12 @@ public static void registerEditorEventListener(final IEditorEventListener listen public static void unregisterEditorEventListener(final IEditorEventListener listener) { EDITOR_EVENT_LISTENERS.remove(listener); } + + public static boolean isInProjectEventLoop = false; /** Fire event. */ public static void fireProjectChange(final IProjectEventListener.PROJECT_CHANGE_TYPE eventType) { + isInProjectEventLoop = true; // done by the calling thread, not by UI thread (inside invokeLater) ! SwingUtilities.invokeLater(() -> { Log.logInfoRB("LOG_INFO_EVENT_PROJECT_CHANGE", eventType); for (IProjectEventListener listener : PROJECT_EVENT_LISTENERS) { @@ -123,6 +126,7 @@ public static void fireProjectChange(final IProjectEventListener.PROJECT_CHANGE_ log("ERROR_EVENT_PROJECT_CHANGE", t); } } + isInProjectEventLoop = false; }); } diff --git a/src/org/omegat/core/data/RealProject.java b/src/org/omegat/core/data/RealProject.java index 9ff304d31e..e3ccb20000 100644 --- a/src/org/omegat/core/data/RealProject.java +++ b/src/org/omegat/core/data/RealProject.java @@ -714,6 +714,12 @@ public void compileProjectAndCommit(String sourcePattern, boolean doPostProcessi // them to // the repository (BUGS#1176) CoreEvents.fireProjectChange(IProjectEventListener.PROJECT_CHANGE_TYPE.COMPILE); + while (CoreEvents.isInProjectEventLoop) { + Thread.yield(); + } + while (org.omegat.gui.scripting.ScriptingWindow.window.inEventsLoop > 0) { + Thread.yield(); + } if (remoteRepositoryProvider != null && config.getTargetDir().isUnderRoot() && commitTargetFiles && isOnlineMode) { diff --git a/src/org/omegat/gui/scripting/ScriptingWindow.java b/src/org/omegat/gui/scripting/ScriptingWindow.java index 9a795e3e37..026f359b48 100644 --- a/src/org/omegat/gui/scripting/ScriptingWindow.java +++ b/src/org/omegat/gui/scripting/ScriptingWindow.java @@ -116,7 +116,7 @@ public class ScriptingWindow { private static final Logger LOGGER = Logger.getLogger(ScriptingWindow.class.getName()); - static ScriptingWindow window; + static public ScriptingWindow window; public static void loadPlugins() { CoreEvents.registerApplicationEventListener(new IApplicationEventListener() { @@ -585,6 +585,7 @@ protected void done() { } catch (ExecutionException e) { logResult(OStrings.getString("SCW_SCRIPT_ERROR"), e); } + inEventsLoop--; } } @@ -599,6 +600,8 @@ public void executeScript(ScriptItem scriptItem, Map bindings) { public void executeScript(ScriptItem scriptItem, Map bindings, boolean cancelQueue) { executeScripts(Arrays.asList(scriptItem), bindings, cancelQueue); } + + public int inEventsLoop = 0; /** * Execute scripts sequentially to make sure they don't interrupt each @@ -621,12 +624,12 @@ public void executeScripts(final List scriptItems, final Map