Index: src/app/loadView.cpp =================================================================== --- src/app/loadView.cpp +++ src/app/loadView.cpp @@ -43,6 +43,11 @@ void LoadView::setThumbnail(QWidget *object) { + if (!object) { + m_vThumb->hide(); + return; + } + m_vThumb->show(); object->setParent(m_vThumb); object->resize(m_vThumb->size()); object->show(); Index: src/app/mainWindow.cpp =================================================================== --- src/app/mainWindow.cpp +++ src/app/mainWindow.cpp @@ -91,7 +91,7 @@ , m_mainView( 0 ) , m_audioView( 0 ) , m_loadView( new LoadView(this) ) - , m_currentWidget( new QWidget(this) ) + , m_currentWidget( nullptr ) , m_leftDock( 0 ) , m_positionSlider( 0 ) , m_volumeSlider( 0 ) @@ -125,8 +125,6 @@ m_mainView->addWidget(videoWindow()); m_mainView->setCurrentWidget(m_loadView); - m_currentWidget = m_loadView; - setCentralWidget( m_mainView ); setFocusProxy( videoWindow() ); // essential! See VideoWindow::event(), QEvent::FocusOut @@ -213,6 +211,8 @@ connect( engine(), SIGNAL(audioChannelsChanged(QList)), this, SLOT(audioChannelsChanged(QList)) ); connect( engine(), SIGNAL(mutedChanged(bool)), this, SLOT(mutedChanged(bool)) ); + connect( engine(), &VideoWindow::finished, this, &MainWindow::toggleLoadView ); + if( !engine()->init() ) { KMessageBox::error( this, i18n( "Phonon could not be successfully initialized. Dragon Player will now exit.") ); @@ -433,18 +433,21 @@ void MainWindow::toggleLoadView() { - if( m_mainView->currentWidget() == m_loadView ) { - if( m_mainView->indexOf(m_currentWidget) == -1 ) { - m_mainView->addWidget(m_currentWidget); + if (m_mainView->currentWidget() == m_loadView) { + if (engine()->state() != Phonon::StoppedState) { + if (m_mainView->indexOf(m_currentWidget) == -1) { + m_mainView->addWidget(m_currentWidget); + } + m_mainView->setCurrentWidget(m_currentWidget); } - m_mainView->setCurrentWidget(m_currentWidget); engine()->isPreview(false); - } else if( m_currentWidget != m_audioView ) { - qDebug() << "setting Thumbnail for video Widget"; + } else if (m_currentWidget != m_audioView) { m_mainView->setCurrentWidget(m_loadView); - m_mainView->removeWidget(m_currentWidget); - engine()->isPreview(true); - m_loadView->setThumbnail(m_currentWidget); + if (engine()->state() != Phonon::StoppedState) { + m_mainView->removeWidget(m_currentWidget); + engine()->isPreview(true); + m_loadView->setThumbnail(m_currentWidget); + } } else { m_mainView->setCurrentWidget(m_loadView); } @@ -494,7 +497,7 @@ void MainWindow::stop() { engine()->stop(); - m_mainView->setCurrentWidget(m_loadView); + toggleLoadView(); } void @@ -569,23 +572,14 @@ job->deleteLater(); } - if( m_mainView->indexOf(engine()) == -1 ) - toggleLoadView(); - //let xine handle invalid, etc, QUrlS //TODO it handles non-existing files with bad error message if (!ret) ret = engine()->load( url ); if( ret ) { - if( TheStream::hasVideo() ) { - m_currentWidget = engine(); - } else { - m_currentWidget = m_audioView; - if( !isMaximized() ) - resize(m_currentWidget->minimumSize()); - } - m_mainView->setCurrentWidget(m_currentWidget); + m_currentWidget = nullptr; + m_loadView->setThumbnail(nullptr); } return ret; } @@ -603,15 +597,9 @@ toggleLoadView(); break; case Phonon::StoppedState: - if( TheStream::hasVideo() ) { - m_currentWidget = engine(); - } else { - m_currentWidget = m_audioView; - if( !isMaximized() ) - resize(m_currentWidget->minimumSize()); - } engine()->play(); - m_mainView->setCurrentWidget(m_currentWidget); + m_currentWidget = nullptr; + m_loadView->setThumbnail(nullptr); break; default: break; @@ -692,6 +680,7 @@ } } else { engine()->playDvd(); + toggleLoadView(); qDebug() << "no disc in drive or Solid isn't working"; } } Index: src/app/stateChange.cpp =================================================================== --- src/app/stateChange.cpp +++ src/app/stateChange.cpp @@ -75,15 +75,22 @@ m_timeLabel->setVisible(enable); m_audioView->enableDemo(!enable); + if (!enable) { // Force out of full screen. if (isFullScreen) { setFullScreen(false); } - if (m_mainView->currentWidget() != m_loadView) { - m_mainView->setCurrentWidget(m_loadView); + } + + if (!m_currentWidget && state == Phonon::PlayingState) { + if (TheStream::hasVideo()) { + m_currentWidget = engine(); + } else { + m_currentWidget = m_audioView; + if (!isMaximized()) + resize(m_currentWidget->minimumSize()); } - } else if (state != Phonon::PausedState && m_mainView->currentWidget() == m_loadView) { toggleLoadView(); } Index: src/app/videoWindow.h =================================================================== --- src/app/videoWindow.h +++ src/app/videoWindow.h @@ -179,6 +179,7 @@ void metaDataChanged(); void hasVideoChanged( bool ); void volumeChanged( qreal ); + void finished(); }; //global function for general use by Dragon Player Index: src/app/videoWindow.cpp =================================================================== --- src/app/videoWindow.cpp +++ src/app/videoWindow.cpp @@ -115,7 +115,7 @@ connect( m_media, SIGNAL(hasVideoChanged(bool)), this, SIGNAL(hasVideoChanged(bool)) ); connect( m_media, SIGNAL(hasVideoChanged(bool)), m_vWidget, SLOT(setVisible(bool)) ); //hide video widget if no video to show connect( m_media, SIGNAL(hasVideoChanged(bool)), m_logo, SLOT(setHidden(bool)) ); - + connect( m_media, SIGNAL(finished()), this, SIGNAL(finished()) ); connect( m_controller, SIGNAL(availableSubtitlesChanged()), this, SLOT(updateChannels()) ); {