Uhmmm, the patch is not good because it breaks a lot of configurations (when
we use XK_ANY_MOD). I am going to send a new version of the patch.



On Sun, Jun 23, 2013 at 10:44:46AM +0200, Roberto E. Vargas Caballero wrote:
> From: "Roberto E. Vargas Caballero" <k...@shike2.com>
>
> There were two problems with match denfinition.
>
> 1) There was a forward declaration in the form:
>
>       static inline bool match(uint, uint);
>
> but later the function was defined as:
>
>       inline bool
>       match(uint mask, uint state) {
>
> This causes that there were two different functions in the code, one local
> and inline, and other inline but extern. All was working without problems
> due to we were using -Os, and the compiler was using the extern definition
> and it was no expanding the static declaration. If you removed the -Os flag,
> then you got linker errors due it was no able to find the static definition
> of the static declaration.
>
> 2) The mask checking was incorrect because we were doing the test:
>
>       (state & mask) != state
>
> and this test only was saying that at least all the enabled bits of state
> were enabled also in mask, but no all the possible bits in mask. This was
> the origin of the bug reported by Xavier Cartron, where he said it was
> possible activated some shortcuts with some of the modifiers defined in the
> config.h file.
> ---
>  st.c |    8 +++-----
>  1 file changed, 3 insertions(+), 5 deletions(-)
>
> diff --git a/st.c b/st.c
> index 4d8a4f9..7d823cd 100644
> --- a/st.c
> +++ b/st.c
> @@ -3464,17 +3464,15 @@ focus(XEvent *ev) {
>       }
>  }
>
> -inline bool
> +static inline bool
>  match(uint mask, uint state) {
> -     state &= ~(ignoremod);
> +     state &= ~ignoremod;
>
>       if(mask == XK_NO_MOD && state)
>               return false;
>       if(mask != XK_ANY_MOD && mask != XK_NO_MOD && !state)
>               return false;
> -     if((state & mask) != state)
> -             return false;
> -     return true;
> +     return (state & mask) == mask && (state & mask) == state;;
>  }
>
>  void
> --
> 1.7.10.4
>

Reply via email to