1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-26 15:25:04 +02:00

* Right clicks shouldn't collapse/expand anything in the sidebar.

This commit is contained in:
Christian Muehlhaeuser
2014-08-21 13:03:22 +02:00
parent e82fc614de
commit ee11ff0bb7

View File

@@ -771,12 +771,24 @@ SourceDelegate::updateEditorGeometry( QWidget* editor, const QStyleOptionViewIte
bool bool
SourceDelegate::editorEvent( QEvent* event, QAbstractItemModel* model, const QStyleOptionViewItem& option, const QModelIndex& index ) SourceDelegate::editorEvent( QEvent* event, QAbstractItemModel* model, const QStyleOptionViewItem& option, const QModelIndex& index )
{ {
QMouseEvent* mEvent = 0;
switch ( event->type() )
{
// case QEvent::MouseTrackingChange:
case QEvent::MouseButtonDblClick:
case QEvent::MouseButtonPress:
case QEvent::MouseButtonRelease:
case QEvent::MouseMove:
mEvent = static_cast< QMouseEvent* >( event );
default:
break;
}
bool hoveringTrack = false; bool hoveringTrack = false;
if ( m_trackRects.contains( index ) ) if ( m_trackRects.contains( index ) && mEvent )
{ {
const QRect trackRect = m_trackRects[ index ]; const QRect trackRect = m_trackRects[ index ];
const QMouseEvent* ev = static_cast< QMouseEvent* >( event ); hoveringTrack = trackRect.contains( mEvent->pos() );
hoveringTrack = trackRect.contains( ev->pos() );
if ( hoveringTrack ) if ( hoveringTrack )
{ {
@@ -796,17 +808,15 @@ SourceDelegate::editorEvent( QEvent* event, QAbstractItemModel* model, const QSt
} }
bool lockRectContainsClick = false, headphonesRectContainsClick = false; bool lockRectContainsClick = false, headphonesRectContainsClick = false;
if ( m_headphoneRects.contains( index ) ) if ( m_headphoneRects.contains( index ) && mEvent )
{ {
const QRect headphoneRect = m_headphoneRects[ index ]; const QRect headphoneRect = m_headphoneRects[ index ];
const QMouseEvent* ev = static_cast< QMouseEvent* >( event ); headphonesRectContainsClick = headphoneRect.contains( mEvent->pos() );
headphonesRectContainsClick = headphoneRect.contains( ev->pos() );
} }
if ( m_lockRects.contains( index ) ) if ( m_lockRects.contains( index ) && mEvent )
{ {
const QRect lockRect = m_lockRects[ index ]; const QRect lockRect = m_lockRects[ index ];
const QMouseEvent* ev = static_cast< QMouseEvent* >( event ); lockRectContainsClick = lockRect.contains( mEvent->pos() );
lockRectContainsClick = lockRect.contains( ev->pos() );
} }
if ( event->type() == QEvent::MouseMove ) if ( event->type() == QEvent::MouseMove )
@@ -824,16 +834,15 @@ SourceDelegate::editorEvent( QEvent* event, QAbstractItemModel* model, const QSt
{ {
SourceTreeItem* gpi = index.data( SourcesModel::SourceTreeItemRole ).value< SourceTreeItem* >(); SourceTreeItem* gpi = index.data( SourcesModel::SourceTreeItemRole ).value< SourceTreeItem* >();
Q_ASSERT( gpi ); Q_ASSERT( gpi );
QMouseEvent* ev = static_cast< QMouseEvent* >( event );
QStyleOptionViewItemV4 o = option; QStyleOptionViewItemV4 o = option;
initStyleOption( &o, index ); initStyleOption( &o, index );
int padding = 3; int padding = 3;
QRect r ( o.rect.right() - padding - m_iconHeight, padding + o.rect.y(), m_iconHeight, m_iconHeight ); QRect r ( o.rect.right() - padding - m_iconHeight, padding + o.rect.y(), m_iconHeight, m_iconHeight );
if ( r.contains( ev->pos() ) ) if ( r.contains( mEvent->pos() ) )
{ {
if ( event->type() == QEvent::MouseButtonRelease ) if ( event->type() == QEvent::MouseButtonRelease && mEvent->button() == Qt::LeftButton )
{ {
gpi->removeFromList(); gpi->removeFromList();
@@ -852,13 +861,12 @@ SourceDelegate::editorEvent( QEvent* event, QAbstractItemModel* model, const QSt
if ( hoveringTrack && colItem->source() && colItem->source()->currentTrack() ) if ( hoveringTrack && colItem->source() && colItem->source()->currentTrack() )
{ {
const QMouseEvent* ev = static_cast< QMouseEvent* >( event ); if ( event->type() == QEvent::MouseButtonRelease && mEvent->button() == Qt::LeftButton )
if ( event->type() == QEvent::MouseButtonRelease && ev->button() == Qt::LeftButton )
{ {
ViewManager::instance()->show( colItem->source()->currentTrack() ); ViewManager::instance()->show( colItem->source()->currentTrack() );
return true; return true;
} }
else if ( event->type() == QEvent::MouseButtonPress && ev->button() == Qt::RightButton ) else if ( event->type() == QEvent::MouseButtonPress && mEvent->button() == Qt::RightButton )
{ {
Tomahawk::ContextMenu* contextMenu = new Tomahawk::ContextMenu( m_parent ); Tomahawk::ContextMenu* contextMenu = new Tomahawk::ContextMenu( m_parent );
contextMenu->setQuery( colItem->source()->currentTrack() ); contextMenu->setQuery( colItem->source()->currentTrack() );
@@ -871,7 +879,7 @@ SourceDelegate::editorEvent( QEvent* event, QAbstractItemModel* model, const QSt
{ {
if ( headphonesRectContainsClick || lockRectContainsClick ) if ( headphonesRectContainsClick || lockRectContainsClick )
{ {
if ( event->type() == QEvent::MouseButtonRelease ) if ( event->type() == QEvent::MouseButtonRelease && mEvent->button() == Qt::LeftButton )
{ {
if ( headphonesRectContainsClick ) if ( headphonesRectContainsClick )
{ {
@@ -888,19 +896,18 @@ SourceDelegate::editorEvent( QEvent* event, QAbstractItemModel* model, const QSt
} }
} }
} }
else if ( event->type() == QEvent::MouseButtonRelease && type == SourcesModel::StaticPlaylist ) else if ( event->type() == QEvent::MouseButtonRelease && mEvent->button() == Qt::LeftButton && type == SourcesModel::StaticPlaylist )
{ {
PlaylistItem* plItem = qobject_cast< PlaylistItem* >( index.data( SourcesModel::SourceTreeItemRole ).value< SourceTreeItem* >() ); PlaylistItem* plItem = qobject_cast< PlaylistItem* >( index.data( SourcesModel::SourceTreeItemRole ).value< SourceTreeItem* >() );
Q_ASSERT( plItem ); Q_ASSERT( plItem );
QMouseEvent* mev = static_cast< QMouseEvent* >( event );
if ( plItem->canSubscribe() && !plItem->subscribedIcon().isNull() ) if ( plItem->canSubscribe() && !plItem->subscribedIcon().isNull() )
{ {
const int padding = 2; const int padding = 2;
const int imgWidth = option.rect.height() - 2*padding; const int imgWidth = option.rect.height() - 2*padding;
const QRect subRect( option.rect.right() - padding - imgWidth, option.rect.top() + padding, imgWidth, imgWidth ); const QRect subRect( option.rect.right() - padding - imgWidth, option.rect.top() + padding, imgWidth, imgWidth );
if ( subRect.contains( mev->pos() ) ) if ( subRect.contains( mEvent->pos() ) )
{ {
// Toggle playlist subscription // Toggle playlist subscription
plItem->setSubscribed( !plItem->subscribed() ); plItem->setSubscribed( !plItem->subscribed() );
@@ -912,7 +919,7 @@ SourceDelegate::editorEvent( QEvent* event, QAbstractItemModel* model, const QSt
// We emit our own clicked() signal instead of relying on QTreeView's, because that is fired whether or not a delegate accepts // We emit our own clicked() signal instead of relying on QTreeView's, because that is fired whether or not a delegate accepts
// a mouse press event. Since we want to swallow click events when they are on headphones other action items, here we make sure we only // a mouse press event. Since we want to swallow click events when they are on headphones other action items, here we make sure we only
// emit if we really want to // emit if we really want to
if ( event->type() == QEvent::MouseButtonRelease ) if ( event->type() == QEvent::MouseButtonRelease && mEvent->button() == Qt::LeftButton )
{ {
if ( m_lastClicked == -1 ) if ( m_lastClicked == -1 )
{ {