diff options
-rw-r--r-- | src/MainWindow.cc | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/src/MainWindow.cc b/src/MainWindow.cc index 233f539..d13f131 100644 --- a/src/MainWindow.cc +++ b/src/MainWindow.cc @@ -223,11 +223,20 @@ void MainWindow::updateInfo(ModuleInfo &i) { void MainWindow::updateInfo(SinkInputInfo &i) { char t[256]; + + SinkInfo *si = serverInfoManager->getSinkInfo(i.sink); + if (!si) + return; + + if (i.treeRef) { + Gtk::TreePath path = i.treeRef.get_path(); + path.up(); + + if (path != si->treeRef.get_path()) + deviceTreeStore->erase(deviceTreeStore->get_iter(i.treeRef.get_path())); + } + if (!i.treeRef) { - SinkInfo *si = serverInfoManager->getSinkInfo(i.sink); - if (!si) - return; - Gtk::TreeIter iter = deviceTreeStore->get_iter(si->treeRef.get_path()); i.treeRef = Gtk::TreeRowReference(deviceTreeStore, Gtk::TreePath(deviceTreeStore->append(iter->children()))); } @@ -245,11 +254,20 @@ void MainWindow::updateInfo(SinkInputInfo &i) { void MainWindow::updateInfo(SourceOutputInfo &i) { char t[256]; - if (!i.treeRef) { - SourceInfo *si = serverInfoManager->getSourceInfo(i.source); - if (!si) - return; + + SourceInfo *si = serverInfoManager->getSourceInfo(i.source); + if (!si) + return; + + if (i.treeRef) { + Gtk::TreePath path = i.treeRef.get_path(); + path.up(); + if (path != si->treeRef.get_path()) + deviceTreeStore->erase(deviceTreeStore->get_iter(i.treeRef.get_path())); + } + + if (!i.treeRef) { Gtk::TreeIter iter = deviceTreeStore->get_iter(si->treeRef.get_path()); i.treeRef = Gtk::TreeRowReference(deviceTreeStore, Gtk::TreePath(deviceTreeStore->append(iter->children()))); } |