X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=mod_menu%2Fgrabmenu.c;fp=mod_menu%2Fgrabmenu.c;h=79a01ce4b47ea926ebd37e6d66bfc1d81fdf5c0d;hb=803afbc1cd633f6c025bcd9537e9b7e9aedadd0d;hp=cc94437677fb0c57cc915d444c236162b9feb5f8;hpb=8366314611bf30a0f31d25bf5f5023186fa87692;p=ion3.git diff --git a/mod_menu/grabmenu.c b/mod_menu/grabmenu.c index cc94437..79a01ce 100644 --- a/mod_menu/grabmenu.c +++ b/mod_menu/grabmenu.c @@ -1,7 +1,7 @@ /* * ion/mod_menu/grabmenu.c * - * Copyright (c) Tuomo Valkonen 1999-2006. + * Copyright (c) Tuomo Valkonen 1999-2007. * * Ion is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by @@ -37,8 +37,10 @@ static bool grabmenu_handler(WRegion *reg, XEvent *xev) if(reg==NULL) return FALSE; - if(menu->gm_state==ev->state && ev->keycode==menu->gm_kcb) + if((menu->gm_state==ev->state || menu->gm_state==AnyModifier) + && ev->keycode==menu->gm_kcb){ menu_select_next(menu); + } return FALSE; } @@ -53,12 +55,17 @@ WMenu *mod_menu_do_grabmenu(WMPlex *mplex, ExtlFn handler, ExtlTab tab, WMPlexAttachParams par; WMenu *menu; XKeyEvent *ev; + uint state, kcb; + bool sub; - ev=ioncore_current_key_event(); - - if(ev==NULL) + if(!ioncore_current_key(&kcb, &state, &sub)) return NULL; + if(state==0){ + /* TODO: cycle key? */ + return mod_menu_do_menu(mplex, handler, tab, param); + } + fnp.handler=handler; fnp.tab=tab; fnp.pmenu_mode=FALSE; @@ -77,10 +84,10 @@ WMenu *mod_menu_do_grabmenu(WMPlex *mplex, ExtlFn handler, ExtlTab tab, (void*)&fnp); if(menu==NULL) - return FALSE; + return NULL; - menu->gm_kcb=ev->keycode; - menu->gm_state=ev->state; + menu->gm_kcb=kcb; + menu->gm_state=state; ioncore_grab_establish((WRegion*)menu, grabmenu_handler, NULL, 0);