]> git.sesse.net Git - vlc/blobdiff - modules/gui/qt4/dialogs/mediainfo.cpp
Hopefully correct tokenization of open strings
[vlc] / modules / gui / qt4 / dialogs / mediainfo.cpp
index b7ae592de4361d36ed4e08b02ab49d08ae0c412e..a5fcf0cce28dc2f48b5bad98994626f5201c9bc9 100644 (file)
@@ -19,7 +19,8 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ ******************************************************************************/
 
 #include <QTabWidget>
 #include <QGridLayout>
 #include "components/infopanels.hpp"
 #include "qt4.hpp"
 
+
 static int ItemChanged( vlc_object_t *p_this, const char *psz_var,
                         vlc_value_t oldval, vlc_value_t newval, void *param );
 MediaInfoDialog *MediaInfoDialog::instance = NULL;
 
-MediaInfoDialog::MediaInfoDialog( intf_thread_t *_p_intf ) :QVLCFrame( _p_intf )
+MediaInfoDialog::MediaInfoDialog( intf_thread_t *_p_intf, bool _mainInput ) :
+                                    QVLCFrame( _p_intf ), mainInput(_mainInput)
 {
     i_runs = 0;
     p_input = NULL;
@@ -50,15 +53,19 @@ MediaInfoDialog::MediaInfoDialog( intf_thread_t *_p_intf ) :QVLCFrame( _p_intf )
     layout->addWidget(closeButton,1,2);
 
     BUTTONACT( closeButton, close() );
-    ON_TIMEOUT( update() );
 
-    var_AddCallback( THEPL, "item-change", ItemChanged, this );
+    if( mainInput ) {
+        ON_TIMEOUT( update() );
+        var_AddCallback( THEPL, "item-change", ItemChanged, this );
+    }
     readSettings( "mediainfo" , QSize( 500, 450 ) );
 }
 
 MediaInfoDialog::~MediaInfoDialog()
 {
-    var_DelCallback( THEPL, "item-change", ItemChanged, this );
+    if( mainInput ) {
+        var_DelCallback( THEPL, "item-change", ItemChanged, this );
+    }
     writeSettings( "mediainfo" );
 }
 
@@ -70,13 +77,22 @@ static int ItemChanged( vlc_object_t *p_this, const char *psz_var,
     return VLC_SUCCESS;
 }
 
+void MediaInfoDialog::setInput(input_item_t *p_input)
+{
+    IT->clear();
+    vlc_mutex_lock( &p_input->lock );
+    IT->update( p_input, true, true );
+    vlc_mutex_unlock( &p_input->lock );
+}
+
 void MediaInfoDialog::update()
 {
     // Timer runs at 150 ms, dont' update more than 2 times per second
     i_runs++;
     if( i_runs % 3 != 0 ) return;
 
-    input_thread_t *p_input = MainInputManager::getInstance( p_intf )->getInput();
+    input_thread_t *p_input =
+             MainInputManager::getInstance( p_intf )->getInput();
     if( !p_input || p_input->b_dead )
     {
         IT->clear();
@@ -84,16 +100,20 @@ void MediaInfoDialog::update()
     }
 
     vlc_object_yield( p_input );
-    vlc_mutex_lock( &p_input->input.p_item->lock );
+    vlc_mutex_lock( &input_GetItem(p_input)->lock );
 
-    IT->update( p_input->input.p_item, need_update, need_update );
+    IT->update( input_GetItem(p_input), need_update, need_update );
     need_update = false;
 
-    vlc_mutex_unlock( &p_input->input.p_item->lock );
+    vlc_mutex_unlock( &input_GetItem(p_input)->lock );
     vlc_object_release( p_input );
 }
 
 void MediaInfoDialog::close()
 {
     this->toggleVisible();
+
+    if( mainInput == false ) {
+        deleteLater();
+    }
 }