From d9dc2fda00c9e9b5092356f3ca29ab05ac922ff6 Mon Sep 17 00:00:00 2001
From: Alessandro Ranellucci <aar@cpan.org>
Date: Tue, 1 Jul 2014 19:49:15 +0200
Subject: [PATCH] Fixed regression causing variable layer heights to be
 ignored. #2136

Conflicts:

	xs/xsp/my.map
---
 lib/Slic3r/GUI/Plater/ObjectSettingsDialog.pm | 9 ++++++++-
 xs/t/19_model.t                               | 6 +++++-
 xs/xsp/my.map                                 | 8 ++------
 3 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/lib/Slic3r/GUI/Plater/ObjectSettingsDialog.pm b/lib/Slic3r/GUI/Plater/ObjectSettingsDialog.pm
index a2d0b2d38..ce38af97e 100644
--- a/lib/Slic3r/GUI/Plater/ObjectSettingsDialog.pm
+++ b/lib/Slic3r/GUI/Plater/ObjectSettingsDialog.pm
@@ -47,7 +47,7 @@ sub PartsChanged {
 
 sub PartSettingsChanged {
     my ($self) = @_;
-    return $self->{parts}->PartSettingsChanged;
+    return $self->{parts}->PartSettingsChanged || $self->{layers}->LayersChanged;
 }
 
 package Slic3r::GUI::Plater::ObjectDialog::BaseTab;
@@ -113,6 +113,8 @@ sub new {
             }
         }
         $grid->AppendRows(1);
+        
+        $self->{layers_changed} = 1;
     });
     
     $self->SetSizer($sizer);
@@ -165,4 +167,9 @@ sub _get_ranges {
     return sort { $a->[0] <=> $b->[0] } @ranges;
 }
 
+sub LayersChanged {
+    my ($self) = @_;
+    return $self->{layers_changed};
+}
+
 1;
diff --git a/xs/t/19_model.t b/xs/t/19_model.t
index ad0962de9..56b3631af 100644
--- a/xs/t/19_model.t
+++ b/xs/t/19_model.t
@@ -4,7 +4,7 @@ use strict;
 use warnings;
 
 use Slic3r::XS;
-use Test::More tests => 3;
+use Test::More tests => 4;
 
 {
     my $model = Slic3r::Model->new;
@@ -13,6 +13,10 @@ use Test::More tests => 3;
     isa_ok $object->origin_translation, 'Slic3r::Pointf::Ref';
     $object->origin_translation->translate(10,0);
     is_deeply \@{$object->origin_translation}, [10,0], 'origin_translation is modified by ref';
+    
+    my $lhr = [ [ 5, 10, 0.1 ] ];
+    $object->set_layer_height_ranges($lhr);
+    is_deeply $object->layer_height_ranges, $lhr, 'layer_height_ranges roundtrip';
 }
 
 __END__
diff --git a/xs/xsp/my.map b/xs/xsp/my.map
index cfe0f23a6..3dbb5d3b1 100644
--- a/xs/xsp/my.map
+++ b/xs/xsp/my.map
@@ -343,14 +343,10 @@ T_LAYER_HEIGHT_RANGES
             };
 
         AV *rangeAV = newAV();
-        SV *rangeAV_ref = newRV_noinc((SV*)rangeAV);
-        sv_2mortal(rangeAV_ref);
         av_extend(rangeAV, 2);
         for (int j = 0; j < 3; ++j) {
-            SV *val = sv_newmortal();
-            sv_setnv(val, range_values[j]);
-            av_store(rangeAV, j, val);
+            av_store(rangeAV, j, newSVnv(range_values[j]));
         }
 
-        av_store(av, i++, (SV*)rangeAV_ref);
+        av_store(av, i++, (SV*)newRV_noinc((SV*)rangeAV));
     }