* Bug #12391 fixed - findobj() could change current figure returned by gcf(). 77/10877/2
Vincent COUVERT [Mon, 18 Mar 2013 15:18:52 +0000 (16:18 +0100)]
Change-Id: Ic09a1bfc22bda596cacd4b5fd9a72cba9393c151

scilab/CHANGES_5.4.X
scilab/modules/gui/macros/findobj.sci
scilab/modules/gui/tests/nonreg_tests/bug_12391.dia.ref [new file with mode: 0644]
scilab/modules/gui/tests/nonreg_tests/bug_12391.tst [new file with mode: 0644]

index e8f9584..e8f46fb 100644 (file)
@@ -563,8 +563,9 @@ Bug fixes
 
 * Bug #12389 fixed - Axes sizes were not taken into account in offscreen export.
 
-* Bug #12396 fixed - Example ("problem 2") in the help page of bvode was missing a variable.
+* Bug #12391 fixed - findobj() could change current figure returned by gcf().
 
+* Bug #12396 fixed - Example ("problem 2") in the help page of bvode was missing a variable.
 
 
                     Changes between version 5.3.3 and 5.4.0
index 8b02543..09d20c1 100644 (file)
@@ -1,79 +1,79 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2008 - INRIA - Vincent COUVERT 
-// Copyright (C) 2008 - DIGITEO - Vincent COUVERT 
-// 
+// Copyright (C) 2008 - INRIA - Vincent COUVERT
+// Copyright (C) 2008 - DIGITEO - Vincent COUVERT
+//
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
 // you should have received as part of this distribution.  The terms
-// are also available at    
+// are also available at
 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
 function h =  findobj(propertyName, propertyValue)
 
-rhs = argn(2);
-if rhs<>2 then
-  error(msprintf(gettext("%s: Wrong number of input arguments: %d expected.\n"), "findobj", 2));
-  return
-end
-
-// Return value
-h = []
-
-// Get all opened figures
-figureIds = winsid();
-if isempty(figureIds) then
-  return
-end
-
-currentFig = gcf();
-
-propertyName = convstr(propertyName,"l");
-
-// Iterate over all figures
-for figureindex = 1:size(figureIds,2)
-  
-  // Does the figure match the propertyName/propertyValue set ?
-  f=scf(figureIds(figureindex));
-
-  %ierr = execstr("%bool = isequal(get(f, propertyName), propertyValue);", "errcatch");
-  if %ierr==0 & %bool then
-    h = f;
-    return
-  end
-  
-  answ = findMatchingChild(f.children, propertyName, propertyValue);
-  if ~isempty(answ) then
-    h = answ;
+    rhs = argn(2);
+    if rhs<>2 then
+        error(msprintf(gettext("%s: Wrong number of input arguments: %d expected.\n"), "findobj", 2));
+        return
+    end
+
+    // Return value
+    h = []
+
+    // Get all opened figures
+    figureIds = winsid();
+    if isempty(figureIds) then
+        return
+    end
+
+    currentFig = gcf();
+
+    propertyName = convstr(propertyName,"l");
+
+    // Iterate over all figures
+    for figureindex = 1:size(figureIds,2)
+        // Does the figure match the propertyName/propertyValue set ?
+        f=scf(figureIds(figureindex));
+
+        %ierr = execstr("%bool = isequal(get(f, propertyName), propertyValue);", "errcatch");
+        if %ierr==0 & %bool then
+            h = f;
+            break
+        end
+
+        answ = findMatchingChild(f.children, propertyName, propertyValue);
+        if ~isempty(answ) then
+            h = answ;
+            break
+        end
+    end
+
     scf(currentFig);
-    return
-  end      
-end
-scf(currentFig);
+
 endfunction
 //-----------------------------------------------------------------------------
 function hFound = findMatchingChild(children, propertyName, propertyValue)
-// Copyright DIGITEO 2008
-// Vincent COUVERT
-
-hFound = []
-
-for childIndex = 1:size(children,1)
-  
-  %ierr = execstr("%bool = isequal(get(children(childIndex), propertyName), propertyValue);", "errcatch");
-  if %ierr==0 & %bool then
-    hFound = children(childIndex);
-    return
-  end
-  
-  %ierr = execstr("get(children(childIndex), ""children"");", "errcatch"); // Does the child have a children property
-  
-  if %ierr==0 then // Yes the child can have children
-    answ = findMatchingChild(children(childIndex).children, propertyName, propertyValue);
-    if ~isempty(answ) then
-      hFound = answ;
-      return
+    // Copyright DIGITEO 2008
+    // Vincent COUVERT
+
+    hFound = []
+
+    for childIndex = 1:size(children,1)
+
+        %ierr = execstr("%bool = isequal(get(children(childIndex), propertyName), propertyValue);", "errcatch");
+        if %ierr==0 & %bool then
+            hFound = children(childIndex);
+            return
+        end
+
+        %ierr = execstr("get(children(childIndex), ""children"");", "errcatch"); // Does the child have a children property
+
+        if %ierr==0 then // Yes the child can have children
+            answ = findMatchingChild(children(childIndex).children, propertyName, propertyValue);
+            if ~isempty(answ) then
+                hFound = answ;
+                return
+            end
+        end
     end
-  end
-end
 
 endfunction
 //-----------------------------------------------------------------------------
diff --git a/scilab/modules/gui/tests/nonreg_tests/bug_12391.dia.ref b/scilab/modules/gui/tests/nonreg_tests/bug_12391.dia.ref
new file mode 100644 (file)
index 0000000..b78cf65
--- /dev/null
@@ -0,0 +1,22 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Vincent COUVERT
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- Non-regression test for bug 12391 -->
+// <-- TEST WITH GRAPHIC -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/12391
+//
+// <-- Short Description -->
+// findobj could change current figure returned by gcf();
+f = gcf(); // Figure #0
+f.tag = "currentfigure";
+g = scf(); // Figure #1
+g.tag = "otherfigure";
+scf(f);
+findobj("tag", "otherfigure");
+assert_checkequal(get(gcf(), "tag"), "currentfigure");
diff --git a/scilab/modules/gui/tests/nonreg_tests/bug_12391.tst b/scilab/modules/gui/tests/nonreg_tests/bug_12391.tst
new file mode 100644 (file)
index 0000000..3e7fa93
--- /dev/null
@@ -0,0 +1,27 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Vincent COUVERT
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- Non-regression test for bug 12391 -->
+// <-- TEST WITH GRAPHIC -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/12391
+//
+// <-- Short Description -->
+// findobj could change current figure returned by gcf();
+
+f = gcf(); // Figure #0
+f.tag = "currentfigure";
+
+g = scf(); // Figure #1
+g.tag = "otherfigure";
+
+scf(f);
+
+findobj("tag", "otherfigure");
+
+assert_checkequal(get(gcf(), "tag"), "currentfigure");
\ No newline at end of file