gint playlist_get_focus (gint list) { GtkWidget * tree = playlist_get_treeview (list); g_return_val_if_fail (tree, -1); return audgui_list_get_focus (tree); }
void ui_playlist_notebook_update (void * data, void * user) { gint global_level = GPOINTER_TO_INT (data); if (global_level == PLAYLIST_UPDATE_STRUCTURE) add_remove_pages (); gint lists = aud_playlist_count (); for (gint list = 0; list < lists; list ++) { if (global_level >= PLAYLIST_UPDATE_METADATA) set_tab_label (list, get_tab_label (list)); gint at, count; gint level = aud_playlist_updated_range (list, & at, & count); if (level) ui_playlist_widget_update (playlist_get_treeview (list), level, at, count); } gtk_notebook_set_current_page ((GtkNotebook *) notebook, aud_playlist_get_active ()); do_follow (); }
static void do_follow (void) { while (! g_queue_is_empty (& follow_queue)) { gint list = aud_playlist_by_unique_id (GPOINTER_TO_INT (g_queue_pop_head (& follow_queue))); gint row = GPOINTER_TO_INT (g_queue_pop_head (& follow_queue)); if (list < 0) continue; GtkWidget * widget = playlist_get_treeview (list); if (row == CURRENT_POS) { row = aud_playlist_get_position (list); audgui_list_set_highlight (widget, row); if (! aud_get_bool ("gtkui", "autoscroll")) continue; } audgui_list_set_focus (widget, row); } }
static void tab_changed (GtkNotebook * notebook, GtkWidget * page, gint page_num, void * unused) { GtkWidget * treeview = playlist_get_treeview (page_num); if (treeview != NULL) { aud_playlist_set_active (page_num); if (ui_playlist_notebook_tab_title_editing != NULL) tab_title_reset(ui_playlist_notebook_tab_title_editing); } }
void ui_playlist_notebook_populate(void) { gint playlists = aud_playlist_count(); gint count; for (count = 0; count < playlists; count++) ui_playlist_notebook_create_tab(count); gtk_notebook_set_current_page (UI_PLAYLIST_NOTEBOOK, aud_playlist_get_active ()); highlighted = aud_playlist_get_unique_id (aud_playlist_get_playing ()); if (! switch_handler) switch_handler = g_signal_connect (notebook, "switch-page", (GCallback) tab_changed, NULL); if (! reorder_handler) reorder_handler = g_signal_connect (notebook, "page-reordered", (GCallback) tab_reordered, NULL); gtk_widget_grab_focus (playlist_get_treeview (aud_playlist_get_active ())); }
static gboolean window_keypress_cb (GtkWidget * widget, GdkEventKey * event, void * unused) { switch (event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK)) { case 0:; GtkWidget * focused = gtk_window_get_focus ((GtkWindow *) window); /* escape key returns focus to playlist */ if (event->keyval == GDK_KEY_Escape) { if (! focused || ! gtk_widget_is_ancestor (focused, (GtkWidget *) UI_PLAYLIST_NOTEBOOK)) gtk_widget_grab_focus (playlist_get_treeview (aud_playlist_get_active ())); return FALSE; } /* single-key shortcuts; must not interfere with text entry */ if (focused && GTK_IS_ENTRY (focused)) return FALSE; switch (event->keyval) { case 'z': aud_drct_pl_prev (); return TRUE; case 'x': aud_drct_play (); return TRUE; case 'c': case ' ': aud_drct_pause (); return TRUE; case 'v': aud_drct_stop (); return TRUE; case 'b': aud_drct_pl_next (); return TRUE; case GDK_KEY_Left: if (aud_drct_get_playing ()) do_seek (aud_drct_get_time () - 5000); return TRUE; case GDK_KEY_Right: if (aud_drct_get_playing ()) do_seek (aud_drct_get_time () + 5000); return TRUE; } return FALSE; case GDK_CONTROL_MASK: switch (event->keyval) { case GDK_KEY_ISO_Left_Tab: case GDK_KEY_Tab: aud_playlist_set_active ((aud_playlist_get_active () + 1) % aud_playlist_count ()); break; default: return FALSE; } break; case (GDK_CONTROL_MASK | GDK_SHIFT_MASK): switch (event->keyval) { case GDK_KEY_ISO_Left_Tab: case GDK_KEY_Tab: aud_playlist_set_active (aud_playlist_get_active () ? aud_playlist_get_active () - 1 : aud_playlist_count () - 1); break; default: return FALSE; } break; case GDK_MOD1_MASK: switch (event->keyval) { case GDK_KEY_Left: if (aud_drct_get_playing ()) do_seek (aud_drct_get_time () - 5000); break; case GDK_KEY_Right: if (aud_drct_get_playing ()) do_seek (aud_drct_get_time () + 5000); break; default: return FALSE; } default: return FALSE; } return TRUE; }
static void window_mapped_cb (GtkWidget * widget, void * unused) { gtk_widget_grab_focus (playlist_get_treeview (aud_playlist_get_active ())); }