diff options
author | jstebbins <[email protected]> | 2013-01-29 17:27:04 +0000 |
---|---|---|
committer | jstebbins <[email protected]> | 2013-01-29 17:27:04 +0000 |
commit | d791f114c99e93f41f637cd8dda3789e3dda61d4 (patch) | |
tree | 56a1da4a77d39a98b7e51ee6d0658c2f37365c31 /gtk | |
parent | 2ecc0d7c5d120529f960a72938b5a90499624ef6 (diff) |
LinGui: fix gtk3 subtitle and audio list issue
The wrong subtitle or audio track was sometimes getting removed from the
list when the remove button was pressed.
The sequence of widget callbacks changed is such a way as to require some
small rearrangement of code.
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@5222 b64f7644-9d1e-0410-96f1-a4d463321fa5
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/src/audiohandler.c | 17 | ||||
-rw-r--r-- | gtk/src/subtitlehandler.c | 23 |
2 files changed, 28 insertions, 12 deletions
diff --git a/gtk/src/audiohandler.c b/gtk/src/audiohandler.c index d7171c3d4..e09e7fcbf 100644 --- a/gtk/src/audiohandler.c +++ b/gtk/src/audiohandler.c @@ -1206,18 +1206,25 @@ audio_remove_clicked_cb(GtkWidget *widget, signal_user_data_t *ud) indices = gtk_tree_path_get_indices (treepath); row = indices[0]; gtk_tree_path_free(treepath); - // Remove the selected item - gtk_list_store_remove (GTK_LIST_STORE(store), &iter); - // remove from audio settings list if (row < 0) return; - widget = GHB_WIDGET (ud->builder, "audio_add"); - gtk_widget_set_sensitive(widget, TRUE); + audio_list = ghb_settings_get_value(ud->settings, "audio_list"); if (row >= ghb_array_len(audio_list)) return; + + // Update our settings list before removing the row from the + // treeview. Removing from the treeview sometimes provokes an + // immediate selection change, so the list needs to be up to date + // when this happens. GValue *old = ghb_array_get_nth(audio_list, row); ghb_value_free(old); ghb_array_remove(audio_list, row); + + // Remove the selected item + gtk_list_store_remove (GTK_LIST_STORE(store), &iter); + // remove from audio settings list + widget = GHB_WIDGET (ud->builder, "audio_add"); + gtk_widget_set_sensitive(widget, TRUE); } } diff --git a/gtk/src/subtitlehandler.c b/gtk/src/subtitlehandler.c index 5a6ca8864..121654ac5 100644 --- a/gtk/src/subtitlehandler.c +++ b/gtk/src/subtitlehandler.c @@ -1348,25 +1348,34 @@ subtitle_remove_clicked_cb(GtkWidget *widget, signal_user_data_t *ud) { gtk_tree_selection_select_iter (selection, &nextIter); } + // Get the row number treepath = gtk_tree_model_get_path (store, &iter); indices = gtk_tree_path_get_indices (treepath); row = indices[0]; gtk_tree_path_free(treepath); - // Remove the selected item - gtk_list_store_remove (GTK_LIST_STORE(store), &iter); - // remove from subtitle settings list if (row < 0) return; - widget = GHB_WIDGET (ud->builder, "subtitle_add"); - gtk_widget_set_sensitive(widget, TRUE); - widget = GHB_WIDGET (ud->builder, "srt_add"); - gtk_widget_set_sensitive(widget, TRUE); + subtitle_list = ghb_settings_get_value(ud->settings, "subtitle_list"); if (row >= ghb_array_len(subtitle_list)) return; + + // Update our settings list before removing the row from the + // treeview. Removing from the treeview sometimes provokes an + // immediate selection change, so the list needs to be up to date + // when this happens. GValue *old = ghb_array_get_nth(subtitle_list, row); ghb_value_free(old); ghb_array_remove(subtitle_list, row); + + // Remove the selected item + gtk_list_store_remove (GTK_LIST_STORE(store), &iter); + // remove from subtitle settings list + widget = GHB_WIDGET (ud->builder, "subtitle_add"); + gtk_widget_set_sensitive(widget, TRUE); + widget = GHB_WIDGET (ud->builder, "srt_add"); + gtk_widget_set_sensitive(widget, TRUE); + ghb_live_reset(ud); } } |