static void add_accelerators_from_menu (GtkWindow *window, GtkAccelGroup *accel_group, GMenuModel *model) { int i; GMenuLinkIter *iter; const char *key; GMenuModel *m; for (i = 0; i < g_menu_model_get_n_items (model); i++) { add_accelerators_from_menu_item (window, accel_group, model, i); iter = g_menu_model_iterate_item_links (model, i); while (g_menu_link_iter_get_next (iter, &key, &m)) { add_accelerators_from_menu (window, accel_group, m); g_object_unref (m); } g_object_unref (iter); } }
static void extract_accels_from_menu(GMenuModel * model, GActionMap * action_map, GtkAccelGroup * accel_group) { gint i, n = g_menu_model_get_n_items(model); GMenuLinkIter *iter; const gchar *key; GMenuModel *m; for (i = 0; i < n; i++) { extract_accel_from_menu_item(model, i, action_map, accel_group); iter = g_menu_model_iterate_item_links(model, i); while (g_menu_link_iter_get_next(iter, &key, &m)) { extract_accels_from_menu(m, action_map, accel_group); g_object_unref(m); } g_object_unref(iter); } }
static GMenuExporterLink * g_menu_exporter_menu_create_links (GMenuExporterMenu *menu, gint position) { GMenuExporterLink *list = NULL; GMenuLinkIter *iter; const char *name; GMenuModel *model; iter = g_menu_model_iterate_item_links (menu->model, position); while (g_menu_link_iter_get_next (iter, &name, &model)) { GMenuExporterGroup *group; GMenuExporterLink *tmp; /* keep sections in the same group, but create new groups * otherwise */ if (!g_str_equal (name, "section")) group = g_menu_exporter_create_group (g_menu_exporter_group_get_exporter (menu->group)); else group = menu->group; tmp = g_slice_new (GMenuExporterLink); tmp->name = g_strconcat (":", name, NULL); tmp->menu = g_menu_exporter_group_add_menu (group, model); tmp->next = list; list = tmp; g_object_unref (model); } g_object_unref (iter); return list; }