summaryrefslogtreecommitdiff
path: root/alsamixer
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2005-06-15 12:49:07 +0000
committerTakashi Iwai <tiwai@suse.de>2005-06-15 12:49:07 +0000
commit11f789c4f9c8c44e6403aa22db0a5f10a28e085f (patch)
treeb9af3f95b21978714d6d0a5ddf66141222e1f0dd /alsamixer
parent7b0c847f1a50dabee910f663d9d279f1f0c9564b (diff)
Fix unexpected abort of alsamixer
Fixed unexpected abort of alsamixer when no playback or capture elements are available. Also fixed the wrong use of temporary array in displaying item name.
Diffstat (limited to 'alsamixer')
-rw-r--r--alsamixer/alsamixer.c69
1 files changed, 32 insertions, 37 deletions
diff --git a/alsamixer/alsamixer.c b/alsamixer/alsamixer.c
index 694e3e9..2b51fb7 100644
--- a/alsamixer/alsamixer.c
+++ b/alsamixer/alsamixer.c
@@ -721,14 +721,9 @@ static void draw_blank(int x, int y, int lines)
mvaddstr (y - i, x, " ");
}
-/* show the information of the focused item */
-static void display_item_info(int elem_index, snd_mixer_selem_id_t *sid, char *extra_info)
+/* show the current view mode */
+static void display_view_info(void)
{
- char string[64], idxstr[10];
- int idx;
- int i, xlen = mixer_max_x - 8;
- if (xlen > sizeof(string) - 1)
- xlen = sizeof(string) - 1;
mixer_dc (DC_PROMPT);
mvaddstr (3, 2, "View: Playback Capture All ");
mixer_dc (DC_TEXT);
@@ -743,6 +738,16 @@ static void display_item_info(int elem_index, snd_mixer_selem_id_t *sid, char *e
mvaddstr (3, 27, "[All]");
break;
}
+}
+
+/* show the information of the focused item */
+static void display_item_info(int elem_index, snd_mixer_selem_id_t *sid, char *extra_info)
+{
+ char string[64], idxstr[10];
+ int idx;
+ int i, xlen = mixer_max_x - 8;
+ if (xlen > sizeof(string) - 1)
+ xlen = sizeof(string) - 1;
mixer_dc (DC_PROMPT);
mvaddstr (4, 2, "Item: ");
mixer_dc (DC_TEXT);
@@ -788,7 +793,7 @@ static void display_enum_list(snd_mixer_elem_t *elem, int y, int x)
{
int cury, ch, err;
- draw_blank(x, y, mixer_cbar_height + 5);
+ draw_blank(x, y, mixer_cbar_height + (mixer_view == VIEW_PLAYBACK ? 5 : 6));
cury = y - 4;
for (ch = 0; ch < 2; ch++) {
@@ -962,26 +967,21 @@ mixer_update_cbar (int elem_index)
snd_mixer_selem_get_playback_switch(elem, chn_right, &swr);
extra_info = !swl && !swr ? " [Off]" : "";
}
- if (mixer_type[elem_index] == MIXER_ELEM_ENUM) {
- while (1) {
- unsigned int eidx, err, length;
- char tmp[50];
- tmp[0]=' ';
- tmp[1]='[';
- err = snd_mixer_selem_get_enum_item(elem, 0, &eidx);
- if (err < 0)
- break;
- if (snd_mixer_selem_get_enum_item_name(elem, eidx, sizeof(tmp) - 3, tmp+2) < 0)
- break;
- tmp[48] = 0;
+ if (type == MIXER_ELEM_ENUM) {
+ unsigned int eidx, length;
+ char tmp[50];
+ tmp[0]=' ';
+ tmp[1]='[';
+ if (! snd_mixer_selem_get_enum_item(elem, 0, &eidx) &&
+ ! snd_mixer_selem_get_enum_item_name(elem, eidx, sizeof(tmp) - 3, tmp+2)) {
+ tmp[48] = 0;
length=strlen(tmp);
tmp[length]=']';
tmp[length+1]=0;
- extra_info = tmp;
- break;
- }
+ display_item_info(elem_index, sid, tmp);
+ } else
+ display_item_info(elem_index, sid, extra_info);
}
- display_item_info(elem_index, sid, extra_info);
}
/* get channel bar position
@@ -1078,6 +1078,7 @@ mixer_update_cbars (void)
static int o_y = 0;
int i, x, y;
+ display_view_info();
if (!mixer_cbar_get_pos (mixer_focus_elem, &x, &y))
{
if (mixer_focus_elem < mixer_first_vis_elem)
@@ -1932,6 +1933,7 @@ mixer_iteration (void)
/* ignore */
break;
case 27: /* Escape */
+ case KEY_F (10):
finished = 1;
key = 0;
break;
@@ -1963,11 +1965,6 @@ mixer_iteration (void)
mixer_view = mixer_view_saved = VIEW_PLAYBACK;
mixer_changed_state=1;
mixer_reinit ();
- if (mixer_n_view_elems == 0) {
- mixer_view = mixer_view_saved = VIEW_CAPTURE;
- mixer_changed_state=1;
- mixer_reinit ();
- }
}
key = 0;
break;
@@ -1978,11 +1975,6 @@ mixer_iteration (void)
mixer_view = mixer_view_saved = VIEW_CAPTURE;
mixer_changed_state=1;
mixer_reinit ();
- if (mixer_n_view_elems == 0) {
- mixer_view = mixer_view_saved = VIEW_PLAYBACK;
- mixer_changed_state=1;
- mixer_reinit ();
- }
}
key = 0;
break;
@@ -2190,7 +2182,10 @@ mixer_iteration (void)
if (old_view != mixer_view)
mixer_clear (FALSE);
- mixer_focus_elem = CLAMP (mixer_focus_elem, 0, mixer_n_view_elems - 1);
+ if (! mixer_n_view_elems)
+ mixer_focus_elem = 0;
+ else
+ mixer_focus_elem = CLAMP (mixer_focus_elem, 0, mixer_n_view_elems - 1);
return finished;
}
@@ -2270,7 +2265,7 @@ main (int argc,
mixer_init ();
mixer_reinit ();
- if (mixer_n_view_elems == 0) {
+ if (mixer_n_elems == 0) {
fprintf(stderr, "No mixer elems found\n");
mixer_abort (ERR_NONE, "", 0);
}
@@ -2321,4 +2316,4 @@ main (int argc,
while (!mixer_iteration ());
mixer_abort (ERR_NONE, "", 0);
-};
+}