static void add_accelerators_from_menu_item (GtkWindow *window, GtkAccelGroup *accel_group, GMenuModel *model, int item) { GMenuAttributeIter *iter; const char *key; GVariant *value; const char *accel = NULL; const char *action = NULL; GVariant *target = NULL; iter = g_menu_model_iterate_item_attributes (model, item); while (g_menu_attribute_iter_get_next (iter, &key, &value)) { if (g_str_equal (key, "action") && g_variant_is_of_type (value, G_VARIANT_TYPE_STRING)) action = g_variant_get_string (value, NULL); else if (g_str_equal (key, "accel") && g_variant_is_of_type (value, G_VARIANT_TYPE_STRING)) accel = g_variant_get_string (value, NULL); else if (g_str_equal (key, "target")) target = g_variant_ref (value); g_variant_unref (value); } g_object_unref (iter); _gtk_window_add_accelerator_for_action (window, accel_group, action, accel, target); if (target != NULL) g_variant_unref (target); }
void gth_window_add_accelerators (GthWindow *window, const GthAccelerator *accelerators, int n_accelerators) { GtkAccelGroup *accel_group; int i; accel_group = gth_window_get_accel_group (window); for (i = 0; i < n_accelerators; i++) { const GthAccelerator *acc = accelerators + i; _gtk_window_add_accelerator_for_action (GTK_WINDOW (window), accel_group, acc->action_name, acc->accelerator, NULL); } }