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 <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2017-08-29 10:56:03 -04:00
parent b4347d5a34
commit 21e1796b14
3 changed files with 34 additions and 16 deletions

View File

@ -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);

View File

@ -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 *);

View File

@ -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)));