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