From df2236db9ffc2602293d1f8af542c3246c9c370d Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Wed, 31 Aug 2016 16:55:19 -0400 Subject: [PATCH] gui/sidebar: Add a function for selecting the default playlist Signed-off-by: Anna Schumaker --- gui/playlist.c | 31 ++----------------------------- gui/sidebar.c | 20 ++++++++++++++++++++ include/gui/sidebar.h | 3 +++ tests/gui/sidebar.c | 11 ++++++++++- 4 files changed, 35 insertions(+), 30 deletions(-) diff --git a/gui/playlist.c b/gui/playlist.c index ad457b3b..42a9e73a 100644 --- a/gui/playlist.c +++ b/gui/playlist.c @@ -15,38 +15,11 @@ static bool p_init_done = false; static void __playlist_update_sizes(struct queue *); -static inline void __playlist_filter_get_iter(GtkTreeIter *iter, GtkTreeIter *child) -{ - gtk_tree_model_filter_convert_iter_to_child_iter(gui_sidebar_filter(), - child, iter); -} - void __playlist_row_activated(GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *col, gpointer data) { - enum playlist_type_t type; - GtkTreeIter iter, child; - GtkTreeModel *model; - struct queue *queue; - unsigned int id; - gchar *name; - - type = settings_get("core.playlist.cur.type"); - id = settings_get("core.playlist.cur.id"); - - model = GTK_TREE_MODEL(gui_sidebar_filter()); - gtk_tree_model_get_iter(model, &iter, path); - __playlist_filter_get_iter(&iter, &child); - - name = gui_sidebar_iter_name(&child); - playlist_select(gui_sidebar_iter_type(&child), name); - gui_sidebar_iter_update(&child); - g_free(name); - - name = playlist_get_name(type, id); - queue = playlist_get_queue(type, name); - __playlist_update_sizes(queue); - g_free(name); + gui_sidebar_filter_path_select(path); + __playlist_update_sizes(&playlist_cur()->pl_queue); } static bool __playlist_queue_set_size(struct queue *queue, GtkTreeIter *iter) diff --git a/gui/sidebar.c b/gui/sidebar.c index a8f3caf5..2511d9c1 100644 --- a/gui/sidebar.c +++ b/gui/sidebar.c @@ -297,6 +297,26 @@ void gui_sidebar_iter_update(GtkTreeIter *iter) g_free(text); } +void gui_sidebar_filter_path_select(GtkTreePath *path) +{ + GtkTreeModel *model = GTK_TREE_MODEL(gui_sidebar_filter()); + enum playlist_type_t type; + GtkTreeIter iter, child; + gchar *name; + + gtk_tree_model_get_iter(model, &iter, path); + __gui_sidebar_filter_iter_convert(&iter, &child); + + type = gui_sidebar_iter_type(&child); + if (type >= PL_MAX_TYPE) + return; + + name = gui_sidebar_iter_name(&child); + if (playlist_select(type, name)) + gui_sidebar_iter_update(&child); + g_free(name); +} + gboolean gui_sidebar_iter_find(GtkTreeIter *iter, const gchar *name, enum playlist_type_t type) { diff --git a/include/gui/sidebar.h b/include/gui/sidebar.h index 4eeae4c3..184e9c89 100644 --- a/include/gui/sidebar.h +++ b/include/gui/sidebar.h @@ -41,6 +41,9 @@ void gui_sidebar_iter_append_child(GtkTreeIter *, struct playlist *, /* Called to update the playlist at the current iterator. */ void gui_sidebar_iter_update(GtkTreeIter *); +/* Called to set the playlist at the given iterator as the default. */ +void gui_sidebar_filter_path_select(GtkTreePath *); + /* * Called to find a playlist with the given name and type, * starting from the current iterator position. diff --git a/tests/gui/sidebar.c b/tests/gui/sidebar.c index f1a9d6f1..22bd18bf 100644 --- a/tests/gui/sidebar.c +++ b/tests/gui/sidebar.c @@ -114,10 +114,14 @@ static void test_sidebar_selection() g_assert_cmpuint(gtk_tree_model_iter_n_children(filter, NULL), ==, 6); playlist_new(PL_LIBRARY, "tests/Music/Hyrule Symphony"); while (idle_run_task()) {} - playlist_add(PL_SYSTEM, "History", track_get(0)); + playlist_add(PL_SYSTEM, "History", track_get(0)); + playlist_add(PL_SYSTEM, "Favorites", track_get(0)); gtk_tree_model_filter_refilter(gui_sidebar_filter()); g_assert_cmpuint(gtk_tree_model_iter_n_children(filter, NULL), ==, 8); + playlist_set_random(PL_SYSTEM, "Collection", true); + g_assert_true(playlist_select(PL_SYSTEM, "Favorites")); + g_assert(playlist_cur() == playlist_get(PL_SYSTEM, "Favorites")); g_assert_true(gui_sidebar_iter_first(&iter)); path = gtk_tree_model_get_path(gui_sidebar_model(), &iter); @@ -150,7 +154,12 @@ static void test_sidebar_selection() g_assert_false(gtk_widget_get_sensitive( GTK_WIDGET(random))); } + + gui_sidebar_filter_path_select(path); + g_assert(playlist_cur() == playlist_get(PL_SYSTEM, "Collection")); + gtk_tree_selection_unselect_all(selection); + gui_sidebar_iter_next(&iter); gtk_tree_path_next(path); } gtk_tree_path_free(path);