Commit ba02e3b2 authored by Eric Petit's avatar Eric Petit

beos/*: update the playlist properly

parent db913e1c
...@@ -174,6 +174,14 @@ collect_folder_contents( BDirectory& dir, BList& list, bool& deep, bool& asked, ...@@ -174,6 +174,14 @@ collect_folder_contents( BDirectory& dir, BList& list, bool& deep, bool& asked,
} }
} }
static int PlaylistChanged( vlc_object_t *p_this, const char * psz_variable,
vlc_value_t old_val, vlc_value_t new_val,
void * param )
{
InterfaceWindow * w = (InterfaceWindow *) param;
w->UpdatePlaylist();
return VLC_SUCCESS;
}
/***************************************************************************** /*****************************************************************************
* InterfaceWindow * InterfaceWindow
...@@ -193,6 +201,15 @@ InterfaceWindow::InterfaceWindow( intf_thread_t * _p_intf, BRect frame, ...@@ -193,6 +201,15 @@ InterfaceWindow::InterfaceWindow( intf_thread_t * _p_intf, BRect frame,
fLastUpdateTime( system_time() ), fLastUpdateTime( system_time() ),
fSettings( new BMessage( 'sett' ) ) fSettings( new BMessage( 'sett' ) )
{ {
p_playlist = (playlist_t *)
vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
var_AddCallback( p_playlist, "intf-change", PlaylistChanged, this );
var_AddCallback( p_playlist, "item-change", PlaylistChanged, this );
var_AddCallback( p_playlist, "item-append", PlaylistChanged, this );
var_AddCallback( p_playlist, "item-deleted", PlaylistChanged, this );
var_AddCallback( p_playlist, "playlist-current", PlaylistChanged, this );
char psz_tmp[1024]; char psz_tmp[1024];
#define ADD_ELLIPSIS( a ) \ #define ADD_ELLIPSIS( a ) \
memset( psz_tmp, 0, 1024 ); \ memset( psz_tmp, 0, 1024 ); \
...@@ -416,7 +433,7 @@ void InterfaceWindow::MessageReceived( BMessage * p_message ) ...@@ -416,7 +433,7 @@ void InterfaceWindow::MessageReceived( BMessage * p_message )
playlist_Add( p_playlist, psz_uri, psz_device, playlist_Add( p_playlist, psz_uri, psz_device,
PLAYLIST_APPEND | PLAYLIST_GO, PLAYLIST_END ); PLAYLIST_APPEND | PLAYLIST_GO, PLAYLIST_END );
} }
_UpdatePlaylist(); UpdatePlaylist();
} }
break; break;
...@@ -731,7 +748,7 @@ void InterfaceWindow::MessageReceived( BMessage * p_message ) ...@@ -731,7 +748,7 @@ void InterfaceWindow::MessageReceived( BMessage * p_message )
} }
} }
_UpdatePlaylist(); UpdatePlaylist();
break; break;
} }
...@@ -792,12 +809,6 @@ bool InterfaceWindow::QuitRequested() ...@@ -792,12 +809,6 @@ bool InterfaceWindow::QuitRequested()
*****************************************************************************/ *****************************************************************************/
void InterfaceWindow::UpdateInterface() void InterfaceWindow::UpdateInterface()
{ {
/* Manage the input part */
if( !p_playlist )
{
p_playlist = (playlist_t *)
vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
}
if( !p_input ) if( !p_input )
{ {
p_input = (input_thread_t *) p_input = (input_thread_t *)
...@@ -815,6 +826,17 @@ void InterfaceWindow::UpdateInterface() ...@@ -815,6 +826,17 @@ void InterfaceWindow::UpdateInterface()
return; return;
} }
if( b_playlist_update )
{
if( fPlaylistWindow->Lock() )
{
fPlaylistWindow->UpdatePlaylist( true );
fPlaylistWindow->Unlock();
b_playlist_update = false;
}
p_mediaControl->SetEnabled( p_playlist->i_size );
}
if( p_input ) if( p_input )
{ {
vlc_value_t val; vlc_value_t val;
...@@ -840,13 +862,6 @@ void InterfaceWindow::UpdateInterface() ...@@ -840,13 +862,6 @@ void InterfaceWindow::UpdateInterface()
aout_VolumeGet( p_intf, &i_volume ); aout_VolumeGet( p_intf, &i_volume );
p_mediaControl->SetAudioEnabled( true ); p_mediaControl->SetAudioEnabled( true );
p_mediaControl->SetMuted( i_volume ); p_mediaControl->SetMuted( i_volume );
// update playlist as well
if( fPlaylistWindow->LockWithTimeout( INTERFACE_LOCKING_TIMEOUT ) == B_OK )
{
fPlaylistWindow->UpdatePlaylist();
fPlaylistWindow->Unlock();
}
} }
else else
{ {
...@@ -877,26 +892,21 @@ void InterfaceWindow::UpdateInterface() ...@@ -877,26 +892,21 @@ void InterfaceWindow::UpdateInterface()
} }
/***************************************************************************** /*****************************************************************************
* InterfaceWindow::IsStopped * InterfaceWindow::UpdatePlaylist
*****************************************************************************/ *****************************************************************************/
bool void
InterfaceWindow::IsStopped() const InterfaceWindow::UpdatePlaylist()
{ {
return (system_time() - fLastUpdateTime > INTERFACE_UPDATE_TIMEOUT); b_playlist_update = true;
} }
/***************************************************************************** /*****************************************************************************
* InterfaceWindow::_UpdatePlaylist * InterfaceWindow::IsStopped
*****************************************************************************/ *****************************************************************************/
void bool
InterfaceWindow::_UpdatePlaylist() InterfaceWindow::IsStopped() const
{ {
if( fPlaylistWindow->Lock() ) return (system_time() - fLastUpdateTime > INTERFACE_UPDATE_TIMEOUT);
{
fPlaylistWindow->UpdatePlaylist( true );
fPlaylistWindow->Unlock();
}
p_mediaControl->SetEnabled( p_playlist->i_size );
} }
/***************************************************************************** /*****************************************************************************
......
...@@ -102,26 +102,28 @@ class InterfaceWindow : public BWindow ...@@ -102,26 +102,28 @@ class InterfaceWindow : public BWindow
// InterfaceWindow // InterfaceWindow
void UpdateInterface(); void UpdateInterface();
void UpdatePlaylist();
bool IsStopped() const; bool IsStopped() const;
MediaControlView* p_mediaControl; MediaControlView* p_mediaControl;
MessagesWindow* fMessagesWindow; MessagesWindow* fMessagesWindow;
private: private:
void _UpdatePlaylist();
void _SetMenusEnabled( bool hasFile, void _SetMenusEnabled( bool hasFile,
bool hasChapters = false, bool hasChapters = false,
bool hasTitles = false ); bool hasTitles = false );
void _UpdateSpeedMenu( int rate ); void _UpdateSpeedMenu( int rate );
void _ShowFilePanel( uint32 command, void _ShowFilePanel( uint32 command,
const char* windowTitle ); const char* windowTitle );
void _RestoreSettings(); void _RestoreSettings();
void _StoreSettings(); void _StoreSettings();
intf_thread_t * p_intf; intf_thread_t * p_intf;
input_thread_t * p_input; input_thread_t * p_input;
playlist_t * p_playlist; playlist_t * p_playlist;
es_descriptor_t * p_spu_es; es_descriptor_t * p_spu_es;
bool b_playlist_update;
BFilePanel* fFilePanel; BFilePanel* fFilePanel;
PlayListWindow* fPlaylistWindow; PlayListWindow* fPlaylistWindow;
...@@ -149,19 +151,19 @@ class InterfaceWindow : public BWindow ...@@ -149,19 +151,19 @@ class InterfaceWindow : public BWindow
BMenu* fSpeedMenu; BMenu* fSpeedMenu;
BMenu* fShowMenu; BMenu* fShowMenu;
bigtime_t fLastUpdateTime; bigtime_t fLastUpdateTime;
BMessage* fSettings; // we keep the message arround BMessage* fSettings; // we keep the message arround
// for forward compatibility // for forward compatibility
}; };
// some global support functions // some global support functions
status_t load_settings( BMessage* message, status_t load_settings( BMessage* message,
const char* fileName, const char* fileName,
const char* folder = NULL ); const char* folder = NULL );
status_t save_settings( BMessage* message, status_t save_settings( BMessage* message,
const char* fileName, const char* fileName,
const char* folder = NULL ); const char* folder = NULL );
#endif // BEOS_INTERFACE_WINDOW_H #endif // BEOS_INTERFACE_WINDOW_H
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment