]> git.sesse.net Git - vlc/blobdiff - modules/video_output/sdl.c
Fix 0448c670c32d9fc60889ce2c3e8f72330a389e44 as I forgot to use pl_Yield instead...
[vlc] / modules / video_output / sdl.c
index 30bc1bdf786e0a38a126318ad084833e12944eaf..be76ba744003c87c0294b1df7e2404ede812538e 100644 (file)
  *****************************************************************************/
 #include <errno.h>                                                 /* ENOMEM */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <vlc/vlc.h>
+#include <vlc_plugin.h>
 #include <vlc_interface.h>
 #include <vlc_playlist.h>
 #include <vlc_vout.h>
@@ -70,9 +75,10 @@ struct vout_sys_t
     /* For RGB output */
     int i_surfaces;
 
-    vlc_bool_t  b_cursor;
-    vlc_bool_t  b_cursor_autohidden;
+    bool  b_cursor;
+    bool  b_cursor_autohidden;
     mtime_t     i_lastmoved;
+    mtime_t     i_mouse_hide_timeout;
     mtime_t     i_lastpressed;                        /* to track dbl-clicks */
 };
 
@@ -118,10 +124,10 @@ vlc_module_begin();
     set_shortname( "SDL" );
     set_category( CAT_VIDEO );
     set_subcategory( SUBCAT_VIDEO_VOUT );
-    set_description( _("Simple DirectMedia Layer video output") );
+    set_description( N_("Simple DirectMedia Layer video output") );
     set_capability( "video output", 60 );
     add_shortcut( "sdl" );
-    add_string( "sdl-chroma", NULL, NULL, CHROMA_TEXT, CHROMA_LONGTEXT, VLC_TRUE );
+    add_string( "sdl-chroma", NULL, NULL, CHROMA_TEXT, CHROMA_LONGTEXT, true );
     set_callbacks( Open, Close );
 #if defined( __i386__ ) || defined( __x86_64__ )
     /* On i386, SDL is linked against svgalib */
@@ -194,7 +200,7 @@ static int Open ( vlc_object_t *p_this )
     /* Win32 SDL implementation doesn't support SDL_INIT_EVENTTHREAD yet*/
                 | SDL_INIT_EVENTTHREAD
 #endif
-#ifdef DEBUG
+#ifndef NDEBUG
     /* In debug mode you may want vlc to dump a core instead of staying
      * stuck */
                 | SDL_INIT_NOPARACHUTE
@@ -223,6 +229,8 @@ static int Open ( vlc_object_t *p_this )
     p_vout->p_sys->b_cursor = 1;
     p_vout->p_sys->b_cursor_autohidden = 0;
     p_vout->p_sys->i_lastmoved = p_vout->p_sys->i_lastpressed = mdate();
+    p_vout->p_sys->i_mouse_hide_timeout =
+        var_GetInteger(p_vout, "mouse-hide-timeout") * 1000;
 
     if( OpenDisplay( p_vout ) )
     {
@@ -399,7 +407,7 @@ static int Manage( vout_thread_t *p_vout )
 
             var_Set( p_vout, "mouse-y", val );
 
-            val.b_bool = VLC_TRUE;
+            val.b_bool = true;
             var_Set( p_vout, "mouse-moved", val );
 
             if( p_vout->p_sys->b_cursor )
@@ -421,12 +429,26 @@ static int Manage( vout_thread_t *p_vout )
             switch( event.button.button )
             {
             case SDL_BUTTON_LEFT:
-                var_Get( p_vout, "mouse-button-down", &val );
-                val.i_int &= ~1;
-                var_Set( p_vout, "mouse-button-down", val );
+                {
+                    playlist_t *p_playlist;
+
+                    var_Get( p_vout, "mouse-button-down", &val );
+                    val.i_int &= ~1;
+                    var_Set( p_vout, "mouse-button-down", val );
 
-                val.b_bool = VLC_TRUE;
-                var_Set( p_vout, "mouse-clicked", val );
+                    val.b_bool = true;
+                    var_Set( p_vout, "mouse-clicked", val );
+
+                    p_playlist = pl_Yield( p_vout );
+
+                    if( p_playlist != NULL )
+                    {
+                        vlc_value_t val;
+                        val.b_bool = false;
+                        var_Set( p_playlist, "intf-popupmenu", val );
+                        pl_Release( p_playlist );
+                    }
+                }
                 break;
 
             case SDL_BUTTON_MIDDLE:
@@ -437,15 +459,14 @@ static int Manage( vout_thread_t *p_vout )
                     val.i_int &= ~2;
                     var_Set( p_vout, "mouse-button-down", val );
 
-                    p_playlist = vlc_object_find( p_vout, VLC_OBJECT_PLAYLIST,
-                                              FIND_ANYWHERE );
+                    p_playlist = pl_Yield( p_vout );
                     if( p_playlist != NULL )
                     {
                         vlc_value_t val;
                         var_Get( p_playlist, "intf-show", &val );
                         val.b_bool = !val.b_bool;
                         var_Set( p_playlist, "intf-show", val );
-                        vlc_object_release( p_playlist );
+                        pl_Release( p_playlist );
                     }
                 }
                 break;
@@ -466,15 +487,14 @@ static int Manage( vout_thread_t *p_vout )
                         vlc_object_release( p_intf );
                     }
 
-                    p_playlist = vlc_object_find( p_vout, VLC_OBJECT_PLAYLIST,
-                                                FIND_ANYWHERE );
+                    p_playlist = pl_Yield( p_vout );
 
                     if( p_playlist != NULL )
                     {
                         vlc_value_t val;
-                        val.b_bool = VLC_TRUE;
+                        val.b_bool = true;
                         var_Set( p_playlist, "intf-popupmenu", val );
-                        vlc_object_release( p_playlist );
+                        pl_Release( p_playlist );
                     }
                 }
                 break;
@@ -514,11 +534,11 @@ static int Manage( vout_thread_t *p_vout )
         /* Quit event (close the window) */
         case SDL_QUIT:
             {
-                playlist_t *p_playlist = (playlist_t *)vlc_object_find( p_vout, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
+                playlist_t *p_playlist = pl_Yield( p_vout );
                 if( p_playlist != NULL )
                 {
                     playlist_Stop( p_playlist );
-                    vlc_object_release( p_playlist );
+                    pl_Release( p_playlist );
                 }
             }
             break;
@@ -621,7 +641,8 @@ static int Manage( vout_thread_t *p_vout )
 
     /* Pointer change */
     if( ! p_vout->p_sys->b_cursor_autohidden &&
-        ( mdate() - p_vout->p_sys->i_lastmoved > 2000000 ) )
+        ( mdate() - p_vout->p_sys->i_lastmoved >
+            p_vout->p_sys->i_mouse_hide_timeout ) )
     {
         /* Hide the mouse automatically */
         p_vout->p_sys->b_cursor_autohidden = 1;