show stream icons, don't show our own monitor streams, initialize client proplist properly
git-svn-id: file:///home/lennart/svn/public/pavucontrol/trunk@82 c17c95f2-f111-0410-90bf-f30a9569010c
This commit is contained in:
parent
91ed6f0355
commit
3dd1a3f7ad
|
@ -101,6 +101,7 @@ public:
|
||||||
Gtk::Label *nameLabel, *boldNameLabel;
|
Gtk::Label *nameLabel, *boldNameLabel;
|
||||||
Gtk::ToggleButton *streamToggleButton;
|
Gtk::ToggleButton *streamToggleButton;
|
||||||
Gtk::Menu menu;
|
Gtk::Menu menu;
|
||||||
|
Gtk::Image *iconImage;
|
||||||
|
|
||||||
bool updating;
|
bool updating;
|
||||||
|
|
||||||
|
@ -303,6 +304,7 @@ public:
|
||||||
|
|
||||||
void updateDeviceVisibility();
|
void updateDeviceVisibility();
|
||||||
void createMonitorStream(uint32_t idx);
|
void createMonitorStream(uint32_t idx);
|
||||||
|
void setIconFromProplist(Gtk::Image *icon, pa_proplist *l, const char *name);
|
||||||
|
|
||||||
Glib::ustring defaultSinkName, defaultSourceName;
|
Glib::ustring defaultSinkName, defaultSourceName;
|
||||||
|
|
||||||
|
@ -393,6 +395,7 @@ MinimalStreamWidget::MinimalStreamWidget(BaseObjectType* cobject, const Glib::Re
|
||||||
x->get_widget("nameLabel", nameLabel);
|
x->get_widget("nameLabel", nameLabel);
|
||||||
x->get_widget("boldNameLabel", boldNameLabel);
|
x->get_widget("boldNameLabel", boldNameLabel);
|
||||||
x->get_widget("streamToggle", streamToggleButton);
|
x->get_widget("streamToggle", streamToggleButton);
|
||||||
|
x->get_widget("iconImage", iconImage);
|
||||||
|
|
||||||
streamToggleButton->set_active(false);
|
streamToggleButton->set_active(false);
|
||||||
streamToggleButton->signal_clicked().connect(sigc::mem_fun(*this, &MinimalStreamWidget::onStreamToggleButton));
|
streamToggleButton->signal_clicked().connect(sigc::mem_fun(*this, &MinimalStreamWidget::onStreamToggleButton));
|
||||||
|
@ -932,6 +935,8 @@ void MainWindow::updateSink(const pa_sink_info &info) {
|
||||||
w->nameLabel->set_markup(txt = g_markup_printf_escaped("%s", info.description));
|
w->nameLabel->set_markup(txt = g_markup_printf_escaped("%s", info.description));
|
||||||
g_free(txt);
|
g_free(txt);
|
||||||
|
|
||||||
|
w->iconImage->set_from_icon_name("audio-card", Gtk::ICON_SIZE_SMALL_TOOLBAR);
|
||||||
|
|
||||||
w->setVolume(info.volume);
|
w->setVolume(info.volume);
|
||||||
w->muteToggleButton->set_active(info.mute);
|
w->muteToggleButton->set_active(info.mute);
|
||||||
|
|
||||||
|
@ -967,8 +972,6 @@ static void read_callback(pa_stream *s, size_t length, void *userdata) {
|
||||||
|
|
||||||
pa_stream_drop(s);
|
pa_stream_drop(s);
|
||||||
|
|
||||||
fprintf(stderr, "read(%lu) = %.2f\n", (unsigned long) length, v);
|
|
||||||
|
|
||||||
if (v < 0)
|
if (v < 0)
|
||||||
v = 0;
|
v = 0;
|
||||||
if (v > 1)
|
if (v > 1)
|
||||||
|
@ -1035,6 +1038,8 @@ void MainWindow::updateSource(const pa_source_info &info) {
|
||||||
w->nameLabel->set_markup(txt = g_markup_printf_escaped("%s", info.description));
|
w->nameLabel->set_markup(txt = g_markup_printf_escaped("%s", info.description));
|
||||||
g_free(txt);
|
g_free(txt);
|
||||||
|
|
||||||
|
w->iconImage->set_from_icon_name("audio-input-microphone", Gtk::ICON_SIZE_SMALL_TOOLBAR);
|
||||||
|
|
||||||
w->setVolume(info.volume);
|
w->setVolume(info.volume);
|
||||||
w->muteToggleButton->set_active(info.mute);
|
w->muteToggleButton->set_active(info.mute);
|
||||||
|
|
||||||
|
@ -1046,6 +1051,47 @@ void MainWindow::updateSource(const pa_source_info &info) {
|
||||||
w->updating = false;
|
w->updating = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::setIconFromProplist(Gtk::Image *icon, pa_proplist *l, const char *def) {
|
||||||
|
const char *t;
|
||||||
|
|
||||||
|
if ((t = pa_proplist_gets(l, PA_PROP_MEDIA_ICON_NAME)))
|
||||||
|
goto finish;
|
||||||
|
|
||||||
|
if ((t = pa_proplist_gets(l, PA_PROP_WINDOW_ICON_NAME)))
|
||||||
|
goto finish;
|
||||||
|
|
||||||
|
if ((t = pa_proplist_gets(l, PA_PROP_APPLICATION_ICON_NAME)))
|
||||||
|
goto finish;
|
||||||
|
|
||||||
|
if ((t = pa_proplist_gets(l, PA_PROP_MEDIA_ROLE))) {
|
||||||
|
|
||||||
|
if (strcmp(t, "video") == 0 ||
|
||||||
|
strcmp(t, "phone") == 0)
|
||||||
|
goto finish;
|
||||||
|
|
||||||
|
if (strcmp(t, "music") == 0) {
|
||||||
|
t = "audio";
|
||||||
|
goto finish;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp(t, "game") == 0) {
|
||||||
|
t = "applications-games";
|
||||||
|
goto finish;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp(t, "event") == 0) {
|
||||||
|
t = "dialog-information";
|
||||||
|
goto finish;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
t = def;
|
||||||
|
|
||||||
|
finish:
|
||||||
|
|
||||||
|
icon->set_from_icon_name(t, Gtk::ICON_SIZE_SMALL_TOOLBAR);
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::updateSinkInput(const pa_sink_input_info &info) {
|
void MainWindow::updateSinkInput(const pa_sink_input_info &info) {
|
||||||
SinkInputWidget *w;
|
SinkInputWidget *w;
|
||||||
bool is_new = false;
|
bool is_new = false;
|
||||||
|
@ -1079,6 +1125,8 @@ void MainWindow::updateSinkInput(const pa_sink_input_info &info) {
|
||||||
w->nameLabel->set_label(info.name);
|
w->nameLabel->set_label(info.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setIconFromProplist(w->iconImage, info.proplist, "audio-card");
|
||||||
|
|
||||||
w->setVolume(info.volume);
|
w->setVolume(info.volume);
|
||||||
w->muteToggleButton->set_active(info.mute);
|
w->muteToggleButton->set_active(info.mute);
|
||||||
|
|
||||||
|
@ -1091,6 +1139,11 @@ void MainWindow::updateSinkInput(const pa_sink_input_info &info) {
|
||||||
void MainWindow::updateSourceOutput(const pa_source_output_info &info) {
|
void MainWindow::updateSourceOutput(const pa_source_output_info &info) {
|
||||||
SourceOutputWidget *w;
|
SourceOutputWidget *w;
|
||||||
bool is_new = false;
|
bool is_new = false;
|
||||||
|
const char *app;
|
||||||
|
|
||||||
|
if ((app = pa_proplist_gets(info.proplist, PA_PROP_APPLICATION_ID)))
|
||||||
|
if (strcmp(app, "org.PulseAudio.pavucontrol") == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
if (sourceOutputWidgets.count(info.index))
|
if (sourceOutputWidgets.count(info.index))
|
||||||
w = sourceOutputWidgets[info.index];
|
w = sourceOutputWidgets[info.index];
|
||||||
|
@ -1120,6 +1173,8 @@ void MainWindow::updateSourceOutput(const pa_source_output_info &info) {
|
||||||
w->nameLabel->set_label(info.name);
|
w->nameLabel->set_label(info.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setIconFromProplist(w->iconImage, info.proplist, "audio-input-microphone");
|
||||||
|
|
||||||
if (is_new)
|
if (is_new)
|
||||||
updateDeviceVisibility();
|
updateDeviceVisibility();
|
||||||
|
|
||||||
|
@ -1622,9 +1677,18 @@ int main(int argc, char *argv[]) {
|
||||||
g_assert(m);
|
g_assert(m);
|
||||||
pa_mainloop_api *api = pa_glib_mainloop_get_api(m);
|
pa_mainloop_api *api = pa_glib_mainloop_get_api(m);
|
||||||
g_assert(api);
|
g_assert(api);
|
||||||
context = pa_context_new(api, "PulseAudio Volume Control");
|
|
||||||
|
pa_proplist *proplist = pa_proplist_new();
|
||||||
|
pa_proplist_sets(proplist, PA_PROP_APPLICATION_NAME, "PulseAudio Volume Control");
|
||||||
|
pa_proplist_sets(proplist, PA_PROP_APPLICATION_ID, "org.PulseAudio.pavucontrol");
|
||||||
|
pa_proplist_sets(proplist, PA_PROP_APPLICATION_ICON_NAME, "audio-card");
|
||||||
|
pa_proplist_sets(proplist, PA_PROP_APPLICATION_VERSION, PACKAGE_VERSION);
|
||||||
|
|
||||||
|
context = pa_context_new_with_proplist(api, NULL, proplist);
|
||||||
g_assert(context);
|
g_assert(context);
|
||||||
|
|
||||||
|
pa_proplist_free(proplist);
|
||||||
|
|
||||||
pa_context_set_state_callback(context, context_state_callback, mainWindow);
|
pa_context_set_state_callback(context, context_state_callback, mainWindow);
|
||||||
|
|
||||||
if (pa_context_connect(context, NULL, (pa_context_flags_t) 0, NULL) < 0) {
|
if (pa_context_connect(context, NULL, (pa_context_flags_t) 0, NULL) < 0) {
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue