diff options
author | Benjamin Franzke <benjaminfranzke@googlemail.com> | 2011-10-21 23:07:34 +0200 |
---|---|---|
committer | Benjamin Franzke <benjaminfranzke@googlemail.com> | 2011-10-21 23:16:24 +0200 |
commit | 7f3831b86ab19512fab51a4c7ca5bcffdde7ce03 (patch) | |
tree | 581ab3ed916bb043b063222fa87d9553a6da76d1 | |
parent | 0fbe244eba08f748645233fef6f6556fb3d70e5e (diff) | |
download | pa-sink-ctl-7f3831b86ab19512fab51a4c7ca5bcffdde7ce03.tar.gz pa-sink-ctl-7f3831b86ab19512fab51a4c7ca5bcffdde7ce03.tar.bz2 pa-sink-ctl-7f3831b86ab19512fab51a4c7ca5bcffdde7ce03.zip |
Fix selection when moving an input around
We may not get the update for the moved index immediately,
but we calculate the new position for the selection
on redraw. So schedule redraw until we get the update, when we
move around.
-rw-r--r-- | src/interface.c | 1 | ||||
-rw-r--r-- | src/pa-sink-ctl.c | 9 | ||||
-rw-r--r-- | src/pa-sink-ctl.h | 1 |
3 files changed, 9 insertions, 2 deletions
diff --git a/src/interface.c b/src/interface.c index 8c1f0b9..f48363b 100644 --- a/src/interface.c +++ b/src/interface.c @@ -332,6 +332,7 @@ interface_get_input(GIOChannel *source, GIOCondition condition, gpointer data) sink = g_list_nth_data(ctx->sink_list, ctx->chooser_sink); /* ctx->chooser_input needs to be derived from $ctx->selected_index */ ctx->chooser_input = SELECTED_UNKNOWN; + ctx->block_for_selected_index = TRUE; pa_operation_unref(pa_context_move_sink_input_by_index(ctx->context, ctx->selected_index, sink->index, change_callback, NULL)); diff --git a/src/pa-sink-ctl.c b/src/pa-sink-ctl.c index e0f91c7..8e0be30 100644 --- a/src/pa-sink-ctl.c +++ b/src/pa-sink-ctl.c @@ -55,12 +55,16 @@ get_sink_input_info_callback(pa_context *c, const pa_sink_input_info *i, gint is } if (is_last) { - print_sink_list(ctx); + if (!ctx->block_for_selected_index) + print_sink_list(ctx); return; } if (!(i->client != PA_INVALID_INDEX)) return; + if (ctx->block_for_selected_index && i->index == ctx->selected_index) + ctx->block_for_selected_index = FALSE; + sink_input_info sink_input = { .index = i->index, .sink = i->sink, @@ -95,7 +99,8 @@ get_sink_info_callback(pa_context *c, const pa_sink_info *i, gint is_last, gpoin } if (is_last) { - print_sink_list(ctx); + if (!ctx->block_for_selected_index) + print_sink_list(ctx); return; } diff --git a/src/pa-sink-ctl.h b/src/pa-sink-ctl.h index 699c21e..82ee1f6 100644 --- a/src/pa-sink-ctl.h +++ b/src/pa-sink-ctl.h @@ -31,6 +31,7 @@ struct context { GList *input_list; gchar *status; + gboolean block_for_selected_index; }; void |