/* * The original GMenu is modified adding to the section @submodel_name * the items in @gmenu_to_merge. * @gmenu_to_merge should be a list of menu items. */ void nautilus_gmenu_merge (GMenu *original, GMenu *gmenu_to_merge, const gchar *submodel_name, gboolean prepend) { gint i, n_items; GMenuModel *submodel; GMenuItem *item; g_return_if_fail (G_IS_MENU (original)); g_return_if_fail (G_IS_MENU (gmenu_to_merge)); submodel = find_gmenu_model (G_MENU_MODEL (original), submodel_name); g_return_if_fail (submodel != NULL); n_items = g_menu_model_get_n_items (G_MENU_MODEL (gmenu_to_merge)); for (i = 0; i < n_items; i++) { item = g_menu_item_new_from_model (G_MENU_MODEL (gmenu_to_merge), i); if (prepend) { g_menu_prepend_item (G_MENU (submodel), item); } else { g_menu_append_item (G_MENU (submodel), item); } g_object_unref (item); } g_object_unref (submodel); }
void nautilus_gmenu_replace_section (GMenu *menu, const gchar *section_id, GMenuModel *section) { GMenuModel *orig_section; GMenuItem *item; gint idx; orig_section = find_gmenu_model (G_MENU_MODEL (menu), section_id); g_return_if_fail (orig_section != NULL); g_menu_remove_all (G_MENU (orig_section)); for (idx = 0; idx < g_menu_model_get_n_items (section); idx++) { item = g_menu_item_new_from_model (section, idx); g_menu_append_item (G_MENU (orig_section), item); g_object_unref (item); } g_object_unref (orig_section); }