diff --git a/src/libtomahawk/resolvers/ExternalResolverGui.cpp b/src/libtomahawk/resolvers/ExternalResolverGui.cpp index b5014fb2c..da8d41783 100644 --- a/src/libtomahawk/resolvers/ExternalResolverGui.cpp +++ b/src/libtomahawk/resolvers/ExternalResolverGui.cpp @@ -30,6 +30,8 @@ #include #include #include +#include +#include Tomahawk::ExternalResolverGui::ExternalResolverGui(const QString& filePath) : Tomahawk::ExternalResolver(filePath) @@ -82,6 +84,28 @@ Tomahawk::ExternalResolverGui::addChildProperties( QObject* widget, QVariantMap& } +void +Tomahawk::ExternalResolverGui::setupClickHandlerOnUrlButtons( QObject* widget ) +{ + if( !widget || !widget->isWidgetType() ) + return; + + if( qstrcmp( widget->metaObject()->className(), "QPushButton" ) == 0 && !widget->property( "url" ).isNull() ) + { + QPushButton* button = qobject_cast< QPushButton* >( widget ); + Q_ASSERT( button ); + + connect( button, &QPushButton::clicked, [=]() { + QDesktopServices::openUrl( widget->property( "url" ).toUrl() ); + }); + } + + // and recurse + foreach( QObject* child, widget->children() ) + setupClickHandlerOnUrlButtons( child ); +} + + AccountConfigWidget* Tomahawk::ExternalResolverGui::widgetFromData( QByteArray& data, QWidget* parent ) { @@ -94,6 +118,8 @@ Tomahawk::ExternalResolverGui::widgetFromData( QByteArray& data, QWidget* parent QBuffer b( &data ); QWidget* w = l.load( &b, configWidget ); + setupClickHandlerOnUrlButtons( w ); + // HACK: proper way would be to create a designer plugin for this widget type configWidget->setLayout( new QBoxLayout( QBoxLayout::TopToBottom ) ); configWidget->layout()->addWidget( w ); diff --git a/src/libtomahawk/resolvers/ExternalResolverGui.h b/src/libtomahawk/resolvers/ExternalResolverGui.h index a4bba0d7e..85b47f5ea 100644 --- a/src/libtomahawk/resolvers/ExternalResolverGui.h +++ b/src/libtomahawk/resolvers/ExternalResolverGui.h @@ -50,7 +50,8 @@ protected: QByteArray fixDataImagePaths( const QByteArray& data, bool compressed, const QVariantMap& images ); private: - void addChildProperties( QObject* parent, QVariantMap& m ); + void addChildProperties( QObject* widget, QVariantMap& m ); + void setupClickHandlerOnUrlButtons( QObject* widget ); }; }; //ns