@@ -223,11 +223,18 @@ function close(obj)
223223 catch err
224224 fprintf(2 , ' [FastSenseCompanion] InspectorPane.detach failed: %s\n ' , err .message);
225225 end
226- % Release orchestrator-level listeners.
227- try
228- delete(obj .Listeners_);
229- catch err
230- fprintf(2 , ' [FastSenseCompanion] Listeners delete failed: %s\n ' , err .message);
226+ % Release orchestrator-level listeners. delete(cellArray) is
227+ % interpreted as filename-delete by MATLAB ("Name must be a
228+ % text scalar"). Iterate explicitly.
229+ for ii = 1 : numel(obj .Listeners_)
230+ try
231+ lh = obj.Listeners_{ii };
232+ if isobject(lh ) && isvalid(lh )
233+ delete(lh );
234+ end
235+ catch err
236+ fprintf(2 , ' [FastSenseCompanion] Listener[%d ] delete failed: %s\n ' , ii , err .message);
237+ end
231238 end
232239 obj.Listeners_ = {};
233240 % Always delete the uifigure last and unconditionally — this is
@@ -282,8 +289,14 @@ function setProject(obj, dashboards, registry)
282289 % before re-registering. Without this, every setProject() call
283290 % doubles the handler count for InspectorStateChanged,
284291 % OpenAdHocPlotRequested, and the three pane event listeners
285- % (COMPSHELL-05).
286- delete(obj .Listeners_);
292+ % (COMPSHELL-05). Iterate cell explicitly because
293+ % delete(cellArray) is interpreted as filename-delete by MATLAB.
294+ for ii = 1 : numel(obj .Listeners_)
295+ lh = obj.Listeners_{ii };
296+ if isobject(lh ) && isvalid(lh )
297+ delete(lh );
298+ end
299+ end
287300 obj.Listeners_ = {};
288301 % Re-wire pane event listeners (detach cleared them)
289302 obj.Listeners_{end + 1 } = addlistener(obj .ListPane_, ' DashboardSelected' , ...
0 commit comments