gui/view: Scroll to the current queue's iterator position

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
Anna Schumaker 2016-01-22 14:16:51 -05:00
parent d5c365ddf0
commit f328b1686d
4 changed files with 29 additions and 0 deletions

View File

@ -6,6 +6,7 @@
#include <core/string.h>
#include <gui/audio.h>
#include <gui/builder.h>
#include <gui/view.h>
static inline void __audio_set_label(const gchar *label, const gchar *size,
@ -35,6 +36,7 @@ static void __audio_load(struct track *track)
playlist_has(PL_HIDDEN, track));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gui_builder_widget("o_favorite")),
playlist_has(PL_FAVORITED, track));
gui_view_scroll();
}
static void __audio_change_state(GstState state)

View File

@ -82,6 +82,7 @@ void __queue_filter(GtkSearchEntry *entry, gpointer data)
if (strlen(text) > 0)
filter_search(text, &gq_queue->gq_visible);
gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(gq_queue->gq_filter));
gui_view_scroll();
}
struct gui_queue *gui_queue_alloc(struct queue *queue, const gchar *text,

View File

@ -341,4 +341,27 @@ void gui_view_set_model(GtkTreeModelFilter *filter)
view_sort_count = 0;
__view_display_sorting("");
__view_set_sort_indicators();
gui_view_scroll();
}
void gui_view_scroll()
{
struct queue *queue = __view_filter_get_queue();
GtkTreePath *real, *path;
if (!queue || (int)queue->q_cur.it_pos < 0)
return;
real = gtk_tree_path_new_from_indices(queue->q_cur.it_pos, -1);
path = gtk_tree_model_filter_convert_child_path_to_path(view_filter, real);
if (path) {
gtk_tree_view_scroll_to_cell(view_treeview, path,
NULL, TRUE, 0.5, 0.5);
gtk_tree_view_set_cursor(view_treeview, path, NULL, false);
gtk_tree_path_free(path);
}
gtk_tree_path_free(real);
}

View File

@ -7,6 +7,9 @@
/* Called to initialize structures needed by the treeview. */
void gui_view_init();
/* Called to scroll the GUI treeview to the queue's current position. */
void gui_view_scroll();
/* Called to set the currently displayed model. */
void gui_view_set_model(GtkTreeModelFilter *);