static WHookItem *create_item(WHook *hk) { WHookItem *item=ALLOC(WHookItem); if(item!=NULL){ LINK_ITEM_FIRST(hk->items, item, next, prev); item->fn=NULL; item->efn=extl_fn_none(); } return item; }
bool hook_add_extl(WHook *hk, ExtlFn efn) { WHookItem *item; if(efn==extl_fn_none()){ warn(TR("No function given.")); return FALSE; } if(hook_find_extl(hk, efn)) return FALSE; item=create_item(hk); if(item==NULL) return FALSE; item->efn=extl_ref_fn(efn); return TRUE; }
static void menu_do_finish(WMenu *menu) { ExtlFn handler; ExtlTab tab; bool ok; WMenu *head=menu_head(menu); handler=menu->handler; menu->handler=extl_fn_none(); ok=extl_table_geti_t(menu->tab, menu->selected_entry+1, &tab); if(!region_rqdispose((WRegion*)head)){ if(head->submenu!=NULL) destroy_obj((Obj*)head->submenu); } if(ok) extl_call(handler, "t", NULL, tab); extl_unref_fn(handler); extl_unref_table(tab); }