From 7f3831b86ab19512fab51a4c7ca5bcffdde7ce03 Mon Sep 17 00:00:00 2001 From: Benjamin Franzke Date: Fri, 21 Oct 2011 23:07:34 +0200 Subject: 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. --- src/interface.c | 1 + src/pa-sink-ctl.c | 9 +++++++-- 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 -- cgit