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);
|
playlist = gui_sidebar_iter_playlist(&iter);
|
||||||
pl_user_rename(playlist, new_name);
|
pl_user_rename(playlist, new_name);
|
||||||
gui_sidebar_iter_update_playlist(&iter, playlist);
|
gui_sidebar_iter_update_playlist(&iter, playlist);
|
||||||
|
gui_sidebar_iter_set_editable(&iter, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void gui_pl_user_init()
|
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,
|
static void __gui_sidebar_set(GtkTreeIter *iter, const gchar *name,
|
||||||
const gchar *image, enum playlist_type_t type)
|
const gchar *image, enum playlist_type_t type)
|
||||||
{
|
{
|
||||||
bool editable = (type == PL_USER);
|
|
||||||
gtk_tree_store_set(gui_sidebar_store(), iter, SB_NAME, name,
|
gtk_tree_store_set(gui_sidebar_store(), iter, SB_NAME, name,
|
||||||
SB_IMAGE, image,
|
SB_IMAGE, image,
|
||||||
SB_TYPE, type,
|
SB_TYPE, type,
|
||||||
SB_EDITABLE, editable, -1);
|
SB_EDITABLE, false, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __gui_sidebar_set_playlist(GtkTreeIter *iter,
|
static void __gui_sidebar_set_playlist(GtkTreeIter *iter,
|
||||||
|
@ -155,6 +154,29 @@ bool __gui_sidebar_keypress(GtkTreeView *treeview, GdkEventKey *event,
|
||||||
return true;
|
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)
|
void __gui_sidebar_resized(GtkPaned *pane, GParamSpec *pspec, gpointer data)
|
||||||
{
|
{
|
||||||
settings_set(SIDEBAR_SETTING, gtk_paned_get_position(pane));
|
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="headers_visible">False</property>
|
||||||
<property name="search_column">1</property>
|
<property name="search_column">1</property>
|
||||||
<property name="enable_tree_lines">True</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="key-press-event" handler="__gui_sidebar_keypress" swapped="no"/>
|
||||||
<signal name="row-activated" handler="__gui_playlist_row_activated" swapped="no"/>
|
<signal name="row-activated" handler="__gui_playlist_row_activated" swapped="no"/>
|
||||||
<signal name="row-collapsed" handler="__gui_playlist_row_collapsed" 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_true(gui_sidebar_iter_next(&child));
|
||||||
g_assert_cmpstr_free(gui_sidebar_iter_name(&child), ==, "Test 1");
|
g_assert_cmpstr_free(gui_sidebar_iter_name(&child), ==, "Test 1");
|
||||||
g_assert_cmpuint(gui_sidebar_iter_type(&child), ==, PL_USER);
|
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_false(gui_sidebar_iter_editable(&child));
|
||||||
g_assert_true( gui_sidebar_iter_set_editable(&child, true));
|
g_assert_true( gui_sidebar_iter_set_editable(&child, true));
|
||||||
g_assert_true( gui_sidebar_iter_editable(&child));
|
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_true(gui_sidebar_iter_next(&child));
|
||||||
g_assert_cmpstr_free(gui_sidebar_iter_name(&child), ==, "Test 2");
|
g_assert_cmpstr_free(gui_sidebar_iter_name(&child), ==, "Test 2");
|
||||||
g_assert_cmpuint(gui_sidebar_iter_type(&child), ==, PL_USER);
|
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_false(gui_sidebar_iter_editable(&child));
|
||||||
g_assert_true( gui_sidebar_iter_set_editable(&child, true));
|
g_assert_true( gui_sidebar_iter_set_editable(&child, true));
|
||||||
g_assert_true( gui_sidebar_iter_editable(&child));
|
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();
|
list = gui_pl_user_list();
|
||||||
g_assert_nonnull(list);
|
g_assert_nonnull(list);
|
||||||
|
|
Loading…
Reference in New Issue