@@ -2400,6 +2400,9 @@ public void actionPerformed(final java.awt.event.ActionEvent e) {
24002400
24012401 final int [] savedClip = {nearSlider .getValue (), farSlider .getValue ()};
24022402 final boolean [] slabOn = {false };
2403+ // Guards posSlider.setValue() calls that are programmatic (not from the user
2404+ // dragging the slider), so slabListener does not fire a second applySlab().
2405+ final boolean [] updatingSlab = {false };
24032406
24042407 final VolumeViewerPanel viewerPanel = bvvInstance .currentBvv .getViewer ();
24052408
@@ -2522,7 +2525,9 @@ public void mousePressed(final java.awt.event.MouseEvent e) {
25222525 cur .get (2 , 0 ) * cur .get (2 , 0 ));
25232526 if (curScale > 0 ) {
25242527 final int sliderPos = (int ) Math .round (-cur .get (2 , 3 ) / (curScale * zStep ));
2528+ updatingSlab [0 ] = true ;
25252529 posSlider .setValue (Math .max (0 , Math .min (nSlices , sliderPos )));
2530+ updatingSlab [0 ] = false ;
25262531 }
25272532 final double zCenter = posSlider .getValue () * zStep ;
25282533 final double halfThick = ((Number ) thickSpinner .getValue ()).doubleValue () / 2.0 ;
@@ -2551,7 +2556,7 @@ public void mousePressed(final java.awt.event.MouseEvent e) {
25512556 });
25522557
25532558 final javax .swing .event .ChangeListener slabListener = ev -> {
2554- if (slabOn [0 ]) {
2559+ if (slabOn [0 ] && ! updatingSlab [ 0 ] ) {
25552560 final double zCenter = posSlider .getValue () * zStep ;
25562561 final double halfThick = ((Number ) thickSpinner .getValue ()).doubleValue () / 2.0 ;
25572562 applySlab (viewerPanel , physZ , zCenter , halfThick * 2.0 );
0 commit comments