[libcalamaresui] Avoid metatype warnings at runtime

- Register the types with the Qt type system. This is needed
   because we're passing them as signal and slot parameters
   across threads.
This commit is contained in:
Adriaan de Groot 2019-02-24 07:32:56 -05:00
parent f1aa22d9e8
commit 41fecf341b
4 changed files with 28 additions and 3 deletions

View File

@ -95,7 +95,7 @@ signals:
void modulesFailed( QStringList ); /// .. or not void modulesFailed( QStringList ); /// .. or not
// Below, see RequirementsChecker documentation // Below, see RequirementsChecker documentation
void requirementsComplete( bool ); void requirementsComplete( bool );
void requirementsResult( RequirementsList& ); void requirementsResult( RequirementsList );
void requirementsProgress( const QString& ); void requirementsProgress( const QString& );
private slots: private slots:

View File

@ -19,6 +19,7 @@
#define CALAMARES_REQUIREMENT_H #define CALAMARES_REQUIREMENT_H
#include <QList> #include <QList>
#include <QMetaType>
#include <QString> #include <QString>
#include <functional> #include <functional>
@ -57,4 +58,7 @@ struct RequirementEntry
using RequirementsList = QList< RequirementEntry >; using RequirementsList = QList< RequirementEntry >;
} // namespace Calamares } // namespace Calamares
Q_DECLARE_METATYPE(Calamares::RequirementEntry)
#endif #endif

View File

@ -34,7 +34,26 @@
namespace Calamares namespace Calamares
{ {
void static void
registerMetatypes()
{
static bool done = false;
if ( !done )
{
qRegisterMetaType< RequirementEntry >( "RequirementEntry" );
// It's sensitive to the names of types in parameters; in particular
// althrough QList<RequirementEntry> is the same as RequirementsList,
// because we *name* the type as RequirementsList in the parameters,
// we need to register that (as well). Here, be safe and register
// both names.
qRegisterMetaType< QList< RequirementEntry > >( "QList<RequirementEntry>" );
qRegisterMetaType< RequirementsList >( "RequirementsList" );
done = true;
}
}
static void
check( Module * const &m, RequirementsChecker *c ) check( Module * const &m, RequirementsChecker *c )
{ {
RequirementsList l = m->checkRequirements(); RequirementsList l = m->checkRequirements();
@ -49,6 +68,8 @@ RequirementsChecker::RequirementsChecker( QVector< Module* > modules, QObject* p
{ {
m_watchers.reserve( m_modules.count() ); m_watchers.reserve( m_modules.count() );
m_collectedRequirements.reserve( m_modules.count() ); m_collectedRequirements.reserve( m_modules.count() );
registerMetatypes();
} }
RequirementsChecker::~RequirementsChecker() RequirementsChecker::~RequirementsChecker()

View File

@ -53,7 +53,7 @@ signals:
/// @brief Human-readable progress message /// @brief Human-readable progress message
void requirementsProgress( const QString& ); void requirementsProgress( const QString& );
/// @brief Requirements from a single module /// @brief Requirements from a single module
void requirementsResult( RequirementsList& ); void requirementsResult( RequirementsList );
/** @brief When all requirements are collected /** @brief When all requirements are collected
* *
* The argument indicates if all mandatory requirements are satisfied. * The argument indicates if all mandatory requirements are satisfied.