X-Git-Url: https://git.decadent.org.uk/gitweb/?p=ion3.git;a=blobdiff_plain;f=ioncore%2Fbindmaps.c;h=f22a5ea38a127c0f2cd7b6272b4d30fe822396d3;hp=9c6bd4689b0483cd7de598508b9049a899c0c616;hb=HEAD;hpb=803afbc1cd633f6c025bcd9537e9b7e9aedadd0d diff --git a/ioncore/bindmaps.c b/ioncore/bindmaps.c index 9c6bd46..f22a5ea 100644 --- a/ioncore/bindmaps.c +++ b/ioncore/bindmaps.c @@ -1,21 +1,20 @@ /* * ion/ioncore/bindmaps.c * - * Copyright (c) Tuomo Valkonen 1999-2007. + * Copyright (c) Tuomo Valkonen 1999-2009. * - * 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 - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include +#include #include "common.h" #include "conf-bindings.h" #include "binding.h" -#include #include "framep.h" #include "bindmaps.h" +#include "global.h" +#include "regbind.h" /* @@ -198,3 +197,53 @@ ExtlTab ioncore_do_getbindings() return tab; } + +WBindmap *ioncore_create_cycle_bindmap(uint kcb, uint state, + ExtlFn cycle, ExtlFn bcycle) +{ + WBindmap *bindmap=create_bindmap(); + WBinding b; + + if(bindmap==NULL) + return NULL; + + b.ksb=XKeycodeToKeysym(ioncore_g.dpy, kcb, 0); + b.kcb=kcb; + b.state=state; + b.act=BINDING_KEYPRESS; + b.area=0; + b.wait=FALSE; + b.submap=NULL; + b.func=extl_ref_fn(cycle); + + if(!bindmap_add_binding(bindmap, &b)){ + extl_unref_fn(b.func); + bindmap_destroy(bindmap); + return NULL; + } + + if((b.state&ShiftMask)==0 && bcycle!=extl_fn_none()){ + b.func=extl_ref_fn(bcycle); + b.state|=ShiftMask; + bindmap_add_binding(bindmap, &b); + } + + return bindmap; +} + + +WBindmap *region_add_cycle_bindmap(WRegion *reg, uint kcb, uint state, + ExtlFn cycle, ExtlFn bcycle) +{ + WBindmap *bindmap=ioncore_create_cycle_bindmap(kcb, state, cycle, bcycle); + + if(bindmap!=NULL){ + if(!region_add_bindmap(reg, bindmap)){ + bindmap_destroy(bindmap); + return NULL; + } + } + + return bindmap; +} +