Commit bb964cd5 authored by Erwan Tulou's avatar Erwan Tulou

Qt: fix playlist issues when Qt works as a dialog provider

For the Qt plugin to keep on working both as an interface module and
a dialog/menu/extension provider, the new implementation of pl_Get( p_intf )
can no longer be used blindly, since it now assumes that the playlist is the
parent object. In the latter case, the parent object is the calling interface
(for instance, skins2) and the playlist is actually the grandparent !

As a rule of thumb, THEPL which is now initialized appropriately should be
used instead of pl_Get( p_intf ) throughout Qt.

This fixes trac #10421
parent 9bf135cb
...@@ -190,7 +190,7 @@ void SoundWidget::showVolumeMenu( QPoint pos ) ...@@ -190,7 +190,7 @@ void SoundWidget::showVolumeMenu( QPoint pos )
void SoundWidget::setMuted( bool mute ) void SoundWidget::setMuted( bool mute )
{ {
b_is_muted = mute; b_is_muted = mute;
playlist_t *p_playlist = pl_Get( p_intf ); playlist_t *p_playlist = THEPL;
playlist_MuteSet( p_playlist, mute ); playlist_MuteSet( p_playlist, mute );
} }
......
...@@ -398,7 +398,7 @@ static void ChangeVFiltersString( struct intf_thread_t *p_intf, const char *psz_ ...@@ -398,7 +398,7 @@ static void ChangeVFiltersString( struct intf_thread_t *p_intf, const char *psz_
/* Try to set on the fly */ /* Try to set on the fly */
if( !strcmp( psz_filter_type, "video-splitter" ) ) if( !strcmp( psz_filter_type, "video-splitter" ) )
{ {
playlist_t *p_playlist = pl_Get( p_intf ); playlist_t *p_playlist = THEPL;
var_SetString( p_playlist, psz_filter_type, psz_string ); var_SetString( p_playlist, psz_filter_type, psz_string );
} }
else else
...@@ -714,7 +714,7 @@ void ExtV4l2::showEvent( QShowEvent *event ) ...@@ -714,7 +714,7 @@ void ExtV4l2::showEvent( QShowEvent *event )
void ExtV4l2::Refresh( void ) void ExtV4l2::Refresh( void )
{ {
vlc_object_t *p_obj = (vlc_object_t*)vlc_object_find_name( pl_Get(p_intf), "v4l2" ); vlc_object_t *p_obj = (vlc_object_t*)vlc_object_find_name( THEPL, "v4l2" );
help->hide(); help->hide();
if( box ) if( box )
{ {
...@@ -877,7 +877,7 @@ void ExtV4l2::ValueChange( bool value ) ...@@ -877,7 +877,7 @@ void ExtV4l2::ValueChange( bool value )
void ExtV4l2::ValueChange( int value ) void ExtV4l2::ValueChange( int value )
{ {
QObject *s = sender(); QObject *s = sender();
vlc_object_t *p_obj = (vlc_object_t*)vlc_object_find_name( pl_Get(p_intf), "v4l2" ); vlc_object_t *p_obj = (vlc_object_t*)vlc_object_find_name( THEPL, "v4l2" );
if( p_obj ) if( p_obj )
{ {
QString var = s->objectName(); QString var = s->objectName();
......
...@@ -307,8 +307,7 @@ void MetaPanel::saveMeta() ...@@ -307,8 +307,7 @@ void MetaPanel::saveMeta()
input_item_SetPublisher( p_input, qtu( publisher_text->text() ) ); input_item_SetPublisher( p_input, qtu( publisher_text->text() ) );
input_item_SetDescription( p_input, qtu( description_text->toPlainText() ) ); input_item_SetDescription( p_input, qtu( description_text->toPlainText() ) );
playlist_t *p_playlist = pl_Get( p_intf ); input_item_WriteMeta( VLC_OBJECT(THEPL), p_input );
input_item_WriteMeta( VLC_OBJECT(p_playlist), p_input );
/* Reset the status of the mode. No need to emit any signal because parent /* Reset the status of the mode. No need to emit any signal because parent
is the only caller */ is the only caller */
......
...@@ -459,7 +459,7 @@ static void AddItemToPlaylist( int i_media_id, bool bPlay, media_library_t* p_ml ...@@ -459,7 +459,7 @@ static void AddItemToPlaylist( int i_media_id, bool bPlay, media_library_t* p_ml
i_media_id ); i_media_id );
return; return;
} }
playlist_t *p_playlist = pl_Get( p_ml ); playlist_t *p_playlist = THEPL;
playlist_item_t *p_playlist_item = NULL; playlist_item_t *p_playlist_item = NULL;
playlist_Lock( p_playlist ); playlist_Lock( p_playlist );
......
...@@ -965,7 +965,7 @@ void PLModel::renameNode( QModelIndex index, QString name ) ...@@ -965,7 +965,7 @@ void PLModel::renameNode( QModelIndex index, QString name )
if ( !index.isValid() ) index = rootIndex(); if ( !index.isValid() ) index = rootIndex();
input_item_t* p_input = this->getInputItem( index ); input_item_t* p_input = this->getInputItem( index );
input_item_SetName( p_input, qtu( name ) ); input_item_SetName( p_input, qtu( name ) );
playlist_t *p_playlist = pl_Get( p_intf ); playlist_t *p_playlist = THEPL;
input_item_WriteMeta( VLC_OBJECT(p_playlist), p_input ); input_item_WriteMeta( VLC_OBJECT(p_playlist), p_input );
PL_UNLOCK; PL_UNLOCK;
} }
......
...@@ -987,7 +987,7 @@ MainInputManager::MainInputManager( intf_thread_t *_p_intf ) ...@@ -987,7 +987,7 @@ MainInputManager::MainInputManager( intf_thread_t *_p_intf )
im, setInput( input_thread_t * ) ); im, setInput( input_thread_t * ) );
/* initialize p_input (an input can already be running) */ /* initialize p_input (an input can already be running) */
p_input = playlist_CurrentInput( pl_Get(p_intf) ); p_input = playlist_CurrentInput( THEPL );
if( p_input ) if( p_input )
emit inputChanged( p_input ); emit inputChanged( p_input );
...@@ -1055,7 +1055,7 @@ void MainInputManager::customEvent( QEvent *event ) ...@@ -1055,7 +1055,7 @@ void MainInputManager::customEvent( QEvent *event )
if( p_input != NULL ) if( p_input != NULL )
vlc_object_release( p_input ); vlc_object_release( p_input );
p_input = playlist_CurrentInput( pl_Get(p_intf) ); p_input = playlist_CurrentInput( THEPL );
emit inputChanged( p_input ); emit inputChanged( p_input );
} }
......
...@@ -334,7 +334,7 @@ static void Abort( void *obj ) ...@@ -334,7 +334,7 @@ static void Abort( void *obj )
static void RegisterIntf( intf_thread_t *p_this ) static void RegisterIntf( intf_thread_t *p_this )
{ {
playlist_t *pl = pl_Get(p_this); playlist_t *pl = p_this->p_sys->p_playlist;
var_Create (pl, "qt4-iface", VLC_VAR_ADDRESS); var_Create (pl, "qt4-iface", VLC_VAR_ADDRESS);
var_SetAddress (pl, "qt4-iface", p_this); var_SetAddress (pl, "qt4-iface", p_this);
var_Create (pl, "window", VLC_VAR_STRING); var_Create (pl, "window", VLC_VAR_STRING);
...@@ -372,6 +372,12 @@ static int Open( vlc_object_t *p_this, bool isDialogProvider ) ...@@ -372,6 +372,12 @@ static int Open( vlc_object_t *p_this, bool isDialogProvider )
p_sys->p_mi = NULL; p_sys->p_mi = NULL;
p_sys->pl_model = NULL; p_sys->pl_model = NULL;
/* set up the playlist to work on */
if( isDialogProvider )
p_intf->p_sys->p_playlist = pl_Get( (intf_thread_t *)p_intf->p_parent );
else
p_intf->p_sys->p_playlist = pl_Get( p_intf );
/* */ /* */
vlc_sem_init (&ready, 0); vlc_sem_init (&ready, 0);
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
...@@ -420,7 +426,7 @@ static void Close( vlc_object_t *p_this ) ...@@ -420,7 +426,7 @@ static void Close( vlc_object_t *p_this )
if( !p_sys->b_isDialogProvider ) if( !p_sys->b_isDialogProvider )
{ {
playlist_t *pl = pl_Get(p_intf); playlist_t *pl = THEPL;
var_Destroy (pl, "window"); var_Destroy (pl, "window");
var_Destroy (pl, "qt4-iface"); var_Destroy (pl, "qt4-iface");
......
...@@ -78,12 +78,13 @@ struct intf_sys_t ...@@ -78,12 +78,13 @@ struct intf_sys_t
int i_screenHeight; /* Detection of Small screens */ int i_screenHeight; /* Detection of Small screens */
unsigned voutWindowType; /* Type of vout_window_t provided */ unsigned voutWindowType; /* Type of vout_window_t provided */
bool b_isDialogProvider; /* Qt mode or Skins mode */ bool b_isDialogProvider; /* Qt mode or Skins mode */
playlist_t *p_playlist; /* playlist */
#ifdef _WIN32 #ifdef _WIN32
bool disable_volume_keys; bool disable_volume_keys;
#endif #endif
}; };
#define THEPL pl_Get(p_intf) #define THEPL p_intf->p_sys->p_playlist
#define QPL_LOCK playlist_Lock( THEPL ); #define QPL_LOCK playlist_Lock( THEPL );
#define QPL_UNLOCK playlist_Unlock( THEPL ); #define QPL_UNLOCK playlist_Unlock( THEPL );
......
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