@@ -20,13 +20,15 @@ bool deserializeSegment(JsonObject elem, byte it, byte presetId)
2020 byte id = elem[" id" ] | it;
2121 if (id >= strip.getMaxSegments ()) return false ;
2222
23+ bool newSeg = false ;
2324 int stop = elem[" stop" ] | -1 ;
2425
2526 // append segment
2627 if (id >= strip.getSegmentsNum ()) {
2728 if (stop <= 0 ) return false ; // ignore empty/inactive segments
2829 strip.appendSegment (Segment (0 , strip.getLengthTotal ()));
2930 id = strip.getSegmentsNum ()-1 ; // segments are added at the end of list
31+ newSeg = true ;
3032 }
3133
3234 // DEBUG_PRINTLN("-- JSON deserialize segment.");
@@ -118,8 +120,12 @@ bool deserializeSegment(JsonObject elem, byte it, byte presetId)
118120 // do not call seg.setUp() here, as it may cause a crash due to concurrent access if the segment is currently drawing effects
119121 // WS2812FX handles queueing of the change
120122 strip.setSegment (id, start, stop, grp, spc, of, startY, stopY);
123+ if (newSeg) seg.refreshLightCapabilities (); // fix for #3403
121124
122- if (seg.reset && seg.stop == 0 ) return true ; // segment was deleted & is marked for reset, no need to change anything else
125+ if (seg.reset && seg.stop == 0 ) {
126+ if (id == strip.getMainSegmentId ()) strip.setMainSegmentId (0 ); // fix for #3403
127+ return true ; // segment was deleted & is marked for reset, no need to change anything else
128+ }
123129
124130 byte segbri = seg.opacity ;
125131 if (getVal (elem[" bri" ], &segbri)) {
0 commit comments