From bc4db3ee279c6ddb2d82323200b057a1e6fd3d7e Mon Sep 17 00:00:00 2001 From: waker Date: Thu, 23 Jun 2011 22:38:10 +0200 Subject: fixed playlist column headers context menu (grouping) --- plugins/gtkui/mainplaylist.c | 10 +++++++++- plugins/gtkui/plcommon.c | 35 +++++++++++++++-------------------- plugins/gtkui/plcommon.h | 12 +++++++++--- plugins/gtkui/search.c | 18 ++++++++++-------- 4 files changed, 43 insertions(+), 32 deletions(-) diff --git a/plugins/gtkui/mainplaylist.c b/plugins/gtkui/mainplaylist.c index e1114fc0..17083b7c 100644 --- a/plugins/gtkui/mainplaylist.c +++ b/plugins/gtkui/mainplaylist.c @@ -253,6 +253,14 @@ main_vscroll_changed (int pos) { deadbeef->conf_set_int (conf, pos); } +void +main_header_context_menu (DdbListview *ps, int column) { + GtkWidget *menu = create_headermenu (1); + set_last_playlist_cm (ps); // playlist ptr for context menu + set_active_column_cm (column); + gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, ps, 3, gtk_get_current_event_time()); +} + DdbListviewBinding main_binding = { // rows .count = main_get_count, @@ -289,7 +297,7 @@ DdbListviewBinding main_binding = { // callbacks .handle_doubleclick = main_handle_doubleclick, .selection_changed = main_selection_changed, - .header_context_menu = header_context_menu, + .header_context_menu = main_header_context_menu, .list_context_menu = list_context_menu, .delete_selected = main_delete_selected, .vscroll_changed = main_vscroll_changed, diff --git a/plugins/gtkui/plcommon.c b/plugins/gtkui/plcommon.c index 41e3fdd8..5cc749d8 100644 --- a/plugins/gtkui/plcommon.c +++ b/plugins/gtkui/plcommon.c @@ -281,8 +281,7 @@ on_clear1_activate (GtkMenuItem *menuitem, gpointer user_data) { deadbeef->pl_clear (); - main_refresh (); - search_refresh (); + deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0); } void @@ -290,8 +289,7 @@ on_remove1_activate (GtkMenuItem *menuitem, gpointer user_data) { int cursor = deadbeef->pl_delete_selected (); - main_refresh (); - search_refresh (); + deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0); } @@ -299,20 +297,16 @@ void on_crop1_activate (GtkMenuItem *menuitem, gpointer user_data) { - DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); deadbeef->pl_crop_selected (); - main_refresh (); - search_refresh (); + deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0); } void on_remove2_activate (GtkMenuItem *menuitem, gpointer user_data) { - GtkWidget *widget = GTK_WIDGET (menuitem); int cursor = deadbeef->pl_delete_selected (); - main_refresh (); - search_refresh (); + deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0); } void @@ -348,8 +342,7 @@ on_remove_from_disk_activate (GtkMenuItem *menuitem, int cursor = deadbeef->pl_delete_selected (); deadbeef->pl_unlock (); - main_refresh (); - search_refresh (); + deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0); } void @@ -701,6 +694,16 @@ on_group_by_custom_activate (GtkMenuItem *menuitem, static DdbListview *last_playlist; static int active_column; +void +set_last_playlist_cm (DdbListview *pl) { + last_playlist = pl; +} + +void +set_active_column_cm (int col) { + active_column = col; +} + void append_column_from_textdef (DdbListview *listview, const uint8_t *def) { // syntax: "title" "format" id width alignright @@ -1033,14 +1036,6 @@ create_headermenu (int groupby) return headermenu; } -void -header_context_menu (DdbListview *ps, int column) { - GtkWidget *menu = create_headermenu (GTK_WIDGET (ps) == lookup_widget (mainwin, "playlist") ? 1 : 0); - last_playlist = ps; - active_column = column; - gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, ps, 3, gtk_get_current_event_time()); -} - void add_column_helper (DdbListview *listview, const char *title, int width, int id, const char *format, int align_right) { if (!format) { diff --git a/plugins/gtkui/plcommon.h b/plugins/gtkui/plcommon.h index 6a3114c1..edd7d3f2 100644 --- a/plugins/gtkui/plcommon.h +++ b/plugins/gtkui/plcommon.h @@ -40,13 +40,19 @@ void draw_column_data (DdbListview *listview, GdkDrawable *drawable, DdbListview void list_context_menu (DdbListview *listview, DdbListviewIter it, int idx); -void -header_context_menu (DdbListview *ps, int column); - void append_column_from_textdef (DdbListview *listview, const uint8_t *def); void add_column_helper (DdbListview *listview, const char *title, int width, int id, const char *format, int align_right); +GtkWidget* +create_headermenu (int groupby); + +void +set_last_playlist_cm (DdbListview *pl); + +void +set_active_column_cm (int col); + #endif // __PLCOLUMNS_H diff --git a/plugins/gtkui/search.c b/plugins/gtkui/search.c index e3d46819..d3665bf3 100644 --- a/plugins/gtkui/search.c +++ b/plugins/gtkui/search.c @@ -319,13 +319,7 @@ void search_handle_doubleclick (DdbListview *listview, DdbListviewIter iter, int } void search_selection_changed (DdbListviewIter it, int idx) { - DdbListview *main = DDB_LISTVIEW (lookup_widget (mainwin, "playlist")); - if (idx == -1) { - ddb_listview_refresh (main, DDB_REFRESH_LIST); - } - else { - ddb_listview_draw_row (main, main_get_idx ((DB_playItem_t *)it), it); - } + deadbeef->sendmessage (DB_EV_SELCHANGED, 0, 0, 0); } void @@ -335,6 +329,14 @@ search_delete_selected (void) { search_refresh (); } +void +search_header_context_menu (DdbListview *ps, int column) { + GtkWidget *menu = create_headermenu (0); + set_last_playlist_cm (ps); // playlist ptr for context menu + set_active_column_cm (column); + gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, ps, 3, gtk_get_current_event_time()); +} + DdbListviewBinding search_binding = { // rows .count = search_get_count, @@ -371,7 +373,7 @@ DdbListviewBinding search_binding = { // callbacks .handle_doubleclick = search_handle_doubleclick, .selection_changed = search_selection_changed, - .header_context_menu = header_context_menu, + .header_context_menu = search_header_context_menu, .list_context_menu = list_context_menu, .delete_selected = search_delete_selected, .modification_idx = gtkui_get_curr_playlist_mod, -- cgit v1.2.3