fix(libcutefish): port shared QML modules to Qt6

main
reionwong 4 weeks ago
parent 2386818edf
commit e047cf0b04

@ -15,16 +15,13 @@ include(GenerateExportHeader)
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
set(QT Core Gui Quick QuickControls2 Widgets DBus Xml Concurrent)
find_package(Qt5 REQUIRED ${QT})
set(QT Core Gui Quick QuickControls2 Widgets DBus Xml Concurrent Qml)
find_package(Qt6 REQUIRED ${QT})
# Get the installation directory from qmake
get_target_property(QT_QMAKE_EXECUTABLE ${Qt5Core_QMAKE_EXECUTABLE} IMPORTED_LOCATION)
if(NOT QT_QMAKE_EXECUTABLE)
message(FATAL_ERROR "qmake is not found.")
endif()
# Get the installation directory from Qt 6
find_program(QT_PATHS_EXECUTABLE NAMES qtpaths6 REQUIRED)
execute_process(COMMAND ${QT_QMAKE_EXECUTABLE} -query QT_INSTALL_QML
execute_process(COMMAND ${QT_PATHS_EXECUTABLE} -query QT_INSTALL_QML
OUTPUT_VARIABLE INSTALL_QMLDIR
OUTPUT_STRIP_TRAILING_WHITESPACE
)

@ -11,10 +11,10 @@ set(ACCOUNTS_SRCS
qmlplugins.cpp
)
qt5_add_dbus_interface(ACCOUNTS_SRCS
qt6_add_dbus_interface(ACCOUNTS_SRCS
org.freedesktop.Accounts.User.xml
user_interface)
qt5_add_dbus_interface(ACCOUNTS_SRCS
qt6_add_dbus_interface(ACCOUNTS_SRCS
org.freedesktop.Accounts.xml
accounts_interface)
@ -23,11 +23,11 @@ qt5_add_dbus_interface(ACCOUNTS_SRCS
add_library(cutefishaccounts_qmlplugins SHARED ${ACCOUNTS_SRCS})
target_link_libraries (cutefishaccounts_qmlplugins
Qt5::Core
Qt5::DBus
Qt5::Quick
Qt5::Gui
Qt6::Core
Qt6::DBus
Qt6::Quick
Qt6::Gui
)
install(TARGETS cutefishaccounts_qmlplugins DESTINATION ${INSTALL_QMLDIR}/Cutefish/Accounts)
install(FILES qmldir DESTINATION ${INSTALL_QMLDIR}/Cutefish/Accounts)
install(FILES qmldir DESTINATION ${INSTALL_QMLDIR}/Cutefish/Accounts)

@ -68,16 +68,16 @@ pkg_check_modules(LIBPULSE_MAINLOOP libpulse-mainloop-glib REQUIRED IMPORTED_TAR
add_library(cutefishaudio_qmlplugins SHARED ${audio_SRCS})
target_link_libraries(cutefishaudio_qmlplugins
Qt5::Core
Qt5::Qml
Qt5::Gui
Qt5::Widgets
Qt5::DBus
Qt5::Quick
Qt6::Core
Qt6::Qml
Qt6::Gui
Qt6::Widgets
Qt6::DBus
Qt6::Quick
Canberra::Canberra
PkgConfig::LIBPULSE
PkgConfig::LIBPULSE_MAINLOOP
)
install(TARGETS cutefishaudio_qmlplugins DESTINATION ${INSTALL_QMLDIR}/Cutefish/Audio)
install(FILES ${qml_SRCS} DESTINATION ${INSTALL_QMLDIR}/Cutefish/Audio)
install(FILES ${qml_SRCS} DESTINATION ${INSTALL_QMLDIR}/Cutefish/Audio)

@ -50,7 +50,7 @@ static QVariant convertValue(GConfValue *src)
} else {
switch (src->type) {
case GCONF_VALUE_INVALID:
return QVariant(QVariant::Invalid);
return QVariant();
case GCONF_VALUE_BOOL:
return QVariant((bool)gconf_value_get_bool(src));
case GCONF_VALUE_INT:
@ -90,14 +90,14 @@ static GConfValue *convertString(const QString &str)
static GConfValueType primitiveType(const QVariant &elt)
{
switch (elt.type()) {
case QVariant::String:
switch (elt.typeId()) {
case QMetaType::QString:
return GCONF_VALUE_STRING;
case QVariant::Int:
case QMetaType::Int:
return GCONF_VALUE_INT;
case QVariant::Double:
case QMetaType::Double:
return GCONF_VALUE_FLOAT;
case QVariant::Bool:
case QMetaType::Bool:
return GCONF_VALUE_BOOL;
default:
return GCONF_VALUE_INVALID;
@ -130,26 +130,26 @@ static int convertValue(const QVariant &src, GConfValue **valp)
{
GConfValue *v;
switch (src.type()) {
case QVariant::Invalid:
switch (src.typeId()) {
case QMetaType::UnknownType:
v = nullptr;
break;
case QVariant::Bool:
case QMetaType::Bool:
v = gconf_value_new(GCONF_VALUE_BOOL);
gconf_value_set_bool(v, src.toBool());
break;
case QVariant::Int:
case QMetaType::Int:
v = gconf_value_new(GCONF_VALUE_INT);
gconf_value_set_int(v, src.toInt());
break;
case QVariant::Double:
case QMetaType::Double:
v = gconf_value_new(GCONF_VALUE_FLOAT);
gconf_value_set_float(v, src.toDouble());
break;
case QVariant::String:
case QMetaType::QString:
v = convertString(src.toString());
break;
case QVariant::StringList: {
case QMetaType::QStringList: {
GSList *elts = nullptr;
v = gconf_value_new(GCONF_VALUE_LIST);
gconf_value_set_list_type(v, GCONF_VALUE_STRING);

@ -89,13 +89,13 @@ void SortFilterModel::setFilterRegExp(const QString &exp)
if (exp == filterRegExp()) {
return;
}
QSortFilterProxyModel::setFilterRegExp(QRegExp(exp, Qt::CaseInsensitive));
QSortFilterProxyModel::setFilterRegularExpression(QRegularExpression(exp, QRegularExpression::CaseInsensitiveOption));
Q_EMIT filterRegExpChanged(exp);
}
QString SortFilterModel::filterRegExp() const
{
return QSortFilterProxyModel::filterRegExp().pattern();
return QSortFilterProxyModel::filterRegularExpression().pattern();
}
void SortFilterModel::setFilterString(const QString &filterString)
@ -205,4 +205,4 @@ int SortFilterModel::mapRowFromSource(int row) const
}
QModelIndex idx = sourceModel()->index(row, 0);
return mapFromSource(idx).row();
}
}

@ -3,7 +3,7 @@
#include <QAbstractItemModel>
#include <QJSValue>
#include <QRegExp>
#include <QRegularExpression>
#include <QSortFilterProxyModel>
#include <QVector>
@ -129,4 +129,4 @@ private:
QHash<QString, int> m_roleIds;
};
#endif
#endif

@ -11,6 +11,8 @@
#include <QAbstractListModel>
#include "maps.h"
#include "sink.h"
#include "source.h"
namespace QPulseAudio
{

@ -9,6 +9,7 @@
#include "debug.h"
#include <QObject>
#include <QVariant>
#include <pulse/introspect.h>

@ -7,6 +7,7 @@
#include "listitemmenu.h"
#include <QAbstractItemModel>
#include <QActionGroup>
#include <QMenu>
#include <QQuickItem>
#include <QQuickWindow>

@ -8,17 +8,14 @@
#include <QObject>
#include <QPointer>
#include <QAbstractItemModel>
#include <QQuickItem>
#include <QQmlParserStatus>
class QAbstractItemModel;
class QMenu;
class QQuickItem;
#include "../pulseobject.h"
#include "../pulseaudio.h"
namespace QPulseAudio
{
class CardModel;
class PulseObject;
}
class QMenu;
class ListItemMenu : public QObject, public QQmlParserStatus
{

@ -10,6 +10,8 @@
#include <QPointer>
#include <QQmlParserStatus>
#include "volumeobject.h"
struct pa_stream;
namespace QPulseAudio

@ -14,13 +14,13 @@ set(bluezqtextensionplugin_SRCS
add_library(cutefishbluez_qmlplugins SHARED ${bluezqtextensionplugin_SRCS})
find_package(KF5BluezQt REQUIRED)
find_package(KF6BluezQt REQUIRED)
target_link_libraries(cutefishbluez_qmlplugins
Qt5::Core
Qt5::Qml
Qt5::DBus
KF5::BluezQt
Qt6::Core
Qt6::Qml
Qt6::DBus
KF6::BluezQt
)
install(TARGETS cutefishbluez_qmlplugins DESTINATION ${INSTALL_QMLDIR}/Cutefish/Bluez)

@ -9,41 +9,16 @@
#include <QDBusObjectPath>
#include <QFile>
#include <QRandomGenerator>
#include <QStandardPaths>
#include <QXmlStreamReader>
#include <BluezQt/Device>
#include <QDebug>
#include <QThread>
#include <QThreadStorage>
#include <unistd.h>
static int cRandom()
{
static QThreadStorage<bool> initialized_threads;
if (!initialized_threads.localData()) {
unsigned int seed;
initialized_threads.setLocalData(true);
QFile urandom(QStringLiteral("/dev/urandom"));
bool opened = urandom.open(QIODevice::ReadOnly | QIODevice::Unbuffered);
if (!opened || urandom.read(reinterpret_cast<char *>(&seed), sizeof(seed)) != sizeof(seed)) {
// silence warnings about use of deprecated qsrand()/qrand()
// Porting to QRandomGenerator::global() instead might result in no new seed set for the generator behind qrand()
// which then might affect other places indirectly relying on this.
// So just keeping the old calls here, as this method is also deprecated and will disappear together with qsrand/qrand.
QT_WARNING_PUSH
QT_WARNING_DISABLE_CLANG("-Wdeprecated-declarations")
QT_WARNING_DISABLE_GCC("-Wdeprecated-declarations")
// No /dev/urandom... try something else.
qsrand(getpid());
seed = qrand() ^ time(nullptr) ^ reinterpret_cast<quintptr>(QThread::currentThread());
}
qsrand(seed);
}
return qrand();
QT_WARNING_POP
return static_cast<int>(QRandomGenerator::system()->generate());
}
BluetoothAgent::BluetoothAgent(QObject *parent)
@ -122,7 +97,7 @@ QString BluetoothAgent::getPin(BluezQt::DevicePtr device)
m_fromDatabase = true;
if (m_pin.startsWith(QLatin1String("max:"))) {
m_fromDatabase = false;
int num = m_pin.rightRef(m_pin.length() - 4).toInt();
int num = m_pin.right(m_pin.length() - 4).toInt();
m_pin = QString::number(cRandom()).left(num);
}

@ -9,7 +9,7 @@
#include "declarativeadapter.h"
#include "declarativedevice.h"
static int devicesCountDeclarativeAdapterFunction(QQmlListProperty<DeclarativeDevice> *property)
static qsizetype devicesCountDeclarativeAdapterFunction(QQmlListProperty<DeclarativeDevice> *property)
{
Q_ASSERT(qobject_cast<DeclarativeAdapter *>(property->object));
DeclarativeAdapter *adapter = static_cast<DeclarativeAdapter *>(property->object);
@ -17,7 +17,7 @@ static int devicesCountDeclarativeAdapterFunction(QQmlListProperty<DeclarativeDe
return adapter->m_devices.count();
}
static DeclarativeDevice *devicesAtDeclarativeAdapterFunction(QQmlListProperty<DeclarativeDevice> *property, int index)
static DeclarativeDevice *devicesAtDeclarativeAdapterFunction(QQmlListProperty<DeclarativeDevice> *property, qsizetype index)
{
Q_ASSERT(qobject_cast<DeclarativeAdapter *>(property->object));
DeclarativeAdapter *adapter = static_cast<DeclarativeAdapter *>(property->object);

@ -14,7 +14,7 @@
#include <BluezQt/Adapter>
#include <BluezQt/Device>
static int adaptersCountFunction(QQmlListProperty<DeclarativeAdapter> *property)
static qsizetype adaptersCountFunction(QQmlListProperty<DeclarativeAdapter> *property)
{
Q_ASSERT(qobject_cast<DeclarativeManager *>(property->object));
DeclarativeManager *manager = static_cast<DeclarativeManager *>(property->object);
@ -22,7 +22,7 @@ static int adaptersCountFunction(QQmlListProperty<DeclarativeAdapter> *property)
return manager->m_adapters.count();
}
static DeclarativeAdapter *adaptersAtFunction(QQmlListProperty<DeclarativeAdapter> *property, int index)
static DeclarativeAdapter *adaptersAtFunction(QQmlListProperty<DeclarativeAdapter> *property, qsizetype index)
{
Q_ASSERT(qobject_cast<DeclarativeManager *>(property->object));
DeclarativeManager *manager = static_cast<DeclarativeManager *>(property->object);
@ -30,7 +30,7 @@ static DeclarativeAdapter *adaptersAtFunction(QQmlListProperty<DeclarativeAdapte
return manager->m_adapters.values().at(index);
}
static int devicesCountFunction(QQmlListProperty<DeclarativeDevice> *property)
static qsizetype devicesCountFunction(QQmlListProperty<DeclarativeDevice> *property)
{
Q_ASSERT(qobject_cast<DeclarativeManager *>(property->object));
DeclarativeManager *manager = static_cast<DeclarativeManager *>(property->object);
@ -38,7 +38,7 @@ static int devicesCountFunction(QQmlListProperty<DeclarativeDevice> *property)
return manager->m_devices.count();
}
static DeclarativeDevice *devicesAtFunction(QQmlListProperty<DeclarativeDevice> *property, int index)
static DeclarativeDevice *devicesAtFunction(QQmlListProperty<DeclarativeDevice> *property, qsizetype index)
{
Q_ASSERT(qobject_cast<DeclarativeManager *>(property->object));
DeclarativeManager *manager = static_cast<DeclarativeManager *>(property->object);

@ -25,11 +25,11 @@ set(NETWORKMGR_SRCS
add_library(cutefishmpris_qmlplugins SHARED ${NETWORKMGR_SRCS})
target_link_libraries (cutefishmpris_qmlplugins
Qt5::Core
Qt5::Quick
Qt5::Gui
Qt5::DBus
Qt6::Core
Qt6::Quick
Qt6::Gui
Qt6::DBus
)
install(TARGETS cutefishmpris_qmlplugins DESTINATION ${INSTALL_QMLDIR}/Cutefish/Mpris)
install(FILES qmldir DESTINATION ${INSTALL_QMLDIR}/Cutefish/Mpris)
install(FILES qmldir DESTINATION ${INSTALL_QMLDIR}/Cutefish/Mpris)

@ -34,12 +34,17 @@
#include <QtCore/QSignalMapper>
static const QString mprisNameSpace = QStringLiteral("org.mpris.MediaPlayer2.*");
static const QString mprisNameSpace = QStringLiteral("org.mpris.MediaPlayer2.");
static const QString dBusService = QStringLiteral("org.freedesktop.DBus");
static const QString dBusObjectPath = QStringLiteral("/org/freedesktop/DBus");
static const QString dBusInterface = QStringLiteral("org.freedesktop.DBus");
static const QString dBusNameOwnerChangedSignal = QStringLiteral("NameOwnerChanged");
static inline bool isMprisService(const QString &service)
{
return service.startsWith(mprisNameSpace);
}
static inline QDBusConnection getDBusConnection()
{
#ifdef USE_SYSTEM_DBUS
@ -69,9 +74,7 @@ MprisManager::MprisManager(QObject *parent)
QStringList serviceNames = connection.interface()->registeredServiceNames();
QStringList::const_iterator i = serviceNames.constBegin();
while (i != serviceNames.constEnd()) {
QRegExp rx(mprisNameSpace);
rx.setPatternSyntax(QRegExp::Wildcard);
if (rx.exactMatch(*i)) {
if (isMprisService(*i)) {
onServiceAppeared(*i);
}
@ -174,9 +177,7 @@ void MprisManager::setCurrentService(const QString &service)
return;
}
QRegExp rx(mprisNameSpace);
rx.setPatternSyntax(QRegExp::Wildcard);
if (!rx.exactMatch(service)) {
if (!isMprisService(service)) {
qmlInfo(this) << service << "is not a proper Mpris2 service";
return;
}
@ -381,9 +382,7 @@ void MprisManager::onNameOwnerChanged(const QString &service, const QString &old
// bus, not just the ones for our name space of interest, and we
// will have to filter on our own :(
QRegExp rx(mprisNameSpace);
rx.setPatternSyntax(QRegExp::Wildcard);
if (!rx.exactMatch(service)) {
if (!isMprisService(service)) {
return;
}

@ -40,13 +40,13 @@
#define MPRISPLAYER_P_H
#include <QtCore/QObject>
#include <QtCore/QStringList>
#include <QtDBus/QtDBus>
QT_BEGIN_NAMESPACE
class QByteArray;
template<class T> class QList;
template<class Key, class Value> class QMap;
class QString;
class QStringList;
class QVariant;
QT_END_NAMESPACE

@ -42,10 +42,10 @@ MprisPlayerInterface::MprisPlayerInterface(const QString &service, const QString
, m_canPause(false)
, m_canPlay(false)
, m_canSeek(false)
, m_loopStatus(Mpris::None)
, m_loopStatus(QStringLiteral("None"))
, m_maximumRate(1)
, m_minimumRate(1)
, m_playbackStatus(Mpris::Stopped)
, m_playbackStatus(QStringLiteral("Stopped"))
, m_position(0)
, m_rate(1)
, m_shuffle(false)
@ -156,4 +156,3 @@ void MprisPlayerInterface::onPropertyChanged(const QString &propertyName, const
<< propertyName;
}
}

@ -153,7 +153,7 @@ QVariant DBusExtendedAbstractInterface::internalPropGet(const char *propname, vo
if (m_useCache) {
int propertyIndex = metaObject()->indexOfProperty(propname);
QMetaProperty metaProperty = metaObject()->property(propertyIndex);
return QVariant(metaProperty.type(), propertyPtr);
return QVariant(metaProperty.metaType(), propertyPtr);
}
if (m_sync) {
@ -188,8 +188,8 @@ QVariant DBusExtendedAbstractInterface::internalPropGet(const char *propname, vo
// is this metatype registered?
const char *expectedSignature = "";
if (int(metaProperty.type()) != QMetaType::QVariant) {
expectedSignature = QDBusMetaType::typeToSignature(metaProperty.userType());
if (metaProperty.metaType().id() != QMetaType::QVariant) {
expectedSignature = QDBusMetaType::typeToSignature(metaProperty.metaType());
if (0 == expectedSignature) {
QString errorMessage =
QStringLiteral("Type %1 must be registered with Qt D-Bus "
@ -205,7 +205,7 @@ QVariant DBusExtendedAbstractInterface::internalPropGet(const char *propname, vo
}
asyncProperty(propname);
return QVariant(metaProperty.type(), propertyPtr);
return QVariant(metaProperty.metaType(), propertyPtr);
}
}
@ -243,7 +243,7 @@ void DBusExtendedAbstractInterface::internalPropSet(const char *propname, const
return;
}
asyncSetProperty(propname, QVariant(metaProperty.type(), propertyPtr));
asyncSetProperty(propname, QVariant(metaProperty.metaType(), propertyPtr));
}
}
@ -379,22 +379,22 @@ QVariant DBusExtendedAbstractInterface::demarshall(const QString &interface, con
Q_ASSERT(metaProperty.isValid());
Q_ASSERT(error != 0);
if (value.userType() == metaProperty.userType()) {
if (value.metaType() == metaProperty.metaType()) {
// No need demarshalling. Passing back straight away ...
*error = QDBusError();
return value;
}
QVariant result = QVariant(metaProperty.userType(), (void*)0);
QVariant result = QVariant(metaProperty.metaType(), nullptr);
QString errorMessage;
const char *expectedSignature = QDBusMetaType::typeToSignature(metaProperty.userType());
const char *expectedSignature = QDBusMetaType::typeToSignature(metaProperty.metaType());
if (value.userType() == qMetaTypeId<QDBusArgument>()) {
if (value.metaType().id() == qMetaTypeId<QDBusArgument>()) {
// demarshalling a DBus argument ...
QDBusArgument dbusArg = value.value<QDBusArgument>();
if (expectedSignature == dbusArg.currentSignature().toLatin1()) {
QDBusMetaType::demarshall(dbusArg, metaProperty.userType(), result.data());
QDBusMetaType::demarshall(dbusArg, metaProperty.metaType(), result.data());
if (!result.isValid()) {
errorMessage = QStringLiteral("Unexpected failure demarshalling "
"upon PropertiesChanged signal arrival "
@ -415,7 +415,7 @@ QVariant DBusExtendedAbstractInterface::demarshall(const QString &interface, con
QString::fromLatin1(expectedSignature));
}
} else {
const char *actualSignature = QDBusMetaType::typeToSignature(value.userType());
const char *actualSignature = QDBusMetaType::typeToSignature(value.metaType());
errorMessage = QStringLiteral("Unexpected `%1' (%2) "
"upon PropertiesChanged signal arrival "

@ -42,20 +42,20 @@ set(NETWORKMGR_SRCS
qmlplugins.h
)
find_package(KF5NetworkManagerQt REQUIRED)
find_package(KF5ModemManagerQt REQUIRED)
find_package(KF6NetworkManagerQt REQUIRED)
find_package(KF6ModemManagerQt REQUIRED)
add_library(cutefishnm_qmlplugins SHARED ${NETWORKMGR_SRCS})
generate_export_header(cutefishnm_qmlplugins EXPORT_FILE_NAME ${CMAKE_CURRENT_BINARY_DIR}/networkmanager_export.h BASE_NAME NetworkManager)
target_link_libraries (cutefishnm_qmlplugins
Qt5::Core
Qt5::Quick
Qt5::Gui
Qt5::DBus
Qt6::Core
Qt6::Quick
Qt6::Gui
Qt6::DBus
KF5::NetworkManagerQt
KF5::ModemManagerQt
KF6::NetworkManagerQt
KF6::ModemManagerQt
)
install(TARGETS cutefishnm_qmlplugins DESTINATION ${INSTALL_QMLDIR}/Cutefish/NetworkManagement)

@ -75,7 +75,7 @@ bool AppletProxyModel::filterAcceptsRow(int source_row, const QModelIndex &sourc
// slaves are filtered-out when not searching for a connection (makes the state of search results clear)
const bool isSlave = sourceModel()->data(index, NetworkModel::SlaveRole).toBool();
if (isSlave && filterRegExp().isEmpty()) {
if (isSlave && filterRegularExpression().pattern().isEmpty()) {
return false;
}
@ -95,11 +95,11 @@ bool AppletProxyModel::filterAcceptsRow(int source_row, const QModelIndex &sourc
return false;
}
if (filterRegExp().isEmpty()) {
if (filterRegularExpression().pattern().isEmpty()) {
return true;
}
return sourceModel()->data(index, NetworkModel::ItemUniqueNameRole).toString().contains(filterRegExp());
return sourceModel()->data(index, NetworkModel::ItemUniqueNameRole).toString().contains(filterRegularExpression().pattern());
}
bool AppletProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const

@ -12,14 +12,14 @@ set(SCREEN_SRCS
qt5/screen.cpp
)
find_package(Qt5 REQUIRED COMPONENTS Core Gui Quick)
find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick)
add_library(cutefishscreen_qmlplugins SHARED ${SCREEN_SRCS})
target_link_libraries (cutefishscreen_qmlplugins
Qt5::Core
Qt5::Quick
Qt5::Gui
Qt6::Core
Qt6::Quick
Qt6::Gui
)
install(TARGETS cutefishscreen_qmlplugins DESTINATION ${INSTALL_QMLDIR}/Cutefish/Screen)

@ -4,16 +4,16 @@ set(SCREEN_SRCS
plugin.cpp
)
find_package(Qt5 REQUIRED COMPONENTS DBus)
find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick DBus)
add_library(cutefishsystem_qmlplugins SHARED ${SCREEN_SRCS})
target_link_libraries (cutefishsystem_qmlplugins
Qt5::Core
Qt5::Quick
Qt5::Gui
Qt5::DBus
Qt6::Core
Qt6::Quick
Qt6::Gui
Qt6::DBus
)
install(TARGETS cutefishsystem_qmlplugins DESTINATION ${INSTALL_QMLDIR}/Cutefish/System)
install(FILES qmldir DESTINATION ${INSTALL_QMLDIR}/Cutefish/System)
install(FILES qmldir DESTINATION ${INSTALL_QMLDIR}/Cutefish/System)

Loading…
Cancel
Save