File 0002-Don-t-allow-adding-Analyzer-applet-when-not-supporte.patch of Package amarok

From 2b87fb43c550e946acfb47b3c5b217a07fcefa0c Mon Sep 17 00:00:00 2001
From: Mark Kretschmann <kretschmann@kde.org>
Date: Thu, 22 Aug 2013 16:47:30 +0200
Subject: [PATCH 1/1] Don't allow adding Analyzer applet when not supported.

Also now shows an error message explaining why it can't be used.

BUG: 323119
---
 src/EngineController.cpp                            |  7 +++++++
 src/EngineController.h                              |  5 +++++
 src/context/Containment.h                           |  2 +-
 src/context/ContextView.cpp                         | 21 ++-------------------
 src/context/ContextView.h                           |  5 -----
 .../verticallayout/VerticalToolbarContainment.cpp   | 17 +++++++++++++----
 .../verticallayout/VerticalToolbarContainment.h     |  4 ++--
 7 files changed, 30 insertions(+), 31 deletions(-)

diff --git a/src/EngineController.cpp b/src/EngineController.cpp
index 99adb53..82ca86b 100644
--- a/src/EngineController.cpp
+++ b/src/EngineController.cpp
@@ -926,6 +926,13 @@ bool EngineController::supportsGainAdjustments() const
     return m_preamp;
 }
 
+bool EngineController::supportsAudioDataOutput() const
+{
+    const Phonon::AudioDataOutput out;
+    return out.isValid();
+}
+
+
 //////////////////////////////////////////////////////////////////////////////////////////
 // PRIVATE SLOTS
 //////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/EngineController.h b/src/EngineController.h
index c4fae9a..8735a71 100644
--- a/src/EngineController.h
+++ b/src/EngineController.h
@@ -313,6 +313,11 @@ public slots:
      */
     bool supportsGainAdjustments() const;
 
+    /**
+     * Return true if the current Phonon backend supports visualizations.
+     */
+    bool supportsAudioDataOutput() const;
+
 Q_SIGNALS:
     /**
      * Emitted when the playback stops while playing a track.
diff --git a/src/context/Containment.h b/src/context/Containment.h
index a0f5d7c..9b54b75 100644
--- a/src/context/Containment.h
+++ b/src/context/Containment.h
@@ -51,7 +51,7 @@ public:
 public slots:
     void showApplet( Plasma::Applet* ) {}
     void moveApplet( Plasma::Applet*, int, int ) {}
-    virtual Applet* addApplet( const QString& pluginName, const int ) { Q_UNUSED( pluginName ); return 0; }
+    virtual void addApplet( const QString& pluginName, const int ) = 0;
 };
 
 } // Context namespace
diff --git a/src/context/ContextView.cpp b/src/context/ContextView.cpp
index e7eeb49..ce28d8d 100644
--- a/src/context/ContextView.cpp
+++ b/src/context/ContextView.cpp
@@ -36,6 +36,7 @@
 #include "core/support/Amarok.h"
 #include "core/support/Debug.h"
 #include "core/meta/Meta.h"
+#include "EngineController.h"
 
 #include <plasma/dataenginemanager.h>
 
@@ -221,12 +222,8 @@ ContextView::loadConfig()
             const bool firstTimeWithAnalyzer = Amarok::config( "Context View" ).readEntry( "firstTimeWithAnalyzer", true );
             if( firstTimeWithAnalyzer )
             {
-                // Check if the Phonon backend implements all features required by the analyzer
-                Phonon::AudioDataOutput out;
-                const bool phononCanHandleAnalyzer = out.isValid();
-
                 QStringList plugins = cg.readEntry( "plugins", QStringList() );
-                if( phononCanHandleAnalyzer && !plugins.contains( "analyzer" ) )
+                if( EngineController::instance()->supportsAudioDataOutput() && !plugins.contains( "analyzer" ) )
                 {
                     Amarok::config( "Context View" ).writeEntry( "firstTimeWithAnalyzer", false );
 
@@ -244,20 +241,6 @@ ContextView::loadConfig()
     PERF_LOG( "Done loading config" );
 }
 
-Plasma::Applet*
-ContextView::addApplet( const QString& name, const QStringList& args )
-{
-    QVariantList argList;
-    QStringListIterator i(args);
-    while( i.hasNext() )
-        argList << QVariant( i.next() );
-
-    if( !containment() )
-        contextScene()->addContainment( "amarok_containment_vertical" );
-
-    return containment()->addApplet( name, argList );
-}
-
 void
 ContextView::addCollapseAnimation( QAbstractAnimation *anim )
 {
diff --git a/src/context/ContextView.h b/src/context/ContextView.h
index 1593f20..0cd5236 100644
--- a/src/context/ContextView.h
+++ b/src/context/ContextView.h
@@ -98,11 +98,6 @@ public:
 
 public slots:
     /**
-     * Add the applet with the given plugin name to the context view. Will add in default position, which is at
-     *  the end of the applet list.
-     */
-    Plasma::Applet* addApplet(const QString& name, const QStringList& args = QStringList());
-    /**
      * Convenience methods to show and hide the applet explorer.
      */
     void hideAppletExplorer();
diff --git a/src/context/containments/verticallayout/VerticalToolbarContainment.cpp b/src/context/containments/verticallayout/VerticalToolbarContainment.cpp
index 783d3db..3a9fdc8 100644
--- a/src/context/containments/verticallayout/VerticalToolbarContainment.cpp
+++ b/src/context/containments/verticallayout/VerticalToolbarContainment.cpp
@@ -19,7 +19,10 @@
 #include "VerticalToolbarContainment.h"
 
 #include "ContextView.h"
+#include "core/interfaces/Logger.h"
+#include "core/support/Components.h"
 #include "core/support/Debug.h"
+#include "EngineController.h"
 #include "PaletteHandler.h"
 #include "VerticalAppletLayout.h"
 
@@ -136,19 +139,25 @@ Context::VerticalToolbarContainment::updateGeometry()
     m_applets->refresh();
 }
 
-Plasma::Applet*
+void
 Context::VerticalToolbarContainment::addApplet( const QString& pluginName, const int loc ) // SLOT
 {
     DEBUG_BLOCK
 
+    if( pluginName == "analyzer" && !EngineController::instance()->supportsAudioDataOutput() )
+    {
+        Amarok::Components::logger()->longMessage( i18n( "Error: Visualizations are not supported by your current Phonon backend." ),
+                                                   Amarok::Logger::Error ) ;
+
+        return;
+    }
+
     Plasma::Applet* applet = Plasma::Containment::addApplet( pluginName );
 
     Q_ASSERT_X( applet, "addApplet", "FAILED ADDING APPLET TO CONTAINMENT!! NOT FOUND!!" );
 
     m_applets->addApplet( applet, loc );
-    applet->setFlag(QGraphicsItem::ItemIsMovable, false);
-
-    return applet;
+    applet->setFlag( QGraphicsItem::ItemIsMovable, false );
 }
 
 void
diff --git a/src/context/containments/verticallayout/VerticalToolbarContainment.h b/src/context/containments/verticallayout/VerticalToolbarContainment.h
index 31f7632..6c933ab 100644
--- a/src/context/containments/verticallayout/VerticalToolbarContainment.h
+++ b/src/context/containments/verticallayout/VerticalToolbarContainment.h
@@ -48,8 +48,8 @@ class VerticalToolbarContainment : public Containment
         virtual ContextView *view();
 
     public slots:
-        Applet* addApplet( const QString& pluginName, const int );
-        void    appletRemoved( Plasma::Applet* );
+        void addApplet( const QString& pluginName, const int );
+        void appletRemoved( Plasma::Applet* );
         // these slots below are forwarded to the layout
         void showApplet( Plasma::Applet* );
         void moveApplet( Plasma::Applet*, int, int );
-- 
1.8.4