summaryrefslogtreecommitdiff
path: root/src/interface.c
diff options
context:
space:
mode:
authorben <benjaminfranzke@googlemail.com>2010-07-13 16:28:36 +0200
committerben <benjaminfranzke@googlemail.com>2010-07-13 16:28:36 +0200
commit803b7b24229c42cd9d5eee8c1da166382a321d5c (patch)
tree14a9c3f52e3134ff7a57deef85f504f106e140fb /src/interface.c
parent54c748fc6c1ceb0e3602482ab29f1e4e523d0b77 (diff)
downloadpa-sink-ctl-803b7b24229c42cd9d5eee8c1da166382a321d5c.tar.gz
pa-sink-ctl-803b7b24229c42cd9d5eee8c1da166382a321d5c.tar.bz2
pa-sink-ctl-803b7b24229c42cd9d5eee8c1da166382a321d5c.zip
sink_inputs volume made changable
Diffstat (limited to 'src/interface.c')
-rw-r--r--src/interface.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/src/interface.c b/src/interface.c
index 5492fbf..f46f6dc 100644
--- a/src/interface.c
+++ b/src/interface.c
@@ -149,6 +149,8 @@ void get_input(void)
int c;
// uint32_t sink;
c = wgetch(menu_win);
+ int volume_mult = 0;
+
switch (c) {
case KEY_UP:
if (chooser_input == -1 && chooser_sink > 0) {
@@ -170,9 +172,29 @@ void get_input(void)
break;
case KEY_LEFT:
- break;
-
+ volume_mult = -1;
case KEY_RIGHT:
+ if (volume_mult == 0)
+ volume_mult = 1;
+ if (chooser_input == -1)
+ break;
+ sink_input_info *input = sink_list[chooser_sink]->input_list[chooser_input];
+ pa_cvolume volume;
+ volume.channels = input->channels;
+
+ int input_vol = input->vol + 2 * volume_mult * (VOLUME_MAX / 100);
+#define CHECK_MIN_MAX(val, min, max) ((val) > (max) ? (max) : ((val) < (min) ? (min) : (val)))
+ pa_volume_t new_vol = CHECK_MIN_MAX(input_vol, 0, VOLUME_MAX);
+#undef CHECK_MIN_MAX
+ for (int i = 0; i < volume.channels; ++i)
+ volume.values[i] = new_vol;
+
+ pa_operation_unref(pa_context_set_sink_input_volume(context,
+ input->index,
+ &volume,
+ change_callback,
+ NULL));
+ return;
break;
case 32: