Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • pulseaudio/pavucontrol
  • piotrdrag/pavucontrol
  • huftis/pavucontrol
  • tanuk/pavucontrol
  • fsateler/pavucontrol
  • gusnan/pavucontrol
  • kamiyaa/pavucontrol
  • scootergrisen/pavucontrol
  • muzena/pavucontrol
  • wjt/pavucontrol
  • arun/pavucontrol
  • lilydjwg/pavucontrol
  • haagch/pavucontrol
  • t.clastres/pavucontrol
  • Ammuu5/pavucontrol
  • xondrejk/pavucontrol
  • vinimneves25/pavucontrol
  • pan93412/pavucontrol
  • duhlin/pavucontrol
  • dshoreman/pavucontrol
  • ahlinc/pavucontrol
  • RDL-28/pavucontrol
  • comradekingu/pavucontrol
  • elkowar/pavucontrol
  • philipzae/pavucontrol
  • jdloft/pavucontrol
  • mephinet/pavucontrol
  • igor.v.kovalenko/pavucontrol
  • demoisepayne91/pavucontrol
  • warmos/pavucontrol
  • WhyNotHugo/pavucontrol
  • wtaymans/pavucontrol
  • PolyMeilex/pavucontrol
  • alex19EP/pavucontrol
  • heftig/pavucontrol
  • Hi-Angel/pavucontrol
  • oxayotl/pavucontrol
  • Benjamin_Loison/pavucontrol
  • adirat/pavucontrol
  • psykose1/pavucontrol
  • nielsdg/pavucontrol
  • nicolarevelant/pavucontrol
  • C0rn3j/pavucontrol
  • jimmac1/pavucontrol
44 results
Show changes
Commits on Source (3)
......@@ -52,6 +52,7 @@ CardWidget::CardWidget(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>
codecList->signal_changed().connect( sigc::mem_fun(*this, &CardWidget::onCodecChange));
hasProfileLock = false;
hideUnavailableProfiles = false;
profileLockToggleButton->signal_clicked().connect(sigc::mem_fun(*this, &CardWidget::onProfileLockToggleButton));
profileLockToggleButton->set_sensitive(true);
......@@ -72,16 +73,25 @@ void CardWidget::prepareMenu() {
profileListStore->clear();
active_idx = -1;
/* Fill the ComboBox's Tree Model */
for (uint32_t i = 0; i < profiles.size(); ++i) {
for (uint32_t i = 0, idx = 0; i < profiles.size(); ++i) {
if (hideUnavailableProfiles && !availableProfiles[profiles[i].first])
continue;
Gtk::TreeModel::Row row = *(profileListStore->append());
row[profileModel.name] = profiles[i].first;
row[profileModel.desc] = profiles[i].second;
if (profiles[i].first == activeProfile)
active_idx = i;
active_idx = idx;
/* Track the index in the list store, as we might have few entries than
* all the profiles if unavailable profiles are hidden. */
idx++;
}
if (active_idx >= 0)
if (profiles.size())
profileList->set_active(active_idx);
codecListStore->clear();
......
......@@ -50,6 +50,7 @@ public:
// each entry in profiles is a pair of profile name and profile description
std::vector<std::pair<Glib::ustring, Glib::ustring>> profiles;
std::map<Glib::ustring, bool> availableProfiles;
std::map<Glib::ustring, PortInfo> ports;
Glib::ustring activeProfile;
bool hasSinks;
......@@ -60,6 +61,7 @@ public:
Glib::ustring activeCodec;
bool hasProfileLock;
bool hideUnavailableProfiles;
void prepareMenu();
......
......@@ -97,6 +97,7 @@ MainWindow::MainWindow(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>
sourceTypeComboBox = x->get_widget<Gtk::ComboBox>("sourceTypeComboBox");
notebook = x->get_widget<Gtk::Notebook>("notebook");
showVolumeMetersCheckButton = x->get_widget<Gtk::CheckButton>("showVolumeMetersCheckButton");
hideUnavailableCardProfilesCheckButton = x->get_widget<Gtk::CheckButton>("hideUnavailableCardProfilesCheckButton");
sinkInputTypeComboBox->set_active((int) showSinkInputType);
sourceOutputTypeComboBox->set_active((int) showSourceOutputType);
......@@ -108,6 +109,7 @@ MainWindow::MainWindow(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>
sinkTypeComboBox->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::onSinkTypeComboBoxChanged));
sourceTypeComboBox->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::onSourceTypeComboBoxChanged));
showVolumeMetersCheckButton->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::onShowVolumeMetersCheckButtonToggled));
hideUnavailableCardProfilesCheckButton->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::onHideUnavailableCardProfilesCheckButtonToggled));
auto event_controller_key = Gtk::EventControllerKey::create();
event_controller_key->signal_key_pressed().connect(sigc::mem_fun(*this, &MainWindow::on_key_press_event), false);
......@@ -130,6 +132,9 @@ MainWindow::MainWindow(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>
if (g_key_file_has_key(config, "window", "showVolumeMeters", NULL)) {
showVolumeMetersCheckButton->set_active(g_key_file_get_boolean(config, "window", "showVolumeMeters", NULL));
}
if (g_key_file_has_key(config, "window", "hideUnavailableCardProfiles", NULL)) {
hideUnavailableCardProfilesCheckButton->set_active(g_key_file_get_boolean(config, "window", "hideUnavailableCardProfiles", NULL));
}
int default_width, default_height;
get_default_size(default_width, default_height);
......@@ -237,6 +242,7 @@ MainWindow::~MainWindow() {
g_key_file_set_integer(config, "window", "sinkType", sinkTypeComboBox->get_active_row_number());
g_key_file_set_integer(config, "window", "sourceType", sourceTypeComboBox->get_active_row_number());
g_key_file_set_integer(config, "window", "showVolumeMeters", showVolumeMetersCheckButton->get_active());
g_key_file_set_integer(config, "window", "hideUnavailableCardProfiles", hideUnavailableCardProfilesCheckButton->get_active());
gsize filelen;
GError *err = NULL;
......@@ -360,6 +366,8 @@ void MainWindow::updateCard(const pa_card_info &info) {
cardsVBox->append(*w);
w->unreference();
w->index = info.index;
w->hideUnavailableProfiles = hideUnavailableCardProfilesCheckButton->get_active();
w->prepareMenu();
is_new = true;
}
......@@ -402,7 +410,7 @@ void MainWindow::updateCard(const pa_card_info &info) {
w->profiles.clear();
for (std::set<pa_card_profile_info2>::iterator profileIt = profile_priorities.begin(); profileIt != profile_priorities.end(); ++profileIt) {
bool hasNo = false, hasOther = false;
bool hasNo = false, hasOther = false, available = true;
std::map<Glib::ustring, PortInfo>::iterator portIt;
Glib::ustring desc = profileIt->description;
......@@ -419,13 +427,18 @@ void MainWindow::updateCard(const pa_card_info &info) {
break;
}
}
if (hasNo && !hasOther)
if (hasNo && !hasOther) {
desc += _(" (unplugged)");
available = false;
}
if (!profileIt->available)
if (!profileIt->available) {
desc += _(" (unavailable)");
available = false;
}
w->profiles.push_back(std::pair<Glib::ustring, Glib::ustring>(profileIt->name, desc));
w->availableProfiles[profileIt->name] = available;
}
w->activeProfile = info.active_profile ? info.active_profile->name : "";
......@@ -1422,3 +1435,14 @@ void MainWindow::onShowVolumeMetersCheckButtonToggled() {
sw->setVolumeMeterVisible(state);
}
}
void MainWindow::onHideUnavailableCardProfilesCheckButtonToggled() {
bool state = hideUnavailableCardProfilesCheckButton->get_active();
for (std::map<uint32_t, CardWidget*>::iterator it = cardWidgets.begin() ; it != cardWidgets.end(); it++) {
CardWidget *cw = it->second;
cw->hideUnavailableProfiles = state;
cw->prepareMenu();
}
}
......@@ -83,7 +83,7 @@ public:
Gtk::Box *streamsVBox, *recsVBox, *sinksVBox, *sourcesVBox, *cardsVBox;
Gtk::Label *noStreamsLabel, *noRecsLabel, *noSinksLabel, *noSourcesLabel, *noCardsLabel, *connectingLabel;
Gtk::ComboBox *sinkInputTypeComboBox, *sourceOutputTypeComboBox, *sinkTypeComboBox, *sourceTypeComboBox;
Gtk::CheckButton *showVolumeMetersCheckButton;
Gtk::CheckButton *showVolumeMetersCheckButton, *hideUnavailableCardProfilesCheckButton;
std::map<uint32_t, CardWidget*> cardWidgets;
std::map<uint32_t, SinkWidget*> sinkWidgets;
......@@ -102,6 +102,7 @@ public:
virtual void onSinkTypeComboBoxChanged();
virtual void onSourceTypeComboBoxChanged();
virtual void onShowVolumeMetersCheckButtonToggled();
virtual void onHideUnavailableCardProfilesCheckButtonToggled();
void setConnectionState(gboolean connected);
void updateDeviceVisibility();
......
......@@ -433,6 +433,13 @@
<property name="active">1</property>
</object>
</child>
<child>
<object class="GtkCheckButton" id="hideUnavailableCardProfilesCheckButton">
<property name="label" translatable="yes">Hide unavailable card profiles</property>
<property name="focusable">1</property>
<property name="active">0</property>
</object>
</child>
</object>
</child>
</object>
......