diff --git a/gui/sidebar.c b/gui/sidebar.c index 8d18eb52..a633ccb6 100644 --- a/gui/sidebar.c +++ b/gui/sidebar.c @@ -236,6 +236,13 @@ enum playlist_type_t gui_sidebar_iter_type(GtkTreeIter *iter) return type; } +bool gui_sidebar_iter_editable(GtkTreeIter *iter) +{ + gboolean editable; + gtk_tree_model_get(gui_sidebar_model(), iter, SB_EDITABLE, &editable, -1); + return editable == TRUE; +} + struct playlist *gui_sidebar_iter_playlist(GtkTreeIter *iter) { enum playlist_type_t type = gui_sidebar_iter_type(iter); @@ -314,6 +321,15 @@ void gui_sidebar_iter_select(GtkTreeIter *iter) gtk_tree_selection_select_iter(selection, &filter); } +bool gui_sidebar_iter_set_editable(GtkTreeIter *iter, bool editable) +{ + enum playlist_type_t type = gui_sidebar_iter_type(iter); + if (type != PL_USER) + return false; + gtk_tree_store_set(gui_sidebar_store(), iter, SB_EDITABLE, editable, -1); + return true; +} + void gui_sidebar_filter_path_select(GtkTreePath *path) { GtkTreeModel *model = GTK_TREE_MODEL(gui_sidebar_filter()); diff --git a/include/gui/sidebar.h b/include/gui/sidebar.h index 870bb288..32f2af3f 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 editable state of the playlist at the given iterator. */ +bool gui_sidebar_iter_editable(GtkTreeIter *); + /* Called to find the playlist at the given iterator. */ struct playlist *gui_sidebar_iter_playlist(GtkTreeIter *); @@ -48,6 +51,9 @@ void gui_sidebar_iter_update(GtkTreeIter *); /* Called to select the row at the current iterator. */ void gui_sidebar_iter_select(GtkTreeIter *); +/* Called to set the current iterator as editable. */ +bool gui_sidebar_iter_set_editable(GtkTreeIter *, bool); + /* Called to set the playlist at the given iterator as the default. */ void gui_sidebar_filter_path_select(GtkTreePath *); diff --git a/tests/gui/playlists/user.c b/tests/gui/playlists/user.c index 39404afb..49e066fd 100644 --- a/tests/gui/playlists/user.c +++ b/tests/gui/playlists/user.c @@ -32,18 +32,30 @@ static void test_user() g_assert_true(gui_sidebar_iter_down(&iter, &child)); g_assert_cmpstr_free(gui_sidebar_iter_name(&child), ==, "Favorites"); g_assert_cmpuint(gui_sidebar_iter_type(&child), ==, PL_SYSTEM); + g_assert_false(gui_sidebar_iter_editable(&child)); g_assert_true(gui_sidebar_iter_next(&child)); g_assert_cmpstr_free(gui_sidebar_iter_name(&child), ==, "Hidden"); g_assert_cmpuint(gui_sidebar_iter_type(&child), ==, PL_SYSTEM); + g_assert_false(gui_sidebar_iter_editable(&child)); g_assert_true(gui_sidebar_iter_next(&child)); g_assert_cmpstr_free(gui_sidebar_iter_name(&child), ==, "Test 1"); g_assert_cmpuint(gui_sidebar_iter_type(&child), ==, PL_USER); + g_assert_true(gui_sidebar_iter_editable(&child)); + g_assert_true( gui_sidebar_iter_set_editable(&child, false)); + g_assert_false(gui_sidebar_iter_editable(&child)); + g_assert_true( gui_sidebar_iter_set_editable(&child, true)); + g_assert_true( gui_sidebar_iter_editable(&child)); g_assert_true(gui_sidebar_iter_next(&child)); g_assert_cmpstr_free(gui_sidebar_iter_name(&child), ==, "Test 2"); g_assert_cmpuint(gui_sidebar_iter_type(&child), ==, PL_USER); + g_assert_true(gui_sidebar_iter_editable(&child)); + g_assert_true( gui_sidebar_iter_set_editable(&child, false)); + g_assert_false(gui_sidebar_iter_editable(&child)); + g_assert_true( gui_sidebar_iter_set_editable(&child, true)); + g_assert_true( gui_sidebar_iter_editable(&child)); list = gui_pl_user_list(); g_assert_nonnull(list); diff --git a/tests/gui/sidebar.c b/tests/gui/sidebar.c index 49448f2b..41e8d89a 100644 --- a/tests/gui/sidebar.c +++ b/tests/gui/sidebar.c @@ -156,6 +156,12 @@ static void test_sidebar_selection() gui_sidebar_filter_path_select(path); g_assert(playlist_current() == playlist_lookup(PL_SYSTEM, "Collection")); + g_assert_false(gui_sidebar_iter_editable(&iter)); + g_assert_false(gui_sidebar_iter_set_editable(&iter, true)); + g_assert_false(gui_sidebar_iter_editable(&iter)); + g_assert_false(gui_sidebar_iter_set_editable(&iter, false)); + g_assert_false(gui_sidebar_iter_editable(&iter)); + gtk_tree_selection_unselect_all(selection); gui_sidebar_iter_next(&iter); gtk_tree_path_next(path);