[vlc-devel] [PATCH 16/18] gui/qt: fix #17184 (missing entries in context-menu)
Thomas Guillem
thomas at gllm.fr
Wed Jul 20 09:24:32 CEST 2016
On Wed, Jul 20, 2016, at 04:37, Filip Roséen wrote:
> This patch fixes the regression where certain entities on the
> context-menu when dealing with the playlist are not displayed if you
> right-click somewhere where there is no item:
>
> - https://trac.videolan.org/vlc/ticket/17184
>
> Actions that are not bound to a single entity are now displayed
> correctly (vlc 2.2.4 has been used as reference), with two minor
> differences:
>
> * ACTION_PAUSE will now be shown if the current item is being
> played, and;
>
> * ACTION_PLAY will not show if the item is already playing.
>
> refs #17184
> ---
> .../gui/qt/components/playlist/playlist_model.cpp | 133
> +++++++++++++--------
> 1 file changed, 85 insertions(+), 48 deletions(-)
>
> diff --git a/modules/gui/qt/components/playlist/playlist_model.cpp
> b/modules/gui/qt/components/playlist/playlist_model.cpp
> index 3f03209..11fc79b 100644
> --- a/modules/gui/qt/components/playlist/playlist_model.cpp
> +++ b/modules/gui/qt/components/playlist/playlist_model.cpp
> @@ -1001,57 +1001,94 @@ bool PLModel::action( QAction *action, const
> QModelIndexList &indexes )
>
> bool PLModel::isSupportedAction( actions action, const QModelIndex
> &index ) const
> {
> - if( !index.isValid() )
> - return false;
> -
> - const PLItem *item = getItem( index );
> + vlc_playlist_locker pl_lock ( THEPL );
> +
Stray spaces (No I don't have any stray spaces detector, I just clicked
here by accident)
> + bool const b_readonly = THEPL->p_root->i_flags & PLAYLIST_RO_FLAG;
> + AbstractPLItem * item = VLCModel::getItem( index );
>
> - switch ( action )
> + switch( action )
> {
> - case ACTION_ADDTOPLAYLIST:
> - /* Only if we are not already in Current Playing */
> - if ( getPLRootType() == ROOTTYPE_CURRENT_PLAYING ) return false;
> - if( index != rootIndex() )
> - return ( item->id( PLAYLIST_ID ) != THEPL->p_playing->i_id
> );
> - case ACTION_SORT:
> - return rowCount() && !item->readOnly();
> - case ACTION_PLAY:
> - {
> - PL_LOCK;
> - bool b_ret = !isCurrent( index ) || playlist_Status(THEPL) ==
> PLAYLIST_PAUSED;
> - PL_UNLOCK;
> - return b_ret;
> - }
> - case ACTION_PAUSE:
> - {
> - PL_LOCK;
> - bool b_ret = isCurrent( index ) && playlist_Status(THEPL) ==
> PLAYLIST_RUNNING;
> - PL_UNLOCK;
> - return b_ret;
> - }
> - case ACTION_STREAM:
> - case ACTION_SAVE:
> - case ACTION_INFO:
> - return index != rootIndex();
> - case ACTION_REMOVE:
> - return index != rootIndex() && !item->readOnly();
> - case ACTION_EXPLORE:
> - return getURI( index ).startsWith( "file://" );
> - case ACTION_CREATENODE:
> - return ( isTree() && !item->readOnly() );
> - case ACTION_RENAMENODE:
> - return ( index != rootIndex() ) && !isLeaf( index ) &&
> !item->readOnly();
> - case ACTION_CLEAR:
> - return rowCount() && !item->readOnly();
> - case ACTION_ENQUEUEFILE:
> - case ACTION_ENQUEUEDIR:
> - case ACTION_ENQUEUEGENERIC:
> - return !item->readOnly();
> - case ACTION_SAVETOPLAYLIST:
> - return rowCount() > 0;
> - default:
> - return false;
> + case ACTION_ADDTOPLAYLIST:
> + {
> + if( getPLRootType() == ROOTTYPE_CURRENT_PLAYING )
> + return false;
> +
> + if( index == rootIndex() )
> + return false;
> +
> + return item && item->id( PLAYLIST_ID ) !=
> THEPL->p_playing->i_id;
> + }
> + case ACTION_SORT:
> + {
> + return rowCount() && b_readonly;
> + }
> + case ACTION_PLAY:
> + {
> + if( playlist_Status( THEPL ) == PLAYLIST_RUNNING )
> + {
> + if( isCurrent( index ) )
> + return false;
> + }
if( playlist_Status( THEPL ) == PLAYLIST_RUNNING && isCurrent( index ) )
return false;
no?
> +
> + return index.isValid();;
> + }
> + case ACTION_PAUSE:
> + {
> + if( !isCurrent( index ) )
> + return false;
> +
> + return playlist_Status( THEPL ) == PLAYLIST_RUNNING;
> + }
> + case ACTION_STREAM:
> + case ACTION_SAVE:
> + case ACTION_INFO:
> + {
> + return index != rootIndex();
> + }
> + case ACTION_REMOVE:
> + {
> + if( index == rootIndex() )
> + return false;
> +
> + return item && !item->readOnly();
> + }
> + case ACTION_EXPLORE:
> + {
> + return getURI( index ).startsWith( "file:///" );
> + }
> + case ACTION_CREATENODE:
> + {
> + return isTree() && !b_readonly;
> + }
> + case ACTION_RENAMENODE:
> + {
> + if( index == rootIndex() || item == NULL )
> + return false;
> +
> + input_item_t* p_iitem = item->inputItem();
> +
> + if( p_iitem == NULL )
> + return false;
> +
> + return p_iitem->i_type == ITEM_TYPE_NODE
> + || p_iitem->i_type == ITEM_TYPE_DIRECTORY;
> + }
> + case ACTION_CLEAR:
> + {
> + return rowCount() && !b_readonly;
> + }
> + case ACTION_ENQUEUEGENERIC:
> + case ACTION_ENQUEUEFILE:
> + case ACTION_ENQUEUEDIR:
> + {
> + return !b_readonly;
> + }
> + case ACTION_SAVETOPLAYLIST:
> + {
> + return rowCount();
> + }
> }
> +
> return false;
> }
>
> --
> 2.9.0
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
More information about the vlc-devel
mailing list