From 846f7df9c18c78c2abd81cd59c208a3ae3e58cd6 Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Sat, 10 Sep 2016 14:03:11 -0400 Subject: [PATCH] gui/sidebar: Add a gui_sidebar_iter_playlist() function It's frequently useful to get the playlist directly, rather than looking up type and name first. Let's add a function to do just that! Signed-off-by: Anna Schumaker --- gui/sidebar.c | 36 ++++++++++++++++++------------------ include/gui/sidebar.h | 3 +++ tests/gui/sidebar.c | 2 ++ 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/gui/sidebar.c b/gui/sidebar.c index 5e617a7e..82bac0c0 100644 --- a/gui/sidebar.c +++ b/gui/sidebar.c @@ -126,22 +126,15 @@ void __gui_sidebar_selection_changed(GtkTreeSelection *selection, gpointer data) GtkTreeModel *model = GTK_TREE_MODEL(gui_sidebar_filter()); bool active = false, sensitive = false; struct playlist *playlist = NULL; - enum playlist_type_t type; GtkTreeIter iter, child; - gchar *name; if (gtk_tree_selection_get_selected(selection, &model, &iter)) { __gui_sidebar_filter_iter_convert(&iter, &child); - name = gui_sidebar_iter_name(&child); - type = gui_sidebar_iter_type(&child); - - playlist = playlist_get(type, name); - active = playlist_get_random(type, name); - sensitive = (type != PL_SYSTEM) || - !string_match(name, "History"); - - g_free(name); + playlist = gui_sidebar_iter_playlist(&child); + active = playlist_get_random(playlist->pl_type, + playlist->pl_name); + sensitive = (playlist != playlist_get(PL_SYSTEM, "History")); } gui_treeview_set_playlist(playlist); @@ -251,6 +244,16 @@ enum playlist_type_t gui_sidebar_iter_type(GtkTreeIter *iter) return type; } +struct playlist *gui_sidebar_iter_playlist(GtkTreeIter *iter) +{ + enum playlist_type_t type = gui_sidebar_iter_type(iter); + gchar *name = gui_sidebar_iter_name(iter); + struct playlist *playlist = playlist_get(type, name); + + g_free(name); + return playlist; +} + void gui_sidebar_iter_add(GtkTreeIter *iter, struct playlist *playlist, const gchar *image) { @@ -291,17 +294,14 @@ void gui_sidebar_iter_append_child(GtkTreeIter *iter, struct playlist *playlist, void gui_sidebar_iter_update(GtkTreeIter *iter) { - enum playlist_type_t type = gui_sidebar_iter_type(iter); - gchar *name, *text; + struct playlist *playlist = gui_sidebar_iter_playlist(iter); + gchar *text; - if (type >= PL_MAX_TYPE) + if (!playlist) return; - name = gui_sidebar_iter_name(iter); - text = __gui_sidebar_size_str(playlist_get(type, name)); + text = __gui_sidebar_size_str(playlist); gtk_tree_store_set(gui_sidebar_store(), iter, SB_NAME, text, -1); - - g_free(name); g_free(text); } diff --git a/include/gui/sidebar.h b/include/gui/sidebar.h index c686da77..e77cd3f8 100644 --- a/include/gui/sidebar.h +++ b/include/gui/sidebar.h @@ -27,6 +27,9 @@ gchar *gui_sidebar_iter_name(GtkTreeIter *); /* Called to find the type of the playlist at the given iterator. */ enum playlist_type_t gui_sidebar_iter_type(GtkTreeIter *); +/* Called to find the playlist at the given iterator. */ +struct playlist *gui_sidebar_iter_playlist(GtkTreeIter *); + /* Called to add a playlist at the current iterator. */ void gui_sidebar_iter_add(GtkTreeIter *, struct playlist *, const gchar *); diff --git a/tests/gui/sidebar.c b/tests/gui/sidebar.c index a6937867..c4c3e5a5 100644 --- a/tests/gui/sidebar.c +++ b/tests/gui/sidebar.c @@ -78,6 +78,8 @@ static void test_sidebar() g_assert_true(gui_sidebar_iter_find(&iter, "History", PL_SYSTEM)); g_assert_cmpstr_free(gui_sidebar_iter_name(&iter), ==, "History"); g_assert_cmpuint(gui_sidebar_iter_type(&iter), ==, PL_SYSTEM); + g_assert(gui_sidebar_iter_playlist(&iter) == + playlist_get(PL_SYSTEM, "History")); g_assert_true(gui_sidebar_iter_find(&iter, "Dynamic", PL_MAX_TYPE)); g_assert_false(gui_sidebar_iter_down(&iter, &child));