void runMenuEvent(WORD id, uiWindow *w) { uiMenu *m; uiMenuItem *item; size_t i, j; // this isn't optimal, but it works, and it should be just fine for most cases for (i = 0; i < len; i++) { m = menus[i]; for (j = 0; j < m->len; j++) { item = m->items[j]; if (item->id == id) goto found; } } // no match implbug("unknown menu ID %hu in runMenuEvent()", id); found: // first toggle checkboxes, if any if (item->type == typeCheckbox) uiMenuItemSetChecked(item, !uiMenuItemChecked(item)); // then run the event (*(item->onClicked))(item, w, item->onClickedData); }
static Janet janet_ui_menu_item_checked(int32_t argc, Janet *argv) { janet_arity(argc, 1, 2); uiMenuItem *mi = janet_getuitype(argv, 0, &menu_item_td); if (argc == 2) { int checked = janet_getboolean(argv, 1); uiMenuItemSetChecked(mi, checked); return argv[0]; } return janet_wrap_boolean(uiMenuItemChecked(mi)); }