From 21e1796b14ab36e6ab73414df3ffd3c7fa94ca00 Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Tue, 29 Aug 2017 10:56:03 -0400 Subject: [PATCH] gui/sidebar: Add a function for finding the current playlist This seems like a useful function to have, and we already need it for deleting playlists. Let's make it a real function so we don't need to duplicate code. Signed-off-by: Anna Schumaker --- gui/sidebar.c | 36 +++++++++++++++++++++--------------- include/gui/sidebar.h | 3 +++ tests/gui/sidebar.c | 11 ++++++++++- 3 files changed, 34 insertions(+), 16 deletions(-) diff --git a/gui/sidebar.c b/gui/sidebar.c index c17b698d..efc2dc66 100644 --- a/gui/sidebar.c +++ b/gui/sidebar.c @@ -117,15 +117,12 @@ static gboolean __gui_sidebar_can_select(GtkTreeSelection *selection, 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; - GtkTreeIter iter, child; + GtkTreeIter iter; - if (gtk_tree_selection_get_selected(selection, &model, &iter)) { - __gui_sidebar_filter_iter_convert(&iter, &child); - - playlist = gui_sidebar_iter_playlist(&child); + if (gui_sidebar_iter_current(&iter)) { + playlist = gui_sidebar_iter_playlist(&iter); active = playlist->pl_random; sensitive = (playlist->pl_ops->pl_set_random != NULL); } @@ -138,19 +135,15 @@ void __gui_sidebar_selection_changed(GtkTreeSelection *selection, gpointer data) bool __gui_sidebar_keypress(GtkTreeView *treeview, GdkEventKey *event, gpointer data) { - GtkTreeSelection *selection = gtk_tree_view_get_selection(treeview); - struct playlist *playlist = gui_model_get_playlist(); - GtkTreeModel *model = GTK_TREE_MODEL(gui_sidebar_filter()); - GtkTreeIter iter, child; + GtkTreeIter iter; - if (!playlist || event->keyval != GDK_KEY_Delete) + if (event->keyval != GDK_KEY_Delete) return false; - if (!gtk_tree_selection_get_selected(selection, &model, &iter)) + if (!gui_sidebar_iter_current(&iter)) return false; - __gui_sidebar_filter_iter_convert(&iter, &child); - if (playlist_delete(playlist)) - gtk_tree_store_remove(gui_sidebar_store(), &child); + if (playlist_delete(gui_model_get_playlist())) + gtk_tree_store_remove(gui_sidebar_store(), &iter); return true; } @@ -216,6 +209,19 @@ void gui_sidebar_init() gtk_paned_set_position(gui_sidebar(), pos); } +gboolean gui_sidebar_iter_current(GtkTreeIter *iter) +{ + GtkTreeView *treeview = gui_sidebar_treeview(); + GtkTreeSelection *selection = gtk_tree_view_get_selection(treeview); + GtkTreeModel *model = GTK_TREE_MODEL(gui_sidebar_filter()); + GtkTreeIter it; + + if (!gtk_tree_selection_get_selected(selection, &model, &it)) + return false; + __gui_sidebar_filter_iter_convert(&it, iter); + return true; +} + gboolean gui_sidebar_iter_first(GtkTreeIter *iter) { return gtk_tree_model_get_iter_first(gui_sidebar_model(), iter); diff --git a/include/gui/sidebar.h b/include/gui/sidebar.h index 32f2af3f..0effcd67 100644 --- a/include/gui/sidebar.h +++ b/include/gui/sidebar.h @@ -9,6 +9,9 @@ /* Called to initialize the sidebar. */ void gui_sidebar_init(); +/* Called to set an iterator to the currently displayed playlist. */ +gboolean gui_sidebar_iter_current(GtkTreeIter *); + /* Called to set an iterator to the first playlist. */ gboolean gui_sidebar_iter_first(GtkTreeIter *); diff --git a/tests/gui/sidebar.c b/tests/gui/sidebar.c index 41e8d89a..136994b0 100644 --- a/tests/gui/sidebar.c +++ b/tests/gui/sidebar.c @@ -102,9 +102,9 @@ static void test_sidebar_selection() struct playlist *collection; GtkTreeSelection *selection; GtkToggleButton *random; + GtkTreeIter iter, cur; GtkTreeModel *filter; GtkTreePath *path; - GtkTreeIter iter; unsigned int i, n; collection = playlist_lookup(PL_SYSTEM, "Collection"); @@ -136,6 +136,10 @@ static void test_sidebar_selection() g_assert_true(gtk_widget_get_sensitive( GTK_WIDGET(random))); + g_assert_true(gui_sidebar_iter_current(&cur)); + g_assert_true(gui_sidebar_iter_playlist(&cur) == + collection); + gtk_toggle_button_set_active(random, false); g_assert_false(collection->pl_random); gtk_toggle_button_set_active(random, true); @@ -143,6 +147,11 @@ static void test_sidebar_selection() } else if (i == 1) { g_assert(gui_model_get_playlist() == playlist_lookup(PL_SYSTEM, "History")); + + g_assert_true(gui_sidebar_iter_current(&cur)); + g_assert_true(gui_sidebar_iter_playlist(&cur) == + playlist_lookup(PL_SYSTEM, "History")); + g_assert_false(gtk_toggle_button_get_active(random)); g_assert_false(gtk_widget_get_sensitive( GTK_WIDGET(random)));