# HG changeset patch # User zas_ # Date 1228845088 0 # Node ID 6eeefdb30618b02a168614d8a4585f57d3f3c03c # Parent 404168a124aa21d149e2991bbd9c59132d68eb0c Allow to invert the current selection in Collection view. A new Selection submenu was added to the contextual menu, Select All and Select None were moved to it, and Invert selection was added. diff -r 404168a124aa -r 6eeefdb30618 src/collect-table.c --- a/src/collect-table.c Mon Dec 08 21:34:32 2008 +0000 +++ b/src/collect-table.c Tue Dec 09 17:51:28 2008 +0000 @@ -368,6 +368,37 @@ collection_table_update_status(ct); } +/* Invert the current collection's selection */ +static void collection_table_select_invert_all(CollectTable *ct) +{ + GList *work; + GList *new_selection = NULL; + + work = ct->cd->list; + while (work) + { + CollectInfo *info = work->data; + + if (INFO_SELECTED(info)) + { + collection_table_selection_remove(ct, info, SELECTION_SELECTED, NULL); + } + else + { + new_selection = g_list_append(new_selection, info); + collection_table_selection_add(ct, info, SELECTION_SELECTED, NULL); + + } + + work = work->next; + } + + g_list_free(ct->selection); + ct->selection = new_selection; + + collection_table_update_status(ct); +} + static void collection_table_select(CollectTable *ct, CollectInfo *info) { ct->prev_selection = info; @@ -731,6 +762,14 @@ ct->prev_selection= ct->click_info; } +static void collection_table_popup_select_invert_cb(GtkWidget *widget, gpointer data) +{ + CollectTable *ct = data; + + collection_table_select_invert_all(ct); + ct->prev_selection= ct->click_info; +} + static void collection_table_popup_remove_cb(GtkWidget *widget, gpointer data) { CollectTable *ct = data; @@ -815,6 +854,7 @@ { GtkWidget *menu; GtkWidget *item; + GtkWidget *submenu; menu = popup_menu_short_lived(); @@ -834,10 +874,16 @@ menu_item_add_stock(menu, _("Append from collection..."), GTK_STOCK_OPEN, G_CALLBACK(collection_table_popup_add_collection_cb), ct); menu_item_add_divider(menu); - menu_item_add(menu, _("Select all"), + + item = menu_item_add(menu, _("_Selection"), NULL, NULL); + submenu = gtk_menu_new(); + menu_item_add(submenu, _("Select all"), G_CALLBACK(collection_table_popup_selectall_cb), ct); - menu_item_add(menu, _("Select none"), + menu_item_add(submenu, _("Select none"), G_CALLBACK(collection_table_popup_unselectall_cb), ct); + menu_item_add(submenu, _("Invert selection"), + G_CALLBACK(collection_table_popup_select_invert_cb), ct); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu); menu_item_add_divider(menu); submenu_add_edit(menu, &item,