From 4fc8c72ea8662d1c5c35acdaf8281e504ea8a365 Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Thu, 25 Aug 2016 09:30:46 -0400 Subject: [PATCH] gui/sidebar: Initialize the sidebar with default headers Signed-off-by: Anna Schumaker --- gui/playlist.c | 9 +++++++-- gui/sidebar.c | 24 +++++++++++++++++++++++- tests/gui/sidebar.c | 17 ++++++++++++++++- 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/gui/playlist.c b/gui/playlist.c index d4f43e65..60c02265 100644 --- a/gui/playlist.c +++ b/gui/playlist.c @@ -82,14 +82,19 @@ gboolean __playlist_on_select(GtkTreeSelection *selection, GtkTreeModel *model, GtkTreePath *path, gboolean selected, gpointer data) { struct queue *queue = NULL; + enum playlist_type_t type; GtkTreeIter iter, child; gchar *name; gtk_tree_model_get_iter(model, &iter, path); __playlist_filter_get_iter(&iter, &child); - name = gui_sidebar_iter_name(&child); - queue = playlist_get_queue(gui_sidebar_iter_type(&child), name); + type = gui_sidebar_iter_type(&child); + if (type == PL_MAX_TYPE) + return false; + + name = gui_sidebar_iter_name(&child); + queue = playlist_get_queue(type, name); g_free(name); return queue != NULL; diff --git a/gui/sidebar.c b/gui/sidebar.c index bb17ca56..8ceec22d 100644 --- a/gui/sidebar.c +++ b/gui/sidebar.c @@ -12,6 +12,21 @@ enum sidebar_columns { const gchar *SIDEBAR_SETTING = "gui.sidebar.pos"; +static void __gui_sidebar_add_header(GtkTreeIter *iter, const gchar *name, + const gchar *image) +{ + gchar *formatted = g_strdup_printf("%s", name); + + gtk_tree_store_insert_with_values(gui_sidebar_store(), iter, NULL, -1, + SB_TYPE, PL_MAX_TYPE, -1); + gtk_tree_store_insert_with_values(gui_sidebar_store(), iter, NULL, -1, + SB_IMAGE, image, + SB_NAME, formatted, + SB_TYPE, PL_MAX_TYPE, -1); + + g_free(formatted); +} + void __gui_sidebar_resized(GtkPaned *pane, GParamSpec *pspec, gpointer data) { @@ -20,7 +35,14 @@ void __gui_sidebar_resized(GtkPaned *pane, GParamSpec *pspec, gpointer data) void gui_sidebar_init() { - int pos = settings_get(SIDEBAR_SETTING); + int pos = settings_get(SIDEBAR_SETTING); + GtkTreeIter iter; + + gui_sidebar_iter_first(&iter); + __gui_sidebar_add_header(&iter, "Playlists", "emblem-documents"); + __gui_sidebar_add_header(&iter, "Dynamic", "emblem-generic"); + __gui_sidebar_add_header(&iter, "Library", "emblem-system"); + if (pos > 0) gtk_paned_set_position(gui_sidebar(), pos); } diff --git a/tests/gui/sidebar.c b/tests/gui/sidebar.c index 80d4296d..347db4b3 100644 --- a/tests/gui/sidebar.c +++ b/tests/gui/sidebar.c @@ -5,9 +5,14 @@ #include #include +const gchar *test_pl_names[6] = { "", "Playlists", + "", "Dynamic", + "", "Library" }; + static void test_sidebar() { GtkTreeIter iter; + unsigned int i; g_assert_nonnull(gui_sidebar_store()); g_assert_true(GTK_IS_TREE_STORE(gui_sidebar_store())); @@ -21,7 +26,17 @@ static void test_sidebar() g_assert_nonnull(gui_sidebar_treeview()); g_assert_true(GTK_IS_TREE_VIEW(gui_sidebar_treeview())); - g_assert_false(gui_sidebar_iter_first(&iter)); + g_assert_true(gui_sidebar_iter_first(&iter)); + for (i = 0; i < 6; i++) { + g_assert_cmpstr_free(gui_sidebar_iter_name(&iter), ==, + test_pl_names[i]); + g_assert_cmpuint(gui_sidebar_iter_type(&iter), ==, + PL_MAX_TYPE); + + if (i < 5) + g_assert_true(gui_sidebar_iter_next(&iter)); + } + g_assert_false(gui_sidebar_iter_next(&iter)); } static void test_sidebar_pos()