Stop playing videos when they are no longer visible

This mimics Adobe Reader behaviour
BUGS: 286932
FIXED-IN: 4.8.0
This commit is contained in:
Albert Astals Cid 2011-12-13 19:50:46 +01:00
parent e56df195f0
commit 89e2611f32
3 changed files with 12 additions and 0 deletions

View file

@ -3832,6 +3832,7 @@ void PageView::slotRequestVisiblePixmaps( int newValue )
QRect viewportRect( horizontalScrollBar()->value(),
verticalScrollBar()->value(),
viewport()->width(), viewport()->height() );
const QRect viewportRectAtZeroZero( 0, 0, viewport()->width(), viewport()->height() );
// some variables used to determine the viewport
int nearPageNumber = -1;
@ -3862,6 +3863,10 @@ void PageView::slotRequestVisiblePixmaps( int newValue )
vw->move(
qRound( i->uncroppedGeometry().left() + i->uncroppedWidth() * r.left ) + 1 - viewportRect.left(),
qRound( i->uncroppedGeometry().top() + i->uncroppedHeight() * r.top ) + 1 - viewportRect.top() );
if ( vw->isPlaying() && viewportRectAtZeroZero.intersect( vw->geometry() ).isEmpty() ) {
vw->stop();
}
}
if ( !i->isVisible() )

View file

@ -219,6 +219,11 @@ Okular::NormalizedRect VideoWidget::normGeometry() const
return d->geom;
}
bool VideoWidget::isPlaying() const
{
return d->player->isPlaying();
}
void VideoWidget::play()
{
d->load();

View file

@ -27,6 +27,8 @@ class VideoWidget : public QWidget
void setNormGeometry( const Okular::NormalizedRect &rect );
Okular::NormalizedRect normGeometry() const;
bool isPlaying() const;
public slots:
void play();