vlc | branch: master | Rémi Duraffort <[email protected]> | Thu Dec  2 
19:14:17 2010 +0100| [8f5a86b390530320aef53bdc4d703623befdc527] | committer: 
Rémi Duraffort 

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

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=8f5a86b390530320aef53bdc4d703623befdc527
---

 modules/misc/lua/libs/variables.c |   17 ++++++++++-------
 modules/misc/lua/libs/variables.h |    2 --
 2 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/modules/misc/lua/libs/variables.c 
b/modules/misc/lua/libs/variables.c
index 37bfcd2..15c393e 100644
--- a/modules/misc/lua/libs/variables.c
+++ b/modules/misc/lua/libs/variables.c
@@ -46,12 +46,15 @@
 /*****************************************************************************
  * 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 )
     {
         case VLC_VAR_VOID:
-            vlclua_error( L );
+            if( b_error_void )
+                vlclua_error( L );
+            else
+                lua_pushnil( L );
             break;
         case VLC_VAR_BOOL:
             lua_pushboolean( L, val.b_bool );
@@ -90,7 +93,7 @@ static int vlclua_pushlist( lua_State *L, vlc_list_t *p_list )
     {
         lua_pushinteger( L, i+1 );
         if( !vlclua_pushvalue( L, p_list->pi_types[i],
-                               p_list->p_values[i] ) )
+                               p_list->p_values[i], true ) )
              lua_pushnil( L );
         lua_settable( L, -3 );
     }
@@ -143,7 +146,7 @@ static int vlclua_var_get( lua_State *L )
     if( var_Get( *pp_obj, psz_var, &val ) != VLC_SUCCESS )
         return 0;
     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 )
@@ -304,9 +307,9 @@ static int vlclua_callback( vlc_object_t *p_this, char 
const *psz_var,
     /* callbacks[index] callback */
     lua_pushstring( L, psz_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 */
-    vlclua_pushvalue( L, p_callback->i_type, newval );
+    vlclua_pushvalue( L, p_callback->i_type, newval, false );
     /* callbacks[index] callback var oldval newval */
     lua_getfield( L, -5, "data" );
     /* callbacks[index] callback var oldval newval data */
@@ -348,6 +351,7 @@ static int vlclua_add_callback( lua_State *L )
     /* Check variable type, in order to avoid PANIC */
     switch( i_type & VLC_VAR_CLASS )
     {
+        case VLC_VAR_VOID:
         case VLC_VAR_BOOL:
         case VLC_VAR_INTEGER:
         case VLC_VAR_STRING:
@@ -355,7 +359,6 @@ static int vlclua_add_callback( lua_State *L )
         case VLC_VAR_TIME:
             break;
         case VLC_VAR_ADDRESS:
-        case VLC_VAR_VOID:
         case VLC_VAR_MUTEX:
         default:
             return vlclua_error( L );
diff --git a/modules/misc/lua/libs/variables.h 
b/modules/misc/lua/libs/variables.h
index 1155d7e..f87e78a 100644
--- a/modules/misc/lua/libs/variables.h
+++ b/modules/misc/lua/libs/variables.h
@@ -25,8 +25,6 @@
 #ifndef 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) \
     __vlclua_var_toggle_or_set(a,VLC_OBJECT(b),c)
 int __vlclua_var_toggle_or_set( lua_State *, vlc_object_t *, const char * );

_______________________________________________
vlc-commits mailing list
[email protected]
http://mailman.videolan.org/listinfo/vlc-commits

Reply via email to