FileBrowser: fix issue when two cd are made 05/17205/2
Calixte DENIZET [Mon, 14 Sep 2015 17:29:09 +0000 (19:29 +0200)]
Change-Id: Ib71b14786bdffc8c4d13fb40ca9fbfb98b3a0291

scilab/CHANGES_6.0.X
scilab/modules/ui_data/src/java/org/scilab/modules/ui_data/filebrowser/ScilabFileBrowserModel.java
scilab/modules/ui_data/src/java/org/scilab/modules/ui_data/filebrowser/SwingScilabTreeTable.java

index 7077eba..c4b1905 100644 (file)
@@ -27,6 +27,8 @@ Scilab Bug Fixes
 
 * Bug #13890 fixed - getd did not return loaded symbols in previous scope.
 
+* Bug #13894 fixed - Default working directory of the previous session did not work.
+
 * Bug #13907 fixed - Avoids the gray background on the right panel of the palette Browser.
 
 * Bug #13944 fixed - The menu "Toolboxes" was missing.
index 8ef4984..57029dc 100644 (file)
@@ -73,9 +73,13 @@ public class ScilabFileBrowserModel extends AbstractScilabTreeTableModel impleme
             }
 
             protected void done() {
-                stt.reload(ScilabFileBrowserModel.this);
+                if (!isCancelled()) {
+                    stt.reload(ScilabFileBrowserModel.this);
+                    stt.setDirRefresher(null, null);
+                }
             }
         };
+        stt.setDirRefresher(worker, ScilabFileBrowserModel.this);
         worker.execute();
     }
 
index bd7bc15..85bc34a 100644 (file)
@@ -44,6 +44,7 @@ import javax.swing.border.AbstractBorder;
 import javax.swing.border.Border;
 import javax.swing.plaf.basic.BasicTreeUI;
 import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.SwingWorker;
 import javax.swing.tree.TreePath;
 
 import org.scilab.modules.commons.gui.FindIconHelper;
@@ -85,6 +86,9 @@ public class SwingScilabTreeTable extends JTable {
         }
     };
 
+    private SwingWorker dirRefresher;
+    private ScilabFileBrowserModel model;
+
     private Method isLocationInExpandControl;
 
     protected ScilabTreeTableCellRenderer tree;
@@ -295,12 +299,22 @@ public class SwingScilabTreeTable extends JTable {
      * @param baseDir the base directory
      * @param addInHistory if true the dir is add in the history
      */
-    public void setBaseDir(String baseDir, boolean addInHistory) {
-        ScilabFileBrowserModel model = (ScilabFileBrowserModel) tree.getModel();
+    public synchronized void setBaseDir(String baseDir, boolean addInHistory) {
+        boolean cancelled = false;
+        ScilabFileBrowserModel model;
+        if (dirRefresher != null) {
+            dirRefresher.cancel(true);
+            dirRefresher = null;
+            model = this.model;
+            this.model = null;
+            cancelled = true;
+        } else {
+            model = (ScilabFileBrowserModel) tree.getModel();
+        }
         combobox.setBaseDir(baseDir);
         if (model != null) {
             File f = new File(baseDir);
-            if (!baseDir.equals(model.getBaseDir()) && f.exists() && f.isDirectory() && f.canRead()) {
+            if (cancelled || (!baseDir.equals(model.getBaseDir()) && f.exists() && f.isDirectory() && f.canRead())) {
                 tree.setModel(null);
                 if (addInHistory) {
                     history.addPathInHistory(baseDir);
@@ -444,6 +458,12 @@ public class SwingScilabTreeTable extends JTable {
         return popup;
     }
 
+
+    public synchronized void setDirRefresher(SwingWorker refresher, ScilabFileBrowserModel model) {
+        dirRefresher = refresher;
+        this.model = model;
+    }
+
     /**
      * A modulo for negative numbers
      * @param n an int