From 57300f50ea67d7e55c2d379140f849f3f296ab1e Mon Sep 17 00:00:00 2001 From: Ilkka Ollakka Date: Thu, 13 Dec 2007 08:13:56 +0000 Subject: [PATCH] Change backgroundwidget and mediainfo-dialog to use THEMIM inputChanged-signal instead of polling. I think that iteration-count for this one is still under 10 ;) --- .../gui/qt4/components/interface_widgets.cpp | 50 +++++-------------- .../gui/qt4/components/interface_widgets.hpp | 2 +- modules/gui/qt4/dialogs/mediainfo.cpp | 31 ++---------- modules/gui/qt4/dialogs/mediainfo.hpp | 2 +- 4 files changed, 20 insertions(+), 65 deletions(-) diff --git a/modules/gui/qt4/components/interface_widgets.cpp b/modules/gui/qt4/components/interface_widgets.cpp index 1c173139c6..8eaa7ad483 100644 --- a/modules/gui/qt4/components/interface_widgets.cpp +++ b/modules/gui/qt4/components/interface_widgets.cpp @@ -50,8 +50,6 @@ static void *DoRequest( intf_thread_t *, vout_thread_t *, int*,int*, unsigned int *, unsigned int * ); static void DoRelease( intf_thread_t *, void * ); static int DoControl( intf_thread_t *, void *, int, va_list ); -static int ItemChanged( vlc_object_t *, const char *, - vlc_value_t, vlc_value_t, void * ); VideoWidget::VideoWidget( intf_thread_t *_p_i ) : QFrame( NULL ), p_intf( _p_i ) { @@ -149,34 +147,16 @@ BackgroundWidget::BackgroundWidget( intf_thread_t *_p_i ) : resize( 300, 150 ); updateGeometry(); - i_runs = 0; - b_need_update = VLC_FALSE; - var_AddCallback( THEPL, "item-change", ItemChanged, this ); - ON_TIMEOUT( update() ); + CONNECT( THEMIM, inputChanged( input_thread_t *), this, update( input_thread_t * ) ); } BackgroundWidget::~BackgroundWidget() { - var_DelCallback( THEPL, "item-change", ItemChanged, this ); } -static int ItemChanged( vlc_object_t *p_this, const char *psz_var, - vlc_value_t oldval, vlc_value_t newval, void *param ) -{ - BackgroundWidget *p_d = (BackgroundWidget*)param; - p_d->b_need_update = VLC_TRUE; - return VLC_SUCCESS; -} -void BackgroundWidget::update() +void BackgroundWidget::update( input_thread_t *p_input ) { - /* Timer runs at 150 ms, dont' update more than once every 750ms */ - i_runs++; - if( i_runs % 6 != 0 ) return; - - /* Get Input and clear if non-existant */ - input_thread_t *p_input = - MainInputManager::getInstance( p_intf )->getInput(); if( !p_input || p_input->b_dead ) { label->setPixmap( QPixmap( ":/vlc128.png" ) ); @@ -184,23 +164,19 @@ void BackgroundWidget::update() } - if( b_need_update ) + vlc_object_yield( p_input ); + char *psz_arturl = input_item_GetArtURL( input_GetItem(p_input) ); + vlc_object_release( p_input ); + QString url = qfu( psz_arturl ); + QString arturl = url.replace( "file://",QString("" ) ); + if( arturl.isNull() ) + label->setPixmap( QPixmap( ":/vlc128.png" ) ); + else { - vlc_object_yield( p_input ); - char *psz_arturl = input_item_GetArtURL( input_GetItem(p_input) ); - vlc_object_release( p_input ); - QString url = qfu( psz_arturl ); - QString arturl = url.replace( "file://",QString("" ) ); - if( arturl.isNull() ) - label->setPixmap( QPixmap( ":/vlc128.png" ) ); - else - { - label->setPixmap( QPixmap( arturl ) ); - msg_Dbg( p_intf, "changing input b_need_update done %s", psz_arturl ); - } - free( psz_arturl ); + label->setPixmap( QPixmap( arturl ) ); + msg_Dbg( p_intf, "changing input b_need_update done %s", psz_arturl ); } - b_need_update = false; + free( psz_arturl ); } QSize BackgroundWidget::sizeHint() const diff --git a/modules/gui/qt4/components/interface_widgets.hpp b/modules/gui/qt4/components/interface_widgets.hpp index e72522a874..3516f2e2e6 100644 --- a/modules/gui/qt4/components/interface_widgets.hpp +++ b/modules/gui/qt4/components/interface_widgets.hpp @@ -90,7 +90,7 @@ private: int i_runs; public slots: void toggle(){ TOGGLEV( this ); } - void update( void ); + void update( input_thread_t * ); }; class VisualSelector : public QFrame diff --git a/modules/gui/qt4/dialogs/mediainfo.cpp b/modules/gui/qt4/dialogs/mediainfo.cpp index 7883958672..fc69d0e71d 100644 --- a/modules/gui/qt4/dialogs/mediainfo.cpp +++ b/modules/gui/qt4/dialogs/mediainfo.cpp @@ -31,8 +31,6 @@ #include #include -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, @@ -92,18 +90,13 @@ MediaInfoDialog::MediaInfoDialog( intf_thread_t *_p_intf, CONNECT( IT, currentChanged( int ), this, updateButtons( int ) ); - /* Create the main Update function with a time (150ms) */ - if( mainInput ) { - ON_TIMEOUT( updateOnTimeOut() ); - var_AddCallback( THEPL, "item-change", ItemChanged, this ); - } + CONNECT( THEMIM, inputChanged( input_thread_t * ), this, update( input_thread_t * ) ); + /* Call update by hand, so info is shown from current item too */ + update( input_GetItem(THEMIM->getInput()), true, true ); } MediaInfoDialog::~MediaInfoDialog() { - if( mainInput ) { - var_DelCallback( THEPL, "item-change", ItemChanged, this ); - } writeSettings( "mediainfo" ); } @@ -124,23 +117,9 @@ void MediaInfoDialog::saveMeta() saveMetaButton->hide(); } -static int ItemChanged( vlc_object_t *p_this, const char *psz_var, - vlc_value_t oldval, vlc_value_t newval, void *param ) -{ - MediaInfoDialog *p_d = (MediaInfoDialog *)param; - p_d->b_need_update = VLC_TRUE; - return VLC_SUCCESS; -} - -/* Function called on TimeOut */ -void MediaInfoDialog::updateOnTimeOut() +/* Function called on inputChanged-update*/ +void MediaInfoDialog::update( input_thread_t *p_input ) { - /* Timer runs at 150 ms, dont' update more than 2 times per second */ - i_runs++; - if( i_runs % 4 != 0 ) return; - - /* Get Input and clear if non-existant */ - input_thread_t *p_input = THEMIM->getInput(); if( !p_input || p_input->b_dead ) { if( !b_cleaned ) diff --git a/modules/gui/qt4/dialogs/mediainfo.hpp b/modules/gui/qt4/dialogs/mediainfo.hpp index 91e380ffb6..76ad847d2f 100644 --- a/modules/gui/qt4/dialogs/mediainfo.hpp +++ b/modules/gui/qt4/dialogs/mediainfo.hpp @@ -83,7 +83,7 @@ private: QLineEdit *uriLine; public slots: - void updateOnTimeOut(); + void update( input_thread_t * ); void update( input_item_t *, bool, bool ); private slots: -- 2.39.2