diff --git a/gui/sidebar.c b/gui/sidebar.c index 73572a2d..44bbb36b 100644 --- a/gui/sidebar.c +++ b/gui/sidebar.c @@ -132,6 +132,43 @@ void __gui_sidebar_selection_changed(GtkTreeSelection *selection, gpointer data) gtk_widget_set_sensitive(GTK_WIDGET(gui_random_button()), sensitive); } +static void __gui_sidebar_do_rename(GtkTreePath *path) +{ + GtkTreeView *treeview = gui_sidebar_treeview(); + GtkTreeModel *model = gtk_tree_view_get_model(treeview); + GtkTreeViewColumn *column = gtk_tree_view_get_column(treeview, SB_NAME); + GtkTreeIter iter, child; + + if (!gtk_tree_model_get_iter(model, &iter, path)) + return; + + __gui_sidebar_filter_iter_convert(&iter, &child); + gui_sidebar_iter_set_editable(&child, true); + gtk_tree_view_set_cursor(treeview, path, column, true); +} + +static GtkTreePath *__gui_sidebar_current_path(void) +{ + GtkTreeView *treeview = gui_sidebar_treeview(); + GtkTreeSelection *selection = gtk_tree_view_get_selection(treeview); + GtkTreeModel *model = gtk_tree_view_get_model(treeview); + GtkTreeIter iter; + + if (!gtk_tree_selection_get_selected(selection, &model, &iter)) + return NULL; + return gtk_tree_model_get_path(model, &iter); +} + +bool __gui_sidebar_rename(GtkMenuItem *item, gpointer data) +{ + GtkTreePath *path = __gui_sidebar_current_path(); + if (path) { + __gui_sidebar_do_rename(path); + gtk_tree_path_free(path); + } + return path != NULL; +} + bool __gui_sidebar_delete(GtkMenuItem *item, gpointer data) { GtkTreeIter iter; @@ -147,6 +184,8 @@ bool __gui_sidebar_keypress(GtkTreeView *treeview, GdkEventKey *event, gpointer data) { switch (event->keyval) { + case GDK_KEY_BackSpace: + return __gui_sidebar_rename(NULL, NULL); case GDK_KEY_Delete: return __gui_sidebar_delete(NULL, NULL); default: @@ -157,9 +196,6 @@ bool __gui_sidebar_keypress(GtkTreeView *treeview, GdkEventKey *event, bool __gui_sidebar_button_press(GtkTreeView *treeview, GdkEventButton *event, gpointer data) { - GtkTreeModel *model = gtk_tree_view_get_model(treeview); - GtkTreeViewColumn *column = gtk_tree_view_get_column(treeview, SB_NAME); - GtkTreeIter iter, child; GtkTreePath *path; if (event->type != GDK_2BUTTON_PRESS || @@ -168,12 +204,8 @@ bool __gui_sidebar_button_press(GtkTreeView *treeview, GdkEventButton *event, if (!gtk_tree_view_get_path_at_pos(treeview, event->x, event->y, &path, NULL, NULL, NULL)) return true; - if (!gtk_tree_model_get_iter(model, &iter, path)) - return true; - __gui_sidebar_filter_iter_convert(&iter, &child); - gui_sidebar_iter_set_editable(&child, true); - gtk_tree_view_set_cursor(treeview, path, column, true); + __gui_sidebar_do_rename(path); gtk_tree_path_free(path); return true; }