Added a real error dialog

This commit is contained in:
Pierre Pronchery 2010-07-04 22:01:14 +00:00
parent da02e3234e
commit cf307ff86d

View File

@ -110,6 +110,7 @@ static DesktopMenubar _mixer_menubar[] =
/* prototypes */ /* prototypes */
static int _mixer_error(Mixer * mixer, char const * message, int ret);
static mixer_ctrl_t * _mixer_get(Mixer * mixer, int dev); static mixer_ctrl_t * _mixer_get(Mixer * mixer, int dev);
@ -148,8 +149,7 @@ Mixer * mixer_new(char const * device, MixerOrientation orientation)
mixer->mc_cnt = 0; mixer->mc_cnt = 0;
if(mixer->fd < 0) if(mixer->fd < 0)
{ {
fprintf(stderr, "%s: %s: %s\n", PACKAGE, device, _mixer_error(NULL, device, 0);
strerror(errno));
mixer_delete(mixer); mixer_delete(mixer);
return NULL; return NULL;
} }
@ -393,9 +393,7 @@ int mixer_set_enum(Mixer * mixer, GtkWidget * widget)
#endif #endif
if(ioctl(mixer->fd, AUDIO_MIXER_WRITE, p) == 0) if(ioctl(mixer->fd, AUDIO_MIXER_WRITE, p) == 0)
return 0; return 0;
fprintf(stderr, "%s: %s: %s\n", PACKAGE, "AUDIO_MIXER_WRITE", return _mixer_error(mixer, "AUDIO_MIXER_WRITE", 1);
strerror(errno));
return 1;
} }
@ -429,9 +427,7 @@ int mixer_set_value(Mixer * mixer, GtkWidget * widget, gdouble value)
#endif #endif
if(ioctl(mixer->fd, AUDIO_MIXER_WRITE, p) == 0) if(ioctl(mixer->fd, AUDIO_MIXER_WRITE, p) == 0)
return 0; return 0;
fprintf(stderr, "%s: %s: %s\n", PACKAGE, "AUDIO_MIXER_WRITE", return _mixer_error(mixer, "AUDIO_MIXER_WRITE", 1);
strerror(errno));
return 1;
} }
@ -474,8 +470,7 @@ void mixer_properties(Mixer * mixer)
} }
if(ioctl(mixer->fd, AUDIO_GETDEV, &ad) != 0) if(ioctl(mixer->fd, AUDIO_GETDEV, &ad) != 0)
{ {
fprintf(stderr, "%s: %s: %s\n", PACKAGE, "AUDIO_GETDEV", _mixer_error(mixer, "AUDIO_GETDEV", 1);
strerror(errno));
return; return;
} }
mixer->properties = gtk_dialog_new_with_buttons(_("Mixer properties"), mixer->properties = gtk_dialog_new_with_buttons(_("Mixer properties"),
@ -576,6 +571,35 @@ void mixer_show_class(Mixer * mixer, char const * name)
/* private */ /* private */
/* functions */ /* functions */
/* mixer_error */
static int _error_text(char const * message, int ret);
static int _mixer_error(Mixer * mixer, char const * message, int ret)
{
GtkWidget * dialog;
char const * error;
if(mixer == NULL)
return _error_text(message, ret);
error = strerror(errno);
dialog = gtk_message_dialog_new(GTK_WINDOW(mixer->window),
GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE, "%s", _("Error"));
gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
"%s: %s", message, error);
gtk_window_set_title(GTK_WINDOW(dialog), _("Error"));
gtk_dialog_run(GTK_DIALOG(dialog));
return ret;
}
static int _error_text(char const * message, int ret)
{
fputs(PACKAGE ": ", stderr);
perror(message);
return ret;
}
/* mixer_get */ /* mixer_get */
static mixer_ctrl_t * _mixer_get(Mixer * mixer, int dev) static mixer_ctrl_t * _mixer_get(Mixer * mixer, int dev)
{ {
@ -598,8 +622,7 @@ static mixer_ctrl_t * _mixer_get(Mixer * mixer, int dev)
p->un.value.num_channels = md.un.v.num_channels; p->un.value.num_channels = md.un.v.num_channels;
if(ioctl(mixer->fd, AUDIO_MIXER_READ, p) != 0) if(ioctl(mixer->fd, AUDIO_MIXER_READ, p) != 0)
{ {
fprintf(stderr, "%s: %s: %s\n", PACKAGE, "AUDIO_MIXER_READ", _mixer_error(mixer, "AUDIO_MIXER_READ", 0);
strerror(errno));
free(p); free(p);
return NULL; return NULL;
} }