From 107b78a957c386f36923338a7273ea4fd82f631a Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Duraffort?= Date: Sat, 22 Dec 2007 12:41:56 +0000 Subject: [PATCH] use a pointer to a function instead of a callback --- include/vlc_update.h | 2 +- modules/gui/qt4/dialogs/help.cpp | 8 ++---- modules/gui/wxwidgets/dialogs/updatevlc.cpp | 2 +- src/libvlc-common.c | 5 ---- src/misc/update.c | 31 +++++++++++++-------- 5 files changed, 23 insertions(+), 25 deletions(-) diff --git a/include/vlc_update.h b/include/vlc_update.h index 00439f479a..99822050f5 100644 --- a/include/vlc_update.h +++ b/include/vlc_update.h @@ -280,7 +280,7 @@ struct update_t VLC_EXPORT( update_t *, __update_New, ( vlc_object_t * ) ); VLC_EXPORT( void, update_Delete, ( update_t * ) ); -VLC_EXPORT( void, update_Check, ( update_t * ) ); +VLC_EXPORT( void, update_Check, ( update_t *, void (*callback)( void* ), void * ) ); VLC_EXPORT( int, update_CompareReleaseToCurrent, ( update_t * ) ); VLC_EXPORT( void, update_Download, ( update_t *, char* ) ); diff --git a/modules/gui/qt4/dialogs/help.cpp b/modules/gui/qt4/dialogs/help.cpp index 4d245542e2..4e8784d09d 100644 --- a/modules/gui/qt4/dialogs/help.cpp +++ b/modules/gui/qt4/dialogs/help.cpp @@ -179,13 +179,11 @@ void AboutDialog::close() * UpdateDialog *****************************************************************************/ /* callback to get information from the core */ -static int updateCallback( vlc_object_t *p_this, char const *psz_cmd, - vlc_value_t oldval, vlc_value_t newval, void *data ) +static void UpdateCallback( void *data ) { UpdateDialog* UDialog = (UpdateDialog *)data; QEvent *event = new QEvent( QEvent::User ); QApplication::postEvent( UDialog, event ); - return VLC_SUCCESS; } UpdateDialog *UpdateDialog::instance = NULL; @@ -215,13 +213,11 @@ UpdateDialog::UpdateDialog( intf_thread_t *_p_intf ) : QVLCFrame( _p_intf ) /* create the update structure and the callback */ p_update = update_New( _p_intf ); - var_AddCallback( _p_intf->p_libvlc, "update-notify", updateCallback, this ); b_checked = false; } UpdateDialog::~UpdateDialog() { - var_DelCallback( p_update->p_libvlc, "update-notify", updateCallback, this ); update_Delete( p_update ); } @@ -236,7 +232,7 @@ void UpdateDialog::UpdateOrDownload() if( !b_checked ) { updateButton->setEnabled( false ); - update_Check( p_update ); + update_Check( p_update, UpdateCallback, this ); } else { diff --git a/modules/gui/wxwidgets/dialogs/updatevlc.cpp b/modules/gui/wxwidgets/dialogs/updatevlc.cpp index 88eb5e0eaa..6810005707 100644 --- a/modules/gui/wxwidgets/dialogs/updatevlc.cpp +++ b/modules/gui/wxwidgets/dialogs/updatevlc.cpp @@ -100,7 +100,7 @@ void UpdateVLC::OnClose( wxCloseEvent& WXUNUSED(event) ) void UpdateVLC::OnCheckForUpdate( wxCommandEvent& event ) { - update_Check( p_update ); + update_Check( p_update, NULL, this ); wxBoxSizer *main_sizer = new wxBoxSizer( wxVERTICAL ); DestroyChildren(); diff --git a/src/libvlc-common.c b/src/libvlc-common.c index f106e5a7b6..8803b76ab7 100644 --- a/src/libvlc-common.c +++ b/src/libvlc-common.c @@ -884,11 +884,6 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, /* Create volume callback system. */ var_Create( p_libvlc, "volume-change", VLC_VAR_BOOL ); - /* Notify interfaces that a new VLC version is available */ -#ifdef UPDATE_CHECK - var_Create( p_libvlc, "update-notify", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND ); -#endif - /* * Get input filenames given as commandline arguments */ diff --git a/src/misc/update.c b/src/misc/update.c index 309501685e..c0b99737ca 100644 --- a/src/misc/update.c +++ b/src/misc/update.c @@ -883,6 +883,8 @@ typedef struct { VLC_COMMON_MEMBERS update_t *p_update; + void (*pf_callback)( void * ); + void *p_data; } update_check_thread_t; void update_CheckReal( update_check_thread_t *p_uct ); @@ -891,15 +893,19 @@ void update_CheckReal( update_check_thread_t *p_uct ); * Check for updates * * \param p_update pointer to update struct + * \param pf_callback pointer to a function to call when the update_check is finished + * \param p_data pointer to some datas to give to the callback * \returns nothing */ -void update_Check( update_t *p_update ) +void update_Check( update_t *p_update, void (*pf_callback)( void* ), void *p_data ) { assert( p_update ); update_check_thread_t *p_uct = vlc_object_create( p_update->p_libvlc, sizeof( update_check_thread_t ) ); p_uct->p_update = p_update; + p_uct->pf_callback = pf_callback; + p_uct->p_data = p_data; vlc_thread_create( p_uct, "check for update", update_CheckReal, VLC_THREAD_PRIORITY_LOW, VLC_FALSE ); @@ -914,7 +920,8 @@ void update_CheckReal( update_check_thread_t *p_uct ) vlc_mutex_unlock( &p_uct->p_update->lock ); - var_TriggerCallback( p_uct->p_libvlc, "update-notify" ); + if( p_uct->pf_callback ) + (p_uct->pf_callback)( p_uct->p_data ); } /** @@ -1035,7 +1042,7 @@ void update_DownloadReal( update_download_thread_t *p_udt ) char *psz_destdir = p_udt->psz_destdir; /* Open the stream */ - p_stream = stream_UrlNew( p_update->p_libvlc, p_update->release.psz_url ); + p_stream = stream_UrlNew( p_udt, p_update->release.psz_url ); if( !p_stream ) { msg_Err( p_udt, "Failed to open %s for reading", p_update->release.psz_url ); @@ -1107,15 +1114,15 @@ void update_DownloadReal( update_download_thread_t *p_udt ) else remove( psz_destfile ); - error: - if( p_stream ) - stream_Delete( p_stream ); - if( p_file ) - fclose( p_file ); - free( psz_destdir ); - free( psz_destfile ); - free( p_buffer ); - free( psz_size ); +error: + if( p_stream ) + stream_Delete( p_stream ); + if( p_file ) + fclose( p_file ); + free( psz_destdir ); + free( psz_destfile ); + free( p_buffer ); + free( psz_size ); } #endif -- 2.39.2