if(reg==NULL)
return FALSE;
- if((menu->gm_state==ev->state || menu->gm_state==AnyModifier)
- && ev->keycode==menu->gm_kcb){
- menu_select_next(menu);
+ if(ev->keycode==menu->gm_kcb){
+ if(menu->gm_state==ev->state)
+ menu_select_next(menu);
+ else if((menu->gm_state|ShiftMask)==ev->state)
+ menu_select_prev(menu);
+ else if(menu->gm_state==AnyModifier)
+ menu_select_next(menu);
}
return FALSE;
}
+static void grabkilled_handler(WRegion *reg)
+{
+ destroy_obj((Obj*)reg);
+}
+
+
/*--lowlevel routine not to be called by the user--*/
EXTL_EXPORT
WMenu *mod_menu_do_grabmenu(WMPlex *mplex, ExtlFn handler, ExtlTab tab,
return NULL;
if(state==0){
- /* TODO: cycle key? */
- return mod_menu_do_menu(mplex, handler, tab, param);
+ WMenu *menu=mod_menu_do_menu(mplex, handler, tab, param);
+ /*
+ if(menu!=NULL && cycle!=extl_fn_none()){
+ uint kcb, state;
+
+ menu->cycle_bindmap=region_add_cycle_bindmap((WRegion*)menu,
+ kcb, state, ???,
+ ???);
+ }*/
+ return menu;
}
fnp.handler=handler;
menu->gm_kcb=kcb;
menu->gm_state=state;
- ioncore_grab_establish((WRegion*)menu, grabmenu_handler, NULL, 0);
+ ioncore_grab_establish((WRegion*)menu, grabmenu_handler,
+ grabkilled_handler, 0);
return menu;
}