Commit 8f5a86b3 authored by Rémi Duraffort's avatar Rémi Duraffort

lua_variables: add the possibility to attach a callback to a void variable.

parent df4237b6
...@@ -46,12 +46,15 @@ ...@@ -46,12 +46,15 @@
/***************************************************************************** /*****************************************************************************
* Variables handling * Variables handling
*****************************************************************************/ *****************************************************************************/
int vlclua_pushvalue( lua_State *L, int i_type, vlc_value_t val ) static int vlclua_pushvalue( lua_State *L, int i_type, vlc_value_t val, bool b_error_void )
{ {
switch( i_type & VLC_VAR_CLASS ) switch( i_type & VLC_VAR_CLASS )
{ {
case VLC_VAR_VOID: case VLC_VAR_VOID:
vlclua_error( L ); if( b_error_void )
vlclua_error( L );
else
lua_pushnil( L );
break; break;
case VLC_VAR_BOOL: case VLC_VAR_BOOL:
lua_pushboolean( L, val.b_bool ); lua_pushboolean( L, val.b_bool );
...@@ -90,7 +93,7 @@ static int vlclua_pushlist( lua_State *L, vlc_list_t *p_list ) ...@@ -90,7 +93,7 @@ static int vlclua_pushlist( lua_State *L, vlc_list_t *p_list )
{ {
lua_pushinteger( L, i+1 ); lua_pushinteger( L, i+1 );
if( !vlclua_pushvalue( L, p_list->pi_types[i], if( !vlclua_pushvalue( L, p_list->pi_types[i],
p_list->p_values[i] ) ) p_list->p_values[i], true ) )
lua_pushnil( L ); lua_pushnil( L );
lua_settable( L, -3 ); lua_settable( L, -3 );
} }
...@@ -143,7 +146,7 @@ static int vlclua_var_get( lua_State *L ) ...@@ -143,7 +146,7 @@ static int vlclua_var_get( lua_State *L )
if( var_Get( *pp_obj, psz_var, &val ) != VLC_SUCCESS ) if( var_Get( *pp_obj, psz_var, &val ) != VLC_SUCCESS )
return 0; return 0;
lua_pop( L, 2 ); lua_pop( L, 2 );
return vlclua_pushvalue( L, i_type, val ); return vlclua_pushvalue( L, i_type, val, true );
} }
static int vlclua_var_set( lua_State *L ) static int vlclua_var_set( lua_State *L )
...@@ -304,9 +307,9 @@ static int vlclua_callback( vlc_object_t *p_this, char const *psz_var, ...@@ -304,9 +307,9 @@ static int vlclua_callback( vlc_object_t *p_this, char const *psz_var,
/* callbacks[index] callback */ /* callbacks[index] callback */
lua_pushstring( L, psz_var ); lua_pushstring( L, psz_var );
/* callbacks[index] callback var */ /* callbacks[index] callback var */
vlclua_pushvalue( L, p_callback->i_type, oldval ); vlclua_pushvalue( L, p_callback->i_type, oldval, false );
/* callbacks[index] callback var oldval */ /* callbacks[index] callback var oldval */
vlclua_pushvalue( L, p_callback->i_type, newval ); vlclua_pushvalue( L, p_callback->i_type, newval, false );
/* callbacks[index] callback var oldval newval */ /* callbacks[index] callback var oldval newval */
lua_getfield( L, -5, "data" ); lua_getfield( L, -5, "data" );
/* callbacks[index] callback var oldval newval data */ /* callbacks[index] callback var oldval newval data */
...@@ -348,6 +351,7 @@ static int vlclua_add_callback( lua_State *L ) ...@@ -348,6 +351,7 @@ static int vlclua_add_callback( lua_State *L )
/* Check variable type, in order to avoid PANIC */ /* Check variable type, in order to avoid PANIC */
switch( i_type & VLC_VAR_CLASS ) switch( i_type & VLC_VAR_CLASS )
{ {
case VLC_VAR_VOID:
case VLC_VAR_BOOL: case VLC_VAR_BOOL:
case VLC_VAR_INTEGER: case VLC_VAR_INTEGER:
case VLC_VAR_STRING: case VLC_VAR_STRING:
...@@ -355,7 +359,6 @@ static int vlclua_add_callback( lua_State *L ) ...@@ -355,7 +359,6 @@ static int vlclua_add_callback( lua_State *L )
case VLC_VAR_TIME: case VLC_VAR_TIME:
break; break;
case VLC_VAR_ADDRESS: case VLC_VAR_ADDRESS:
case VLC_VAR_VOID:
case VLC_VAR_MUTEX: case VLC_VAR_MUTEX:
default: default:
return vlclua_error( L ); return vlclua_error( L );
......
...@@ -25,8 +25,6 @@ ...@@ -25,8 +25,6 @@
#ifndef VLC_LUA_VARIABLES_H #ifndef VLC_LUA_VARIABLES_H
#define VLC_LUA_VARIABLES_H #define VLC_LUA_VARIABLES_H
int vlclua_pushvalue( lua_State *L, int i_type, vlc_value_t val ); /* internal use only */
#define vlclua_var_toggle_or_set(a,b,c) \ #define vlclua_var_toggle_or_set(a,b,c) \
__vlclua_var_toggle_or_set(a,VLC_OBJECT(b),c) __vlclua_var_toggle_or_set(a,VLC_OBJECT(b),c)
int __vlclua_var_toggle_or_set( lua_State *, vlc_object_t *, const char * ); int __vlclua_var_toggle_or_set( lua_State *, vlc_object_t *, const char * );
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment