]> git.sesse.net Git - vlc/blobdiff - modules/gui/qt4/input_manager.cpp
Replaced a certain amount of vlc_object_find by pl_Yield
[vlc] / modules / gui / qt4 / input_manager.cpp
index 7100bb99f70791f0705de087ad64e8639111c6fc..40c4e66edcc6cc5e75065677715b51782db85e23 100644 (file)
@@ -60,9 +60,13 @@ InputManager::InputManager( QObject *parent, intf_thread_t *_p_intf) :
                            QObject( parent ), p_intf( _p_intf )
 {
     i_old_playing_status = END_S;
-    old_name = "";
-    p_input = NULL;
-    i_rate = 0;
+    b_had_audio  = b_had_video = b_has_audio = b_has_video = false;
+    b_has_subs   = false;
+    old_name     = "";
+    artUrl       = "";
+    p_input      = NULL;
+    i_rate       = 0;
+    i_input_id   = 0;
 }
 
 InputManager::~InputManager()
@@ -84,7 +88,7 @@ void InputManager::setInput( input_thread_t *_p_input )
         emit statusChanged( PLAYING_S );
         UpdateMeta();
         UpdateTracks();
-        UpdateTitle();
+        UpdateNavigation();
         UpdateArt();
         addCallbacks();
         i_input_id = input_GetItem( p_input )->i_id;
@@ -94,6 +98,7 @@ void InputManager::setInput( input_thread_t *_p_input )
         p_input = NULL;
         i_input_id = 0;
         emit rateChanged( INPUT_RATE_DEFAULT );
+        emit inputUnset();
     }
 }
 
@@ -105,16 +110,16 @@ void InputManager::delInput()
     if( p_input )
     {
         delCallbacks();
-        vlc_object_release( p_input );
         i_old_playing_status = END_S;
-
         i_input_id = 0;
-        old_name=qfu("");
-        artUrl = qfu("");
+        old_name   = "";
+        artUrl     = "";
         emit positionUpdated( 0.0, 0 ,0 );
         emit statusChanged( END_S );
         emit nameChanged( "" );
         emit artChanged( "" );
+        emit rateChanged( INPUT_RATE_DEFAULT );
+        vlc_object_release( p_input );
         p_input = NULL;
     }
 }
@@ -169,11 +174,15 @@ void InputManager::customEvent( QEvent *event )
          type != ItemStateChanged_Type )
         return;
 
-    if( !p_input || p_input->b_die || p_input->b_dead )
-        return;
-    if( ( type != PositionUpdate_Type && type != ItemRateChanged_Type ) &&
-        ( i_input_id != ple->i_id ) )
+    if( !hasInput() ) return;
+
+    if( ( type != PositionUpdate_Type  &&
+          type != ItemRateChanged_Type &&
+          type != ItemStateChanged_Type
+        )
+        && ( i_input_id != ple->i_id ) )
         return;
+
     if( type != PositionUpdate_Type )
         msg_Dbg( p_intf, "New Event: type %i", type );
 
@@ -185,20 +194,21 @@ void InputManager::customEvent( QEvent *event )
         break;
     case ItemChanged_Type:
         UpdateMeta();
+        UpdateNavigation();
         UpdateTracks();
-        UpdateTitle();
+        UpdateStatus();
         UpdateArt();
         break;
     case ItemRateChanged_Type:
         UpdateRate();
         break;
     case ItemTitleChanged_Type:
-        UpdateTitle();
+        UpdateNavigation();
         UpdateMeta();
         break;
     case ItemStateChanged_Type:
-        UpdateStatus();
         UpdateTracks();
+        UpdateStatus();
         break;
     }
 }
@@ -214,7 +224,7 @@ void InputManager::UpdatePosition()
     emit positionUpdated( f_pos, i_time, i_length );
 }
 
-void InputManager::UpdateTitle()
+void InputManager::UpdateNavigation()
 {
     /* Update navigation status */
     vlc_value_t val; val.i_int = 0;
@@ -304,13 +314,14 @@ void InputManager::UpdateTracks()
     b_has_audio = val.i_int > 0;
     var_Change( p_input, "video-es", VLC_VAR_CHOICESCOUNT, &val, NULL );
     b_has_video = val.i_int > 0;
-
-    msg_Dbg( p_input, "I have audio-video: %i %i", b_has_audio, b_has_video );
+    var_Change( p_input, "spu-es", VLC_VAR_CHOICESCOUNT, &val, NULL );
+    b_has_subs = val.i_int > 0;
 
     /* Update ZVBI status */
 #ifdef ZVBI_COMPILED
     /* Update teletext status*/
-    emit teletextEnabled( true );/* FIXME */
+    if( b_has_subs )
+        emit teletextEnabled( false );/* FIXME */
 #endif
 }
 
@@ -353,7 +364,7 @@ void InputManager::sectionPrev()
     if( hasInput() )
     {
         int i_type = var_Type( p_input, "next-chapter" );
-        vlc_value_t val; val.b_bool = VLC_TRUE;
+        vlc_value_t val; val.b_bool = true;
         var_Set( p_input, (i_type & VLC_VAR_TYPE) != 0 ?
                             "prev-chapter":"prev-title", val );
     }
@@ -364,7 +375,7 @@ void InputManager::sectionNext()
     if( hasInput() )
     {
         int i_type = var_Type( p_input, "next-chapter" );
-        vlc_value_t val; val.b_bool = VLC_TRUE;
+        vlc_value_t val; val.b_bool = true;
         var_Set( p_input, (i_type & VLC_VAR_TYPE) != 0 ?
                             "next-chapter":"next-title", val );
     }
@@ -373,7 +384,10 @@ void InputManager::sectionNext()
 void InputManager::sectionMenu()
 {
     if( hasInput() )
-        var_SetInteger( p_input, "title 0", 2 );
+    {
+        vlc_value_t val; val.i_int = 2;
+        var_Set( p_input, "title  0", val );
+    }
 }
 
 #ifdef ZVBI_COMPILED
@@ -499,7 +513,7 @@ void MainInputManager::customEvent( QEvent *event )
     }
 
     /* Should be PLItemChanged Event */
-    if( VLC_OBJECT_INTF == p_intf->i_object_type )
+    if( VLC_OBJECT_INTF == p_intf->i_object_type ) /* FIXME: don't use object type */
     {
         vlc_mutex_lock( &p_intf->change_lock );
         if( p_input && ( p_input->b_dead || p_input->b_die ) )
@@ -531,13 +545,9 @@ void MainInputManager::customEvent( QEvent *event )
     else
     {
         /* we are working as a dialogs provider */
-        playlist_t *p_playlist = (playlist_t *) vlc_object_find( p_intf,
-                                       VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
-        if( p_playlist )
-        {
-            p_input = p_playlist->p_input;
-            emit inputChanged( p_input );
-        }
+        playlist_t *p_playlist = pl_Yield( p_intf );
+        p_input = p_playlist->p_input;
+        emit inputChanged( p_input );
     }
 }
 
@@ -576,7 +586,7 @@ static int InterfaceChanged( vlc_object_t *p_this, const char *psz_var,
     static int counter = 0;
     InputManager *im = (InputManager*)param;
 
-    counter = counter++ % 4;
+    counter = ++counter % 4;
     if(!counter)
         return VLC_SUCCESS;
     IMEvent *event = new IMEvent( PositionUpdate_Type, 0 );
@@ -585,7 +595,7 @@ static int InterfaceChanged( vlc_object_t *p_this, const char *psz_var,
 }
 
 static int ItemStateChanged( vlc_object_t *p_this, const char *psz_var,
-                            vlc_value_t oldval, vlc_value_t newval, void *param )
+                           vlc_value_t oldval, vlc_value_t newval, void *param )
 {
     InputManager *im = (InputManager*)param;
 
@@ -595,17 +605,17 @@ static int ItemStateChanged( vlc_object_t *p_this, const char *psz_var,
 }
 
 static int ItemRateChanged( vlc_object_t *p_this, const char *psz_var,
-                            vlc_value_t oldval, vlc_value_t newval, void *param )
+                           vlc_value_t oldval, vlc_value_t newval, void *param )
 {
     InputManager *im = (InputManager*)param;
-    
+
     IMEvent *event = new IMEvent( ItemRateChanged_Type, 0 );
     QApplication::postEvent( im, static_cast<QEvent*>(event) );
     return VLC_SUCCESS;
 }
 
 static int ItemTitleChanged( vlc_object_t *p_this, const char *psz_var,
-                            vlc_value_t oldval, vlc_value_t newval, void *param )
+                           vlc_value_t oldval, vlc_value_t newval, void *param )
 {
     InputManager *im = (InputManager*)param;