- // Add the remaining channels
- add_channels_to_owner(device->channels(), this, offset, signal_map);
- assert(signal_map.empty());
+ // Enqueue the remaining channels as free ungrouped traces
+ const vector< shared_ptr<Trace> > new_top_level_signals =
+ extract_new_traces_for_channels(sr_dev->channels(),
+ signal_map, add_traces);
+ new_top_level_items.insert(new_top_level_items.end(),
+ new_top_level_signals.begin(), new_top_level_signals.end());
+
+ // Enqueue any remaining traces i.e. decode traces
+ new_top_level_items.insert(new_top_level_items.end(),
+ add_traces.begin(), add_traces.end());
+
+ // Remove any removed traces
+ for (shared_ptr<Trace> trace : remove_traces) {
+ RowItemOwner *const owner = trace->owner();
+ assert(owner);
+ owner->remove_child_item(trace);
+ }