summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/MainWindow.cc34
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())));
}