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()