summaryrefslogtreecommitdiff
path: root/alsamixer/mixer_widget.c
diff options
context:
space:
mode:
Diffstat (limited to 'alsamixer/mixer_widget.c')
-rw-r--r--alsamixer/mixer_widget.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/alsamixer/mixer_widget.c b/alsamixer/mixer_widget.c
index c8ca156..adb4568 100644
--- a/alsamixer/mixer_widget.c
+++ b/alsamixer/mixer_widget.c
@@ -318,7 +318,7 @@ static void change_volume_to_percent(struct control *control, int value, unsigne
set_func(control->elem, control->volume_channels[1], min + (max - min) * value / 100);
}
-static void change_volume_relative(struct control *control, int delta, unsigned int channels)
+static void change_volume_relative(struct control *control, long delta, unsigned int channels)
{
int (*get_range_func)(snd_mixer_elem_t *, long *, long *);
int (*get_func)(snd_mixer_elem_t *, snd_mixer_selem_channel_id_t, long *);
@@ -352,6 +352,8 @@ static void change_volume_relative(struct control *control, int delta, unsigned
if (err < 0)
return;
}
+ if (max - min > 100)
+ delta = (delta * (max - min) + (delta > 0 ? 99 : -99)) / 100;
if (channels & LEFT) {
value = left + delta;
if (value < min)