X-Git-Url: https://git.decadent.org.uk/gitweb/?p=ion3.git;a=blobdiff_plain;f=mod_menu%2Fgrabmenu.c;h=05e801f56b417acea18cb76ed52842f908c05a3e;hp=79a01ce4b47ea926ebd37e6d66bfc1d81fdf5c0d;hb=20070318;hpb=803afbc1cd633f6c025bcd9537e9b7e9aedadd0d diff --git a/mod_menu/grabmenu.c b/mod_menu/grabmenu.c index 79a01ce..05e801f 100644 --- a/mod_menu/grabmenu.c +++ b/mod_menu/grabmenu.c @@ -37,15 +37,25 @@ static bool grabmenu_handler(WRegion *reg, XEvent *xev) 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, @@ -62,8 +72,16 @@ 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; @@ -89,7 +107,8 @@ WMenu *mod_menu_do_grabmenu(WMPlex *mplex, ExtlFn handler, ExtlTab tab, 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; }