[vlc-devel] Proposal for a new hotkeys design (one more)

brezhoneg1 brezhoneg1 at yahoo.fr
Fri Nov 7 22:51:29 CET 2008


>On Wed, Nov 05, 2008, brezhoneg1 wrote:
>> 2- We think globally
>> --------------------
>> We decide to collect all key-pressed from all entities within an
>> instance into a single processing thread. This is today's situation.
>> This is okay. The only thing is to that key-pressed variable must be
>> changed to a {key-pressed + p_origin_object} variable (see previous
>> email). WE MUST NOT forget the origin of key-pressed.
>
> On Fri Nov 7 12:46:42 CET 2008 fenrir wrote:
> I think it could be simpler for the time being.
>
> Btw, for this solution you do not need to modify vlc_variable_t.
>You can use a pointer to a local structure as long as everyone
registering
>a callback on "key-pressed" do not store the pointer.
>
> Something like that can work:
>
>SetKey( vlc_object_t *p_obj, int i_key )
>{
>    vlc_key_t k;
>    vlc_variable_t v;
>    k.i_key = i_key;
>    k.p_origin = p_obj;
>
>    v.p_address = &k
>    var_Set( p_obj->p_libvlc, "key-pressed", &v );
>} 
>
>KeyCallback( ..., vlc_variable_t newval, void *p_user )
>{
>   user_t *p_sys = p_data;
>   const vlc_key_t *p_key = newval.p_address;
>
>  /* Here you can use p_key->i_key and p_key->p_origin */
>  fprintf( stderr, "%d %p", p_key->i_key, p_key->p_origin );
> 
>  /* You cannot store p_key directly AND you have to vlc_object_hold
p_origin
>      if you need it (and then you will have to release it later) */
>  user_lock( p_sys );
>  user_push_key( p_sys, p_key->i_key, vlc_object_hold( p_key->p_origin
) );
>  user_unlock( p_sys );
>}
>
>-- 
>fenrir
>


Yes, this is another way of passing (key, p_origin).
btw, vlc_key_t seems already used for something else (see vlc_keys.h).
Another name has to be chosen.

Also, the hotkeys module processes key-action, not key-pressed (except
for 4 special cases).
This whole (key-pressed, p_origin) is being designed mainly for hotkeys
module. So hotkeys module has to let go of key-action and
enqueue/dequeue the new (key-pressed, p_origin) directly. (Key-action
can be computed at the last moment, anyway)

That's why I really think it a fifty/fifty matter. Either locally or
globally, some work has to be done and the 24 or so var_set ( ..,
key-pressed, ...) + 3 var_AddCallback( ... key-pressed, ...) have to be
updated accordingly. 

-> Globally : everything has to be updated at the same time because the
hotkeys module won't work as before.

-> Locally  (patch I wrote some time ago) : the hotkeys module remains
unchanged. It is just duplicated. Therefore, it is not required to
change the 24+3 calls to key-pressed at the same time. Those who don't
update still work as before. Those who update get better servicing.
(only X11 key-pressed was implemented in the patch)

Erwan10









More information about the vlc-devel mailing list