diff --git a/sdrgui/device/devicesourceapi.cpp b/sdrgui/device/devicesourceapi.cpp index 89f0e503c..5c9601193 100644 --- a/sdrgui/device/devicesourceapi.cpp +++ b/sdrgui/device/devicesourceapi.cpp @@ -176,10 +176,6 @@ void DeviceSourceAPI::setSampleSourcePluginInterface(PluginInterface *iface) void DeviceSourceAPI::setSampleSourcePluginInstanceGUI(PluginInstanceGUI *gui) { - if (m_sampleSourcePluginInstanceUI && (gui != m_sampleSourcePluginInstanceUI)) { - m_sampleSourcePluginInstanceUI->destroy(); - } - m_sampleSourcePluginInstanceUI = gui; } diff --git a/sdrgui/mainwindow.cpp b/sdrgui/mainwindow.cpp index 4345e1770..710a14ea7 100644 --- a/sdrgui/mainwindow.cpp +++ b/sdrgui/mainwindow.cpp @@ -147,6 +147,10 @@ MainWindow::MainWindow(QWidget* parent) : exit(0); } + // delete previous plugin GUI + m_deviceUIs.back()->m_deviceSourceAPI->getPluginInterface()->deleteSampleSourcePluginInstanceGUI( + m_deviceUIs.back()->m_deviceSourceAPI->getSampleSourcePluginInstanceGUI()); + DeviceSampleSource *source = m_deviceUIs.back()->m_deviceSourceAPI->getPluginInterface()->createSampleSourcePluginInstanceInput( m_deviceUIs.back()->m_deviceSourceAPI->getSampleSourceId(), m_deviceUIs.back()->m_deviceSourceAPI); m_deviceUIs.back()->m_deviceSourceAPI->setSampleSource(source); @@ -233,6 +237,11 @@ void MainWindow::addSourceDevice() // Create a file source instance by default m_pluginManager->selectSampleSourceBySerialOrSequence("sdrangel.samplesource.filesource", "0", 0, m_deviceUIs.back()->m_deviceSourceAPI); + + // delete previous plugin GUI + m_deviceUIs.back()->m_deviceSourceAPI->getPluginInterface()->deleteSampleSourcePluginInstanceGUI( + m_deviceUIs.back()->m_deviceSourceAPI->getSampleSourcePluginInstanceGUI()); + DeviceSampleSource *source = m_deviceUIs.back()->m_deviceSourceAPI->getPluginInterface()->createSampleSourcePluginInstanceInput( m_deviceUIs.back()->m_deviceSourceAPI->getSampleSourceId(), m_deviceUIs.back()->m_deviceSourceAPI); m_deviceUIs.back()->m_deviceSourceAPI->setSampleSource(source); diff --git a/sdrgui/plugin/plugininterface.cpp b/sdrgui/plugin/plugininterface.cpp index 7db1c63ed..458379fd6 100644 --- a/sdrgui/plugin/plugininterface.cpp +++ b/sdrgui/plugin/plugininterface.cpp @@ -6,20 +6,20 @@ void PluginInterface::deleteSampleSourcePluginInstanceGUI(PluginInstanceGUI *ui) { - ui->destroy(); + if (ui) { ui->destroy(); } } void PluginInterface::deleteSampleSourcePluginInstanceInput(DeviceSampleSource *source) { - source->destroy(); + if (source) { source->destroy(); } } void PluginInterface::deleteSampleSinkPluginInstanceGUI(PluginInstanceGUI *ui) { - ui->destroy(); + if (ui) { ui->destroy(); } } void PluginInterface::deleteSampleSinkPluginInstanceOutput(DeviceSampleSink *sink) { - sink->destroy(); + if (sink) { sink->destroy(); } } diff --git a/sdrgui/plugin/pluginmanager.cpp b/sdrgui/plugin/pluginmanager.cpp index 4efe26d58..b3ef7ec25 100644 --- a/sdrgui/plugin/pluginmanager.cpp +++ b/sdrgui/plugin/pluginmanager.cpp @@ -355,7 +355,6 @@ int PluginManager::selectSampleSourceByIndex(int index, DeviceSourceAPI *deviceA << " seq: " << m_sampleSourceDevices[index].m_deviceSequence; deviceAPI->stopAcquisition(); - deviceAPI->setSampleSourcePluginInstanceGUI(0); // this effectively destroys the previous GUI if it exists deviceAPI->setSampleSourceSequence(m_sampleSourceDevices[index].m_deviceSequence); deviceAPI->setHardwareId(m_sampleSourceDevices[index].m_hadrwareId); @@ -427,7 +426,6 @@ int PluginManager::selectSampleSourceBySerialOrSequence(const QString& sourceId, << " seq: " << m_sampleSourceDevices[index].m_deviceSequence; deviceAPI->stopAcquisition(); - deviceAPI->setSampleSourcePluginInstanceGUI(0); // this effectively destroys the previous GUI if it exists // m_sampleSourcePluginGUI = pluginGUI; deviceAPI->setSampleSourceSequence(m_sampleSourceDevices[index].m_deviceSequence);