aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/qmmp/output.cpp14
-rw-r--r--src/qmmp/output.h5
-rw-r--r--src/qmmp/visual.cpp2
-rw-r--r--src/ui/mainwindow.cpp6
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)
{