/*
* ion/ioncore/binding.c
*
- * Copyright (c) Tuomo Valkonen 1999-2007.
+ * Copyright (c) Tuomo Valkonen 1999-2008.
*
* See the included file LICENSE for details.
*/
}
/* This is only used for searching AnyKey etc. */
-static int compare_bindings_ksb(const WBinding *a, const WBinding *b)
+static int compare_bindings_any(const WBinding *a, const WBinding *b)
{
- int r=CVAL(a, b, act);
- if(r==0){
+ int r=compare_bindings(a, b);
+
+ if(r==0)
r=CVAL(a, b, ksb);
- if(r==0){
- r=CVAL(a, b, state);
- if(r==0){
- r=CVAL(a, b, area);
- }
- }
- }
+
return r;
}
void binding_ungrab_on(const WBinding *binding, Window win)
{
- if(binding->act==BINDING_KEYPRESS){
+ if(binding->act==BINDING_KEYPRESS && binding->kcb!=0){
#ifndef CF_HACK_IGNORE_EVIL_LOCKS
XUngrabKey(ioncore_g.dpy, binding->kcb, binding->state, win);
#else
}
-static WBinding *search_binding_ksb(WBindmap *bindmap, WBinding *binding)
+static WBinding *search_binding_any(WBindmap *bindmap, WBinding *binding)
{
Rb_node node;
int found=0;
return NULL;
node=rb_find_gkey_n(bindmap->bindings, binding,
- (Rb_compfn*)compare_bindings_ksb, &found);
+ (Rb_compfn*)compare_bindings_any, &found);
if(found==0)
return NULL;
if(binding==NULL){
tmp.state=state;
+ tmp.kcb=0;
tmp.ksb=(act==BINDING_KEYPRESS ? AnyKey : AnyButton);
- binding=search_binding_ksb(bindmap, &tmp);
+ binding=search_binding_any(bindmap, &tmp);
if(binding==NULL){
tmp.state=AnyModifier;
- binding=search_binding_ksb(bindmap, &tmp);
+ binding=search_binding_any(bindmap, &tmp);
}
}
}
#ifdef CF_HACK_IGNORE_EVIL_LOCKS
state&=~evilignoremask;
#endif
+ state&=KNOWN_MODIFIERS_MASK;
for(j=0; j<N_MODS*modmap->max_keypermod; j++){
if(modmap->modifiermap[j]==keycode)
#ifdef CF_HACK_IGNORE_EVIL_LOCKS
state&=~evilignoremask;
#endif
+ state&=KNOWN_MODIFIERS_MASK;
+
return state;
}