On Thu, Apr 14, 2011 at 12:35:18AM +0600, Alexandr Shadchin wrote:
> Updating state LED only when necessary. ok?
> 
> -- 
> Alexandr Shadchin
> 
> Index: wskbd.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/wscons/wskbd.c,v
> retrieving revision 1.65
> diff -u -p -r1.65 wskbd.c
> --- wskbd.c   13 Apr 2011 18:16:33 -0000      1.65
> +++ wskbd.c   13 Apr 2011 18:20:51 -0000
> @@ -196,6 +196,8 @@ struct wskbd_softc {
>  #define MOD_ANYSHIFT         (MOD_SHIFT_L | MOD_SHIFT_R | MOD_SHIFTLOCK)
>  #define MOD_ANYCONTROL               (MOD_CONTROL_L | MOD_CONTROL_R)
>  #define MOD_ANYMETA          (MOD_META_L | MOD_META_R)
> +#define MOD_ANYLED           (MOD_SHIFTLOCK | MOD_CAPSLOCK | MOD_NUMLOCK | \
> +                              MOD_COMPOSE | MOD_HOLDSCREEN)
>  
>  #define MOD_ONESET(id, mask) (((id)->t_modifiers & (mask)) != 0)
>  #define MOD_ALLSET(id, mask) (((id)->t_modifiers & (mask)) == (mask))
> @@ -1319,6 +1321,8 @@ update_modifier(struct wskbd_internal *i
>               else
>                       id->t_modifiers &= ~mask;
>       }
> +     if (mask & MOD_ANYLED)
> +             update_leds(id);
>  }
>  
>  #if NWSDISPLAY > 0
> @@ -1496,7 +1500,6 @@ wskbd_translate(struct wskbd_internal *i
>                   MOD_META_L | MOD_META_R |
>                   MOD_MODESHIFT | MOD_MODELOCK |
>                   MOD_COMMAND | MOD_COMMAND1 | MOD_COMMAND2);
> -             update_leds(id);
>               return (0);
>       }
>  
> @@ -1595,10 +1598,8 @@ wskbd_translate(struct wskbd_internal *i
>  #endif
>  
>       /* If this is a key release or we are in command mode, we are done */
> -     if (type != WSCONS_EVENT_KEY_DOWN || iscommand) {
> -             update_leds(id);
> +     if (type != WSCONS_EVENT_KEY_DOWN || iscommand)
>               return (0);
> -     }
>  
>       /* Get the keysym */
>       if (id->t_modifiers & (MOD_MODESHIFT|MOD_MODELOCK) &&
> @@ -1672,10 +1673,8 @@ wskbd_translate(struct wskbd_internal *i
>               break;
>       }
>  
> -     if (res == KS_voidSymbol) {
> -             update_leds(id);
> +     if (res == KS_voidSymbol)
>               return (0);
> -     }
>  
>       if (id->t_composelen > 0) {
>               /*
> @@ -1698,8 +1697,6 @@ wskbd_translate(struct wskbd_internal *i
>                       }
>               }
>       }
> -
> -     update_leds(id);
>  
>       /* We are done, return the symbol */
>       if (KS_GROUP(res) == KS_GROUP_Ascii) {
> 

ok krw@

.... Ken

Reply via email to