From fbba4ed9181bd109fa3ca90c5a9769ca95f54e77 Mon Sep 17 00:00:00 2001 From: Bruno JOFRET Date: Wed, 6 Mar 2013 14:18:44 +0100 Subject: [PATCH] Force tab closure to be performed by EDT. Change-Id: I118f2a28e743639e1c36af1a5d92608f704b335b --- .../src/java/org/scilab/modules/gui/SwingView.java | 44 ++++++++++++++++---- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/scilab/modules/gui/src/java/org/scilab/modules/gui/SwingView.java b/scilab/modules/gui/src/java/org/scilab/modules/gui/SwingView.java index a7419f8..fdd9b37 100644 --- a/scilab/modules/gui/src/java/org/scilab/modules/gui/SwingView.java +++ b/scilab/modules/gui/src/java/org/scilab/modules/gui/SwingView.java @@ -563,15 +563,41 @@ public final class SwingView implements GraphicView { if (requestedObject != null) { switch (requestedObject.getType()) { case Figure: - final SwingScilabTab tab = (SwingScilabTab) requestedObject.getValue(); - tab.disablePaint(); - DockingManager.close(tab); - DockingManager.unregisterDockable((Dockable) tab); - ClosingOperationsManager.unregisterClosingOperation(tab); - ClosingOperationsManager.removeDependency(tab); - ClosingOperationsManager.checkTabForClosing(tab); - tab.close(); - break; + if (SwingUtilities.isEventDispatchThread()) { + final SwingScilabTab tab = (SwingScilabTab) requestedObject.getValue(); + tab.disablePaint(); + DockingManager.close(tab); + DockingManager.unregisterDockable((Dockable) tab); + ClosingOperationsManager.unregisterClosingOperation(tab); + ClosingOperationsManager.removeDependency(tab); + ClosingOperationsManager.checkTabForClosing(tab); + tab.close(); + } else { + try { + SwingUtilities.invokeAndWait(new Runnable() { + + @Override + public void run() { + final SwingScilabTab tab = (SwingScilabTab) requestedObject.getValue(); + tab.disablePaint(); + DockingManager.close(tab); + DockingManager.unregisterDockable((Dockable) tab); + ClosingOperationsManager.unregisterClosingOperation(tab); + ClosingOperationsManager.removeDependency(tab); + ClosingOperationsManager.checkTabForClosing(tab); + tab.close(); + } + + }); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (InvocationTargetException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + break; case Progressbar: case Waitbar: SwingScilabWaitBar bar = (SwingScilabWaitBar) requestedObject.getValue(); -- 1.7.9.5