gui/sidebar: Don't set user playlists as editable by default
Instead, watch for a middle click and set the editable state manually from there. This fixes a bug where double clicking on a user playlist put us in editing mode instead of selecting the playlist for playback. Fixes #110: Cannot select user playlists Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
7e303fa2b1
commit
8b17962b4e
|
@ -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()
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -765,6 +765,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="button-press-event" handler="__gui_sidebar_button_press" swapped="no"/>
|
||||
<signal name="key-press-event" handler="__gui_sidebar_keypress" swapped="no"/>
|
||||
<signal name="row-activated" handler="__gui_playlist_row_activated" swapped="no"/>
|
||||
<signal name="row-collapsed" handler="__gui_playlist_row_collapsed" swapped="no"/>
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue