From: "poljar (Damir Jeli?)" <poljarinho@xxxxxxxxx> The cardwidget should cache all the relevant data for the ports. This change introduces a new port class which holds the port info for the card. --- src/cardwidget.h | 11 +++++++++++ src/mainwindow.cc | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/cardwidget.h b/src/cardwidget.h index 3837d5b..7c63681 100644 --- a/src/cardwidget.h +++ b/src/cardwidget.h @@ -23,6 +23,16 @@ #include "pavucontrol.h" +class PortInfo { +public: + Glib::ustring name; + Glib::ustring description; + uint32_t priority; + int available; + int direction; + int64_t latency_offset; +}; + class CardWidget : public Gtk::VBox { public: CardWidget(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>& x); @@ -36,6 +46,7 @@ public: bool updating; std::vector< std::pair<Glib::ustring,Glib::ustring> > profiles; + std::map<Glib::ustring, PortInfo> ports; Glib::ustring activeProfile; bool hasSinks; bool hasSources; diff --git a/src/mainwindow.cc b/src/mainwindow.cc index dc84682..b167943 100644 --- a/src/mainwindow.cc +++ b/src/mainwindow.cc @@ -290,6 +290,25 @@ void MainWindow::updateCard(const pa_card_info &info) { w->activeProfile = info.active_profile ? info.active_profile->name : ""; + w->ports.clear(); + if (pa_context_get_server_protocol_version(get_context()) >= 26) { + for (uint32_t i = 0; i < info.n_ports; ++i) { + PortInfo p; + + p.name = info.ports[i]->name; + p.description = info.ports[i]->description; + p.priority = info.ports[i]->priority; + p.available = info.ports[i]->available; + p.direction = info.ports[i]->direction; + + if (pa_context_get_server_protocol_version(get_context()) >= 27) + p.latency_offset = info.ports[i]->latency_offset; + else p.latency_offset = 0; + + w->ports[p.name] = p; + } + } + w->updating = false; w->prepareMenu(); -- 1.7.11.2