]> git.sesse.net Git - vlc/blobdiff - modules/gui/qt4/input_manager.cpp
Qt: Don't post the initial event of THEMIM, force it.
[vlc] / modules / gui / qt4 / input_manager.cpp
index c1ec98bee169d481aaf7978d8fa115b85f30db4d..5a643b75a565579614087d528926c16d7ad96585 100644 (file)
@@ -31,6 +31,8 @@
 
 #include <QApplication>
 
+#include <assert.h>
+
 static int ItemChanged( vlc_object_t *, const char *,
                         vlc_value_t, vlc_value_t, void * );
 static int PLItemChanged( vlc_object_t *, const char *,
@@ -141,7 +143,7 @@ void InputManager::customEvent( QEvent *event )
     int i_type = event->type();
     IMEvent *ple = static_cast<IMEvent *>(event);
 
-    if ( i_type != PositionUpdate_Type &&
+    assert( !( i_type != PositionUpdate_Type &&
          i_type != ItemChanged_Type &&
          i_type != ItemRateChanged_Type &&
          i_type != ItemTitleChanged_Type &&
@@ -156,8 +158,8 @@ void InputManager::customEvent( QEvent *event )
          i_type != SynchroChanged_Type &&
          i_type != CachingEvent_Type &&
          i_type != BookmarksChanged_Type &&
-         i_type != InterfaceAoutUpdate_Type )
-        return;
+         i_type != InterfaceAoutUpdate_Type &&
+         i_type != RecordingEvent_Type ) );
 
     if( !hasInput() ) return;
 
@@ -176,7 +178,8 @@ void InputManager::customEvent( QEvent *event )
           i_type != InfoChanged_Type &&
           i_type != SynchroChanged_Type &&
           i_type != BookmarksChanged_Type &&
-          i_type != InterfaceAoutUpdate_Type
+          i_type != InterfaceAoutUpdate_Type &&
+          i_type != RecordingEvent_Type
         )
         && ( i_input_id != ple->i_id ) )
         return;
@@ -247,6 +250,9 @@ void InputManager::customEvent( QEvent *event )
     case InterfaceAoutUpdate_Type:
         UpdateAout();
         break;
+    case RecordingEvent_Type:
+        UpdateRecord();
+        break;
     default:
         msg_Warn( p_intf, "This shouldn't happen: %i", i_type );
     }
@@ -340,10 +346,8 @@ static int InputEvent( vlc_object_t *p_this, const char *,
         break;
 
     case INPUT_EVENT_RECORD:
-        /* This happens when a recording starts. What do we do then?
-           Display a red light? */
-        /* event = new IMEvent( RecordingEvent_Type, 0 );
-        break; */
+        event = new IMEvent( RecordingEvent_Type, 0 );
+        break;
 
     case INPUT_EVENT_PROGRAM:
         /* This is for PID changes */
@@ -545,6 +549,12 @@ void InputManager::requestArtUpdate()
         playlist_AskForArtEnqueue( p_playlist, input_GetItem( p_input ), pl_Unlocked );
         pl_Release( p_intf );
     }
+    else
+    {
+        /* No input will signal the cover art to update,
+         * let's do it ourself */
+        UpdateArt();
+    }
 }
 
 void InputManager::UpdateArt()
@@ -579,6 +589,14 @@ inline void InputManager::UpdateInfo()
     emit infoChanged( input_GetItem( p_input ) );
 }
 
+void InputManager::UpdateRecord()
+{
+    if( hasInput() )
+    {
+        emit recordingStateChanged( var_GetBool( p_input, "record" ) );
+    }
+}
+
 /* User update of the slider */
 void InputManager::sliderUpdate( float new_pos )
 {
@@ -821,8 +839,9 @@ MainInputManager::MainInputManager( intf_thread_t *_p_intf )
     /* emit check if playlist has allready started playing */
     vlc_value_t val;
     var_Change( THEPL, "playlist-current", VLC_VAR_CHOICESCOUNT, &val, NULL );
+
     IMEvent *event = new IMEvent( ItemChanged_Type, val.i_int);
-    QApplication::postEvent( this, static_cast<QEvent*>(event) );
+    customEvent( static_cast<QEvent*>(event) );
 }
 
 MainInputManager::~MainInputManager()
@@ -842,6 +861,16 @@ MainInputManager::~MainInputManager()
     var_DelCallback( THEPL, "playlist-current", PLItemChanged, this );
 }
 
+vout_thread_t* MainInputManager::getVout()
+{
+    return p_input ? input_GetVout( p_input ) : NULL;
+}
+
+aout_instance_t * MainInputManager::getAout()
+{
+    return p_input ? input_GetAout( p_input ) : NULL;
+}
+
 void MainInputManager::customEvent( QEvent *event )
 {
     int type = event->type();