When we get a notification that an element has been removed, we have to
recreate our internal control representation to avoid accessing freed
memory. (And the checking for SND_CTL_EVENT_MASK_REMOVE should actually
be done correctly while we're at it.)
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
A lot of reports that alsamixer crashes in X terminal when the PulseAudio
CTL plugin is activated were entered to the tracking systems.
I figured that there is a linking clash for the shutdown() function.
The shutdown() function in glibc is socket related, but the alsamixer code
redefines this function and appearently that under some linking
circumstances - which PA client invokes during the runtime dynamic linking
- the wrong function is called.
This patch, for safety, renames the shutdown() function from alsamixer
to app_shutdown(), but it might make sense to figure the real linking
culprit to avoid future surprises.
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
exp10 is a glibc extension, which isn't supported on uClibc. Luckily,
exp10() is trivial to compute based on exp(), so add a wrapper for
the uClibc case.
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Instead of mapping the raw volume values linearly to the screen, use
a mapping where the bar height is proportional to the audible volume,
i.e., where the amplitude is the cube of the bar height.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
For controls with a big range, stepping through all values can become
tedious and make it impossible to adjust the volume easily. Therefore,
ensure that all steps are big enough so that the full range has at most
one hundred steps.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Ensure that control volume values are in their allowed range; otherwise,
the displayed values could be outside the range 0..100 and mess up the
layout.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
The attempt to divide by max-min fails if a control has only one valid
value. In this case, adjust the maximum so that the computation can
succeed; the control will look like 0%.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Fix the volume bar color selection logic so that the current attribute
is used for inactive controls.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Rename the attr variable because it contains not only the character's
attributes but also the character itself.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
When a multi-column character would straddle the left window border of
a text box, we have to take the inserted space character into account
when we compute how many characters fit into the rest of the line.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
For multichannel mixer controls, add the channel name to each screen
control.
Also make some other small changes.
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
* Added 'j' as an alias for KEY_DOWN
* Added 'k' as an alias for KEY_UP
Signed-off-by: Simon Hengel <simon.hengel@gmx.net>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
By doing this we move them from the .data section to .rodata setion,
or from .data.rel to .data.rel.ro.
The .rodata section is mapped directly from the on-disk file, which is
always a save, while .data.rel.ro is mapped directly when using
prelink, which is a save in a lot of cases.
Signed-off-by: Diego E. 'Flameeyes' Pettenò <flameeyes@gmail.com>
The recent ncurses package provides ncurses*-config program to give the
proper cflags and libs. Let's use them if available.
Right now, the ncurses version (5) is hard-coded. It should be better
to be variable as well, but it'd be messy. Hope the ncurses version won't
change rapidly.
DONE: If alsa-lib and alsa-driver support it,
alsamixer now displays dB gain levels for all mixer controls.
TODO: Implement alsa-lib and alsa-driver parts.
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.
alsamixer shows all view names in the View: line so that user
can understand what it means. The currently used view is
shown with brackets and emphasized.