diff --git a/gui/playlists/user.c b/gui/playlists/user.c index 2f495974..7604c76b 100644 --- a/gui/playlists/user.c +++ b/gui/playlists/user.c @@ -65,6 +65,7 @@ void __gui_pl_user_edited(GtkCellRendererText *renderer, gchar *path, playlist = gui_sidebar_iter_playlist(&iter); pl_user_rename(playlist, new_name); gui_sidebar_iter_update_playlist(&iter, playlist); + gui_sidebar_iter_set_editable(&iter, false); } void gui_pl_user_init() diff --git a/gui/sidebar.c b/gui/sidebar.c index a633ccb6..64723e00 100644 --- a/gui/sidebar.c +++ b/gui/sidebar.c @@ -34,11 +34,10 @@ static gchar *__gui_sidebar_size_str(struct playlist *playlist) static void __gui_sidebar_set(GtkTreeIter *iter, const gchar *name, const gchar *image, enum playlist_type_t type) { - bool editable = (type == PL_USER); gtk_tree_store_set(gui_sidebar_store(), iter, SB_NAME, name, SB_IMAGE, image, SB_TYPE, type, - SB_EDITABLE, editable, -1); + SB_EDITABLE, false, -1); } static void __gui_sidebar_set_playlist(GtkTreeIter *iter, @@ -155,6 +154,29 @@ bool __gui_sidebar_keypress(GtkTreeView *treeview, GdkEventKey *event, return true; } +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->button != GDK_BUTTON_MIDDLE) + return false; + 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); + gtk_tree_path_free(path); + return true; +} + void __gui_sidebar_resized(GtkPaned *pane, GParamSpec *pspec, gpointer data) { settings_set(SIDEBAR_SETTING, gtk_paned_get_position(pane)); diff --git a/share/ocarina/ocarina.ui b/share/ocarina/ocarina.ui index a0d50a6c..2c399058 100644 --- a/share/ocarina/ocarina.ui +++ b/share/ocarina/ocarina.ui @@ -765,6 +765,7 @@ audio-volume-medium False 1 True + diff --git a/tests/gui/playlists/user.c b/tests/gui/playlists/user.c index 49e066fd..fd58a027 100644 --- a/tests/gui/playlists/user.c +++ b/tests/gui/playlists/user.c @@ -42,20 +42,20 @@ static void test_user() g_assert_true(gui_sidebar_iter_next(&child)); g_assert_cmpstr_free(gui_sidebar_iter_name(&child), ==, "Test 1"); g_assert_cmpuint(gui_sidebar_iter_type(&child), ==, PL_USER); - g_assert_true(gui_sidebar_iter_editable(&child)); - g_assert_true( gui_sidebar_iter_set_editable(&child, false)); g_assert_false(gui_sidebar_iter_editable(&child)); g_assert_true( gui_sidebar_iter_set_editable(&child, true)); g_assert_true( gui_sidebar_iter_editable(&child)); + g_assert_true( gui_sidebar_iter_set_editable(&child, false)); + g_assert_false(gui_sidebar_iter_editable(&child)); g_assert_true(gui_sidebar_iter_next(&child)); g_assert_cmpstr_free(gui_sidebar_iter_name(&child), ==, "Test 2"); g_assert_cmpuint(gui_sidebar_iter_type(&child), ==, PL_USER); - g_assert_true(gui_sidebar_iter_editable(&child)); - g_assert_true( gui_sidebar_iter_set_editable(&child, false)); g_assert_false(gui_sidebar_iter_editable(&child)); g_assert_true( gui_sidebar_iter_set_editable(&child, true)); g_assert_true( gui_sidebar_iter_editable(&child)); + g_assert_true( gui_sidebar_iter_set_editable(&child, false)); + g_assert_false(gui_sidebar_iter_editable(&child)); list = gui_pl_user_list(); g_assert_nonnull(list);