diff options
| -rw-r--r-- | src/qmmp/output.cpp | 14 | ||||
| -rw-r--r-- | src/qmmp/output.h | 5 | ||||
| -rw-r--r-- | src/qmmp/visual.cpp | 2 | ||||
| -rw-r--r-- | src/ui/mainwindow.cpp | 6 |
4 files changed, 21 insertions, 6 deletions
diff --git a/src/qmmp/output.cpp b/src/qmmp/output.cpp index 7c64c66ef..a7ae2d8ed 100644 --- a/src/qmmp/output.cpp +++ b/src/qmmp/output.cpp @@ -152,7 +152,6 @@ void Output::error ( const QString &e ) emit stateChanged ( OutputState ( e ) ); } - void Output::addVisual ( Visual *v ) { if (visuals.indexOf (v) == -1) @@ -171,10 +170,21 @@ void Output::removeVisual (Visual *v) { VisualFactory *factory = m_vis_map.key(v); m_vis_map.remove(factory); - //Visual::setEnabled(factory, FALSE); } } +void Output::processCloseEvent(Visual *v, QCloseEvent *event) +{ + if(event->spontaneous () && m_vis_map.key(v)) + { + VisualFactory *factory = m_vis_map.key(v); + m_vis_map.remove(factory); + Visual::setEnabled(factory, FALSE); + dispatch(OutputState::VisualRemoved); + } + removeVisual (v); +} + void Output::addVisual(VisualFactory *factory, QWidget *parent) { if (m_vis_map.value(factory)) diff --git a/src/qmmp/output.h b/src/qmmp/output.h index f5ea1cf50..6bc3487b3 100644 --- a/src/qmmp/output.h +++ b/src/qmmp/output.h @@ -28,7 +28,7 @@ class OutputState { public: - enum Type { Playing, Buffering, Info, Paused, Stopped, Volume, Error }; + enum Type { Playing, Buffering, Info, Paused, Stopped, Volume, Error, VisualRemoved }; OutputState() : m_type(Stopped), m_error_msg(0), m_elasped_seconds(0), @@ -161,6 +161,7 @@ public: void removeVisual(Visual*); void addVisual(VisualFactory *factory, QWidget *parent); void removeVisual(VisualFactory *factory); + void processCloseEvent(Visual *v, QCloseEvent *event); // abstract virtual bool isInitialized() const = 0; @@ -173,7 +174,7 @@ public: virtual long latency() = 0; virtual void seek(long) = 0; virtual void setVolume(int, int){}; - virtual void volume(int*, int*){}; + virtual void volume(int *, int *){}; static void registerFactory(OutputFactory *); static Output *create(QObject *); diff --git a/src/qmmp/visual.cpp b/src/qmmp/visual.cpp index cabf8f5bc..4347626de 100644 --- a/src/qmmp/visual.cpp +++ b/src/qmmp/visual.cpp @@ -147,6 +147,6 @@ bool Visual::isEnabled(VisualFactory* factory) void Visual::closeEvent (QCloseEvent *event) { - m_output->removeVisual(this); + m_output->processCloseEvent(this, event); QWidget::closeEvent(event); } diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index d35499282..e177426f1 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -369,9 +369,13 @@ void MainWindow::showOutputState(const OutputState &st) case OutputState::Volume: { m_generalHandler->setVolume(st.leftVolume(), st.rightVolume()); + break; + } + case OutputState::VisualRemoved: + { + m_visMenu->updateActions(); } } - } void MainWindow::showDecoderState(const DecoderState &st) { |
