Stop playing videos when they are no longer visible

This mimics Adobe Reader behaviour
BUGS: 286932
FIXED-IN: 4.8.0
remotes/origin/KDE/4.8
Albert Astals Cid 14 years ago
parent e56df195f0
commit 89e2611f32
  1. 5
      ui/pageview.cpp
  2. 5
      ui/videowidget.cpp
  3. 2
      ui/videowidget.h

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

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

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

Loading…
Cancel
Save