]> git.sesse.net Git - vlc/blobdiff - modules/control/gestures.c
vlc_plugin: fix non-LGPL plugins meta infos
[vlc] / modules / control / gestures.c
index a820b556c8b8f014b175d1c5b1d222eef12ead04..c53202d8d5b9da18ed75b955b358b19aa3bd8656 100644 (file)
@@ -29,6 +29,7 @@
 # include "config.h"
 #endif
 
+#define VLC_MODULE_LICENSE VLC_LICENSE_GPL_2_PLUS
 #include <vlc_common.h>
 #include <vlc_plugin.h>
 #include <vlc_interface.h>
@@ -48,7 +49,7 @@ struct intf_sys_t
     bool                b_button_pressed;
     int                 i_last_x, i_last_y;
     unsigned int        i_pattern;
-    int                 i_num_gestures;
+    unsigned int        i_num_gestures;
     int                 i_threshold;
     int                 i_button_mask;
 };
@@ -147,7 +148,7 @@ static int Open ( vlc_object_t *p_this )
 /*****************************************************************************
  * gesture: return a subpattern within a pattern
  *****************************************************************************/
-static int gesture( int i_pattern, int i_num )
+static inline unsigned gesture( unsigned i_pattern, unsigned i_num )
 {
     return ( i_pattern >> ( i_num * 4 ) ) & 0xF;
 }
@@ -163,11 +164,8 @@ static void Close ( vlc_object_t *p_this )
     /* Destroy the callbacks (the order matters!) */
     var_DelCallback( pl_Get(p_intf), "input-current", PlaylistEvent, p_intf );
 
-    if( p_sys->p_input )
-    {
+    if( p_sys->p_input != NULL )
         var_DelCallback( p_sys->p_input, "intf-event", InputEvent, p_intf );
-        vlc_object_release( p_sys->p_input );
-    }
 
     if( p_sys->p_vout )
     {
@@ -383,10 +381,10 @@ static int MovedEvent( vlc_object_t *p_this, char const *psz_var,
     {
         int i_horizontal = newval.coords.x - p_sys->i_last_x;
         int i_vertical = newval.coords.y - p_sys->i_last_y;
-        int pattern = 0;
+        unsigned int pattern = 0;
 
-        i_horizontal = i_horizontal / p_sys->i_threshold;
-        i_vertical = i_vertical / p_sys->i_threshold;
+        i_horizontal /= p_sys->i_threshold;
+        i_vertical /= p_sys->i_threshold;
 
         if( i_horizontal < 0 )
         {
@@ -413,12 +411,18 @@ static int MovedEvent( vlc_object_t *p_this, char const *psz_var,
         {
             p_sys->i_last_x = newval.coords.x;
             p_sys->i_last_y = newval.coords.y;
-            if( gesture( p_sys->i_pattern, p_sys->i_num_gestures - 1 )
+            if( p_sys->i_num_gestures > 0
+             && gesture( p_sys->i_pattern, p_sys->i_num_gestures - 1 )
                     != pattern )
             {
                 p_sys->i_pattern |= pattern << ( p_sys->i_num_gestures * 4 );
                 p_sys->i_num_gestures++;
             }
+            else if( p_sys->i_num_gestures == 0 )
+            {
+                p_sys->i_pattern = pattern;
+                p_sys->i_num_gestures++;
+            }
         }
 
     }
@@ -469,11 +473,6 @@ static int InputEvent( vlc_object_t *p_this, char const *psz_var,
 
     switch( val.i_int )
     {
-      case INPUT_EVENT_DEAD:
-        vlc_object_release( p_input );
-        p_sys->p_input = NULL; /* FIXME: locking!! */
-        break;
-
       case INPUT_EVENT_VOUT:
         /* intf-event is serialized against itself and is the sole user of
          * p_sys->p_vout. So there is no need to acquire the lock currently. */
@@ -506,14 +505,18 @@ static int PlaylistEvent( vlc_object_t *p_this, char const *psz_var,
     intf_sys_t *p_sys = p_intf->p_sys;
     input_thread_t *p_input = val.p_address;
 
-    (void) p_this; (void) psz_var; (void) oldval;
+    (void) p_this; (void) psz_var;
 
-    assert( p_sys->p_input == NULL );
+    if( p_sys->p_input != NULL )
+    {
+        assert( p_sys->p_input == oldval.p_address );
+        var_DelCallback( p_sys->p_input, "intf-event", InputEvent, p_intf );
+    }
+
+    p_sys->p_input = p_input;
 
     if( p_input != NULL )
-    {
         var_AddCallback( p_input, "intf-event", InputEvent, p_intf );
-        p_sys->p_input = vlc_object_hold( p_input );
-    }
+
     return VLC_SUCCESS;
 }