show proper message boxes in case of error instead of printing just to STDERR

git-svn-id: file:///home/lennart/svn/public/pavucontrol/trunk@4 c17c95f2-f111-0410-90bf-f30a9569010c
This commit is contained in:
Lennart Poettering 2006-04-21 19:24:32 +00:00
parent 296f986a9e
commit c80dbcd3d4
1 changed files with 52 additions and 68 deletions

View File

@ -127,6 +127,17 @@ public:
void updateLabels(); void updateLabels();
}; };
void show_error(const char *txt) {
char buf[256];
snprintf(buf, sizeof(buf), "%s: %s", txt, pa_strerror(pa_context_errno(context)));
Gtk::MessageDialog dialog(buf, false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_CLOSE, true);
dialog.run();
Gtk::Main::quit();
}
/*** ChannelWidget ***/ /*** ChannelWidget ***/
ChannelWidget::ChannelWidget(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& x) : ChannelWidget::ChannelWidget(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& x) :
@ -253,15 +264,11 @@ void SinkWidget::updateChannelVolume(int channel, pa_volume_t v) {
pa_operation* o; pa_operation* o;
if (!(o = pa_context_set_sink_volume_by_index(context, index, &volume, NULL, NULL))) { if (!(o = pa_context_set_sink_volume_by_index(context, index, &volume, NULL, NULL))) {
g_message("pa_context_set_sink_volume_by_index() failed: %s", pa_strerror(pa_context_errno(context))); show_error("pa_context_set_sink_volume_by_index() failed");
goto fail; return;
} }
pa_operation_unref(o); pa_operation_unref(o);
return;
fail:
Gtk::Main::quit();
} }
void SinkWidget::onMuteToggleButton() { void SinkWidget::onMuteToggleButton() {
@ -269,15 +276,11 @@ void SinkWidget::onMuteToggleButton() {
pa_operation* o; pa_operation* o;
if (!(o = pa_context_set_sink_mute_by_index(context, index, muteToggleButton->get_active(), NULL, NULL))) { if (!(o = pa_context_set_sink_mute_by_index(context, index, muteToggleButton->get_active(), NULL, NULL))) {
g_message("pa_context_set_sink_mute_by_index() failed: %s", pa_strerror(pa_context_errno(context))); show_error("pa_context_set_sink_mute_by_index() failed");
goto fail; return;
} }
pa_operation_unref(o); pa_operation_unref(o);
return;
fail:
Gtk::Main::quit();
} }
@ -297,15 +300,12 @@ void SourceWidget::updateChannelVolume(int channel, pa_volume_t v) {
pa_operation* o; pa_operation* o;
if (!(o = pa_context_set_source_volume_by_index(context, index, &volume, NULL, NULL))) { if (!(o = pa_context_set_source_volume_by_index(context, index, &volume, NULL, NULL))) {
g_message("pa_context_set_source_volume_by_index() failed: %s", pa_strerror(pa_context_errno(context))); show_error("pa_context_set_source_volume_by_index() failed");
goto fail; return;
} }
pa_operation_unref(o); pa_operation_unref(o);
return; return;
fail:
Gtk::Main::quit();
} }
void SourceWidget::onMuteToggleButton() { void SourceWidget::onMuteToggleButton() {
@ -313,15 +313,11 @@ void SourceWidget::onMuteToggleButton() {
pa_operation* o; pa_operation* o;
if (!(o = pa_context_set_source_mute_by_index(context, index, muteToggleButton->get_active(), NULL, NULL))) { if (!(o = pa_context_set_source_mute_by_index(context, index, muteToggleButton->get_active(), NULL, NULL))) {
g_message("pa_context_set_source_mute_by_index() failed: %s", pa_strerror(pa_context_errno(context))); show_error("pa_context_set_source_mute_by_index() failed");
goto fail; return;
} }
pa_operation_unref(o); pa_operation_unref(o);
return;
fail:
Gtk::Main::quit();
} }
SinkInputWidget::SinkInputWidget(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& x) : SinkInputWidget::SinkInputWidget(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& x) :
@ -340,15 +336,11 @@ void SinkInputWidget::updateChannelVolume(int channel, pa_volume_t v) {
pa_operation* o; pa_operation* o;
if (!(o = pa_context_set_sink_input_volume(context, index, &volume, NULL, NULL))) { if (!(o = pa_context_set_sink_input_volume(context, index, &volume, NULL, NULL))) {
g_message("pa_context_set_sink_input_volume() failed: %s", pa_strerror(pa_context_errno(context))); show_error("pa_context_set_sink_input_volume() failed");
goto fail; return;
} }
pa_operation_unref(o); pa_operation_unref(o);
return;
fail:
Gtk::Main::quit();
} }
/*** MainWindow ***/ /*** MainWindow ***/
@ -511,45 +503,42 @@ void MainWindow::removeSinkInput(uint32_t index) {
updateLabels(); updateLabels();
} }
void sink_cb(pa_context *c, const pa_sink_info *i, int eol, void *userdata) { void sink_cb(pa_context *, const pa_sink_info *i, int eol, void *userdata) {
MainWindow *w = static_cast<MainWindow*>(userdata); MainWindow *w = static_cast<MainWindow*>(userdata);
if (eol) if (eol)
return; return;
if (!i) { if (!i) {
g_message("sink callback: %s", pa_strerror(pa_context_errno(c))); show_error("Sink callback failure");
Gtk::Main::quit();
return; return;
} }
w->updateSink(*i); w->updateSink(*i);
} }
void source_cb(pa_context *c, const pa_source_info *i, int eol, void *userdata) { void source_cb(pa_context *, const pa_source_info *i, int eol, void *userdata) {
MainWindow *w = static_cast<MainWindow*>(userdata); MainWindow *w = static_cast<MainWindow*>(userdata);
if (eol) if (eol)
return; return;
if (!i) { if (!i) {
g_message("source callback: %s", pa_strerror(pa_context_errno(c))); show_error("Source callback failure");
Gtk::Main::quit();
return; return;
} }
w->updateSource(*i); w->updateSource(*i);
} }
void sink_input_cb(pa_context *c, const pa_sink_input_info *i, int eol, void *userdata) { void sink_input_cb(pa_context *, const pa_sink_input_info *i, int eol, void *userdata) {
MainWindow *w = static_cast<MainWindow*>(userdata); MainWindow *w = static_cast<MainWindow*>(userdata);
if (eol) if (eol)
return; return;
if (!i) { if (!i) {
g_message("sink input callback: %s", pa_strerror(pa_context_errno(c))); show_error("Sink input callback failure");
Gtk::Main::quit();
return; return;
} }
@ -566,8 +555,8 @@ void subscribe_cb(pa_context *c, pa_subscription_event_type_t t, uint32_t index,
else { else {
pa_operation *o; pa_operation *o;
if (!(o = pa_context_get_sink_info_by_index(c, index, sink_cb, w))) { if (!(o = pa_context_get_sink_info_by_index(c, index, sink_cb, w))) {
g_message("pa_context_get_sink_info_by_index() failed: %s", pa_strerror(pa_context_errno(c))); show_error("pa_context_get_sink_info_by_index() failed");
goto fail; return;
} }
pa_operation_unref(o); pa_operation_unref(o);
} }
@ -578,8 +567,8 @@ void subscribe_cb(pa_context *c, pa_subscription_event_type_t t, uint32_t index,
else { else {
pa_operation *o; pa_operation *o;
if (!(o = pa_context_get_source_info_by_index(c, index, source_cb, w))) { if (!(o = pa_context_get_source_info_by_index(c, index, source_cb, w))) {
g_message("pa_context_get_source_info_by_index() failed: %s", pa_strerror(pa_context_errno(c))); show_error("pa_context_get_source_info_by_index() failed");
goto fail; return;
} }
pa_operation_unref(o); pa_operation_unref(o);
} }
@ -590,18 +579,13 @@ void subscribe_cb(pa_context *c, pa_subscription_event_type_t t, uint32_t index,
else { else {
pa_operation *o; pa_operation *o;
if (!(o = pa_context_get_sink_input_info(c, index, sink_input_cb, w))) { if (!(o = pa_context_get_sink_input_info(c, index, sink_input_cb, w))) {
g_message("pa_context_get_sink_input_info() failed: %s", pa_strerror(pa_context_errno(c))); show_error("pa_context_get_sink_input_info() failed");
goto fail; return;
} }
pa_operation_unref(o); pa_operation_unref(o);
} }
break; break;
} }
return;
fail:
Gtk::Main::quit();
} }
void context_state_callback(pa_context *c, void *userdata) { void context_state_callback(pa_context *c, void *userdata) {
@ -622,26 +606,26 @@ void context_state_callback(pa_context *c, void *userdata) {
pa_context_set_subscribe_callback(c, subscribe_cb, w); pa_context_set_subscribe_callback(c, subscribe_cb, w);
if (!(o = pa_context_subscribe(c, (pa_subscription_mask_t) (PA_SUBSCRIPTION_MASK_SINK|PA_SUBSCRIPTION_MASK_SOURCE|PA_SUBSCRIPTION_MASK_SINK_INPUT), NULL, NULL))) { if (!(o = pa_context_subscribe(c, (pa_subscription_mask_t) (PA_SUBSCRIPTION_MASK_SINK|PA_SUBSCRIPTION_MASK_SOURCE|PA_SUBSCRIPTION_MASK_SINK_INPUT), NULL, NULL))) {
g_message("pa_context_subscribe() failed: %s", pa_strerror(pa_context_errno(c))); show_error("pa_context_subscribe() failed");
goto fail; return;
} }
pa_operation_unref(o); pa_operation_unref(o);
if (!(o = pa_context_get_sink_info_list(c, sink_cb, w))) { if (!(o = pa_context_get_sink_info_list(c, sink_cb, w))) {
g_message("pa_context_get_sink_info_list() failed: %s", pa_strerror(pa_context_errno(c))); show_error("pa_context_get_sink_info_list() failed");
goto fail; return;
} }
pa_operation_unref(o); pa_operation_unref(o);
if (!(o = pa_context_get_source_info_list(c, source_cb, w))) { if (!(o = pa_context_get_source_info_list(c, source_cb, w))) {
g_message("pa_context_get_source_info_list() failed: %s", pa_strerror(pa_context_errno(c))); show_error("pa_context_get_source_info_list() failed");
goto fail; return;
} }
pa_operation_unref(o); pa_operation_unref(o);
if (!(o = pa_context_get_sink_input_info_list(c, sink_input_cb, w))) { if (!(o = pa_context_get_sink_input_info_list(c, sink_input_cb, w))) {
g_message("pa_context_get_sink_input_info_list() failed: %s", pa_strerror(pa_context_errno(c))); show_error("pa_context_get_sink_input_info_list() failed");
goto fail; return;
} }
pa_operation_unref(o); pa_operation_unref(o);
@ -649,19 +633,14 @@ void context_state_callback(pa_context *c, void *userdata) {
} }
case PA_CONTEXT_FAILED: case PA_CONTEXT_FAILED:
g_message("Connection failed: %s", pa_strerror(pa_context_errno(c))); show_error("Connection failed");
goto fail; return;
case PA_CONTEXT_TERMINATED: case PA_CONTEXT_TERMINATED:
default: default:
goto fail;
}
return;
fail:
Gtk::Main::quit(); Gtk::Main::quit();
return;
}
} }
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
@ -677,11 +656,16 @@ int main(int argc, char *argv[]) {
g_assert(context); g_assert(context);
pa_context_set_state_callback(context, context_state_callback, mainWindow); pa_context_set_state_callback(context, context_state_callback, mainWindow);
pa_context_connect(context, NULL, (pa_context_flags_t) 0, NULL);
if (pa_context_connect(context, NULL, (pa_context_flags_t) 0, NULL) < 0) {
show_error("Connection failed");
goto finish;
}
Gtk::Main::run(*mainWindow); Gtk::Main::run(*mainWindow);
delete mainWindow; delete mainWindow;
finish:
pa_context_unref(context); pa_context_unref(context);
pa_glib_mainloop_free(m); pa_glib_mainloop_free(m);
} }