void systray_remove_item(menu_info_item_t* mii) { menu_info_t* mi = mii->menu_info; menu_infos_t* mis = mi->menu_infos; switch(mi->type) { case MENU_SERVER: systray_remove_radio_item(mi, mii->widget); break; case MENU_SINK: if(!mii->menu_info->parent) systray_remove_item_from_all_submenus(mii, &mis->menu_info[MENU_INPUT]); systray_remove_radio_item(mi, mii->widget); break; case MENU_SOURCE: if(!mii->menu_info->parent) systray_remove_item_from_all_submenus(mii, &mis->menu_info[MENU_OUTPUT]); systray_remove_radio_item(mi, mii->widget); break; case MENU_INPUT: case MENU_OUTPUT: systray_remove_all_items_from_submenu(mii->submenu); systray_remove_menu_item(mi, mii->widget); break; case MENU_MODULE: systray_remove_menu_item(mi, mii->widget); break; } }
void menu_infos_clear(menu_infos_t* mis) { size_t i; for(i=0; i<MENU_COUNT; ++i) { menu_info_t* mi = &mis->menu_info[i]; GHashTableIter iter; gpointer key; menu_info_item_t* mii; g_hash_table_iter_init(&iter, mi->items); while(g_hash_table_iter_next(&iter, &key, (gpointer*)&mii)) { switch(mi->type) { case MENU_SERVER: case MENU_SINK: case MENU_SOURCE: systray_remove_radio_item(mi, mii->widget); break; case MENU_INPUT: case MENU_OUTPUT: case MENU_MODULE: systray_remove_menu_item(mi, mii->widget); break; } g_hash_table_iter_remove(&iter); } mis->menu_info[i].group = NULL; } }
void systray_remove_all_items_from_submenu(menu_info_t* submenu) { GHashTableIter iter; gpointer key; menu_info_item_t* mii; g_hash_table_iter_init(&iter, submenu->items); while(g_hash_table_iter_next(&iter, &key, (gpointer*)&mii)) systray_remove_menu_item(submenu, mii->widget); }