gui/sidebar: Respond to the Delete key

Gtk doesn't have a simple way to manually trigger this, so I didn't
write a unit test for this feature.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2016-08-30 10:11:51 -04:00
parent 828f861d9a
commit b3efd9d84d
3 changed files with 20 additions and 33 deletions

View File

@ -43,38 +43,6 @@ static void __playlist_set_size(GtkTreeIter *iter, const gchar *name)
g_free(text);
}
bool __playlist_keypress(GtkTreeView *treeview, GdkEventKey *event,
gpointer data)
{
GtkTreeSelection *selection = gtk_tree_view_get_selection(treeview);
GtkTreeModel *model = gui_sidebar_model();
GtkTreeIter iter, child;
gchar *name = NULL;
GtkTreePath *path;
GList *rows;
if (event->keyval != GDK_KEY_Delete)
return false;
rows = gtk_tree_selection_get_selected_rows(selection, &model);
path = rows->data;
if (!gtk_tree_model_get_iter(model, &iter, path))
return false;
__playlist_filter_get_iter(&iter, &child);
name = gui_sidebar_iter_name(&child);
if (!name)
goto out;
if (playlist_delete(gui_sidebar_iter_type(&child), name))
gtk_tree_store_remove(gui_sidebar_store(), &child);
g_free(name);
out:
g_list_free_full(rows, (GDestroyNotify)gtk_tree_path_free);
return true;
}
void __playlist_row_activated(GtkTreeView *treeview, GtkTreePath *path,
GtkTreeViewColumn *col, gpointer data)
{

View File

@ -141,6 +141,25 @@ void __gui_sidebar_selection_changed(GtkTreeSelection *selection, gpointer data)
gui_treeview_set_playlist(playlist);
}
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;
if (!playlist || event->keyval != GDK_KEY_Delete)
return false;
if (!gtk_tree_selection_get_selected(selection, &model, &iter))
return false;
__gui_sidebar_filter_iter_convert(&iter, &child);
if (playlist_delete(playlist->pl_type, playlist->pl_name))
gtk_tree_store_remove(gui_sidebar_store(), &child);
return true;
}
void __gui_sidebar_resized(GtkPaned *pane, GParamSpec *pspec, gpointer data)
{
settings_set(SIDEBAR_SETTING, gtk_paned_get_position(pane));

View File

@ -747,7 +747,7 @@ audio-volume-medium</property>
<property name="headers_visible">False</property>
<property name="search_column">1</property>
<property name="enable_tree_lines">True</property>
<signal name="key-press-event" handler="__playlist_keypress" swapped="no"/>
<signal name="key-press-event" handler="__gui_sidebar_keypress" swapped="no"/>
<signal name="row-activated" handler="__playlist_row_activated" swapped="no"/>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection3">