gui/sidebar: Add support for removing temporary queues
Either through the delete key or when the queue runs out of tracks. Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
parent
839f4c4aa1
commit
16b055f06b
|
@ -5,6 +5,7 @@ extern "C" {
|
|||
#include <core/string.h>
|
||||
#include <core/tempq.h>
|
||||
#include <gui/builder.h>
|
||||
#include <gui/sidebar.h>
|
||||
}
|
||||
#include <gui/tabs.h>
|
||||
#include <gui/queue/label.h>
|
||||
|
@ -107,6 +108,7 @@ QueueTab :: ~QueueTab()
|
|||
{
|
||||
queue_mapping.erase(&tab_vbox);
|
||||
tab_unmap();
|
||||
gui_sidebar_remove(tab_pq);
|
||||
Glib :: wrap(GTK_NOTEBOOK(gui_builder_widget("o_notebook")), false)->remove_page(tab_vbox);
|
||||
renumber_queues();
|
||||
}
|
||||
|
|
|
@ -63,6 +63,39 @@ void __sidebar_resize(GtkPaned *pane, GParamSpec *pspec, gpointer data)
|
|||
gui_settings_set(SIDEBAR_SETTING, gtk_paned_get_position(pane));
|
||||
}
|
||||
|
||||
bool __sidebar_keypress(GtkTreeView *treeview, GdkEventKey *event, gpointer data)
|
||||
{
|
||||
GtkTreeSelection *selection = gtk_tree_view_get_selection(treeview);
|
||||
GtkNotebook *notebook = GTK_NOTEBOOK(gui_builder_widget("o_notebook"));
|
||||
GtkTreeModel *model = GTK_TREE_MODEL(sb_store);
|
||||
struct queue *queue;
|
||||
unsigned int page;
|
||||
GtkTreePath *path;
|
||||
GtkTreeIter iter;
|
||||
GList *rows;
|
||||
|
||||
if (event->keyval != GDK_KEY_Delete)
|
||||
return false;
|
||||
|
||||
rows = gtk_tree_selection_get_selected_rows(selection, &model);
|
||||
path = rows->data;
|
||||
|
||||
if (gtk_tree_model_get_iter(model, &iter, path))
|
||||
queue = __sidebar_get_queue(&iter);
|
||||
page = gtk_tree_path_get_indices(path)[0];
|
||||
|
||||
if (!queue || page >= tempq_count())
|
||||
goto out;
|
||||
|
||||
tempq_free(queue);
|
||||
gtk_list_store_remove(sb_store, &iter);
|
||||
gtk_notebook_remove_page(notebook, page);
|
||||
|
||||
out:
|
||||
g_list_free_full(rows, (GDestroyNotify)gtk_tree_path_free);
|
||||
return true;
|
||||
}
|
||||
|
||||
void __sidebar_selection_changed(GtkTreeSelection *selection, gpointer data)
|
||||
{
|
||||
GtkNotebook *notebook = GTK_NOTEBOOK(gui_builder_widget("o_notebook"));
|
||||
|
@ -143,6 +176,16 @@ void gui_sidebar_add(struct queue *queue)
|
|||
SB_QUEUE, queue, -1);
|
||||
}
|
||||
|
||||
void gui_sidebar_remove(struct queue *queue)
|
||||
{
|
||||
GtkTreeIter iter;
|
||||
|
||||
if (!__sidebar_find_queue(queue, &iter))
|
||||
return;
|
||||
|
||||
gtk_list_store_remove(sb_store, &iter);
|
||||
}
|
||||
|
||||
void gui_sidebar_set_size(struct queue *queue)
|
||||
{
|
||||
const gchar *name = "Queued Tracks";
|
||||
|
|
|
@ -25,6 +25,9 @@ void gui_sidebar_selected(enum sidebar_selection_t);
|
|||
/* Called to add a queue to the sidebar. */
|
||||
void gui_sidebar_add(struct queue *);
|
||||
|
||||
/* Called to remove a queue from the sidebar. */
|
||||
void gui_sidebar_remove(struct queue *);
|
||||
|
||||
/* Called to set the size of sidebar entries. */
|
||||
void gui_sidebar_set_size(struct queue *);
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ void __audio_seek() {}
|
|||
#endif
|
||||
|
||||
#ifdef TEST_NEED_SIDEBAR
|
||||
void __sidebar_keypress() {}
|
||||
void __sidebar_resize() {}
|
||||
void __sidebar_selection_changed() {}
|
||||
#endif /* TEST_NEED_SIDEBAR */
|
||||
|
|
|
@ -321,8 +321,8 @@
|
|||
<property name="icon_name">media-skip-backward</property>
|
||||
</object>
|
||||
</child>
|
||||
<accelerator key="n" signal="clicked" modifiers="GDK_SHIFT_MASK"/>
|
||||
<accelerator key="AudioPrev" signal="clicked"/>
|
||||
<accelerator key="n" signal="clicked" modifiers="GDK_SHIFT_MASK"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -356,8 +356,8 @@
|
|||
<property name="icon_size">5</property>
|
||||
</object>
|
||||
</child>
|
||||
<accelerator key="space" signal="clicked"/>
|
||||
<accelerator key="AudioPlay" signal="clicked"/>
|
||||
<accelerator key="space" signal="clicked"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -390,8 +390,8 @@
|
|||
<property name="icon_size">5</property>
|
||||
</object>
|
||||
</child>
|
||||
<accelerator key="space" signal="clicked"/>
|
||||
<accelerator key="AudioPlay" signal="clicked"/>
|
||||
<accelerator key="space" signal="clicked"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -424,8 +424,8 @@
|
|||
<property name="icon_name">media-playback-stop</property>
|
||||
</object>
|
||||
</child>
|
||||
<accelerator key="AudioPlay" signal="clicked" modifiers="GDK_MOD1_MASK"/>
|
||||
<accelerator key="space" signal="clicked" modifiers="GDK_MOD1_MASK"/>
|
||||
<accelerator key="AudioPlay" signal="clicked" modifiers="GDK_MOD1_MASK"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -458,8 +458,8 @@
|
|||
<property name="icon_name">media-skip-forward</property>
|
||||
</object>
|
||||
</child>
|
||||
<accelerator key="n" signal="clicked"/>
|
||||
<accelerator key="AudioNext" signal="clicked"/>
|
||||
<accelerator key="n" signal="clicked"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -665,6 +665,7 @@
|
|||
<property name="show_expanders">False</property>
|
||||
<property name="level_indentation">10</property>
|
||||
<property name="enable_tree_lines">True</property>
|
||||
<signal name="key-press-event" handler="__sidebar_keypress" swapped="no"/>
|
||||
<child internal-child="selection">
|
||||
<object class="GtkTreeSelection" id="treeview-selection4">
|
||||
<signal name="changed" handler="__sidebar_selection_changed" swapped="no"/>
|
||||
|
|
Loading…
Reference in New Issue