diff options
Diffstat (limited to 'src/qtwaylandscanner/qtwaylandscanner.cpp')
-rw-r--r-- | src/qtwaylandscanner/qtwaylandscanner.cpp | 50 |
1 files changed, 31 insertions, 19 deletions
diff --git a/src/qtwaylandscanner/qtwaylandscanner.cpp b/src/qtwaylandscanner/qtwaylandscanner.cpp index 0e9eb0e5c..7f2769fa9 100644 --- a/src/qtwaylandscanner/qtwaylandscanner.cpp +++ b/src/qtwaylandscanner/qtwaylandscanner.cpp @@ -1,8 +1,9 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include <QCoreApplication> #include <QFile> +#include <QFileInfo> #include <QXmlStreamReader> #include <vector> @@ -196,7 +197,7 @@ Scanner::WaylandEvent Scanner::readEvent(QXmlStreamReader &xml, bool request) .type = byteArrayValue(xml, "type"), .interface = byteArrayValue(xml, "interface"), .summary = byteArrayValue(xml, "summary"), - .allowNull = boolValue(xml, "allowNull"), + .allowNull = boolValue(xml, "allow-null"), }; event.arguments.push_back(std::move(argument)); } @@ -422,6 +423,8 @@ bool Scanner::process() //QByteArray preProcessorProtocolName = QByteArray(m_protocolName).replace('-', '_').toUpper(); QByteArray preProcessorProtocolName = QByteArray(m_protocolName).toUpper(); + const QByteArray fileBaseName = QFileInfo(file).completeBaseName().toLocal8Bit(); + std::vector<WaylandInterface> interfaces; while (m_xml->readNextStartElement()) { @@ -435,9 +438,9 @@ bool Scanner::process() return false; printf("// This file was generated by qtwaylandscanner\n"); - printf("// source file is %s\n\n", qPrintable(m_protocolFilePath)); + printf("// source file is %s\n\n", qPrintable(QFileInfo(file).fileName())); - for (auto b : qAsConst(m_includes)) + for (auto b : std::as_const(m_includes)) printf("#include %s\n", b.constData()); auto printExportMacro = [this](const char *prefix, const QByteArray &preProcessorProtocolName) { @@ -467,9 +470,9 @@ bool Scanner::process() printf("\n"); printf("#include \"wayland-server-core.h\"\n"); if (m_headerPath.isEmpty()) - printf("#include \"wayland-%s-server-protocol.h\"\n", QByteArray(m_protocolName).replace('_', '-').constData()); + printf("#include \"wayland-%s-server-protocol.h\"\n", fileBaseName.constData()); else - printf("#include <%s/wayland-%s-server-protocol.h>\n", m_headerPath.constData(), QByteArray(m_protocolName).replace('_', '-').constData()); + printf("#include <%s/wayland-%s-server-protocol.h>\n", m_headerPath.constData(), fileBaseName.constData()); printf("#include <QByteArray>\n"); printf("#include <QMultiMap>\n"); printf("#include <QString>\n"); @@ -632,13 +635,14 @@ bool Scanner::process() if (m_option == ServerCode) { if (m_headerPath.isEmpty()) - printf("#include \"qwayland-server-%s.h\"\n", QByteArray(m_protocolName).replace('_', '-').constData()); + printf("#include \"qwayland-server-%s.h\"\n", fileBaseName.constData()); else - printf("#include <%s/qwayland-server-%s.h>\n", m_headerPath.constData(), QByteArray(m_protocolName).replace('_', '-').constData()); + printf("#include <%s/qwayland-server-%s.h>\n", m_headerPath.constData(), fileBaseName.constData()); printf("\n"); printf("QT_BEGIN_NAMESPACE\n"); printf("QT_WARNING_PUSH\n"); printf("QT_WARNING_DISABLE_GCC(\"-Wmissing-field-initializers\")\n"); + printf("QT_WARNING_DISABLE_CLANG(\"-Wmissing-field-initializers\")\n"); printf("\n"); printf("namespace QtWaylandServer {\n"); @@ -695,7 +699,7 @@ bool Scanner::process() printf(" %s::~%s()\n", interfaceName, interfaceName); printf(" {\n"); - printf(" for (auto resource : qAsConst(m_resource_map))\n"); + printf(" for (auto resource : std::as_const(m_resource_map))\n"); printf(" resource->%s_object = nullptr;\n", interfaceNameStripped); printf("\n"); printf(" if (m_resource)\n"); @@ -936,9 +940,12 @@ bool Scanner::process() printf(",\n"); QByteArray cType = waylandToCType(a.type, a.interface); QByteArray qtType = waylandToQtType(a.type, a.interface, e.request); - if (a.type == "string") - printf(" %s.toUtf8().constData()", a.name.constData()); - else if (a.type == "array") + if (a.type == "string") { + printf(" "); + if (a.allowNull) + printf("%s.isNull() ? nullptr : ", a.name.constData()); + printf("%s.toUtf8().constData()", a.name.constData()); + } else if (a.type == "array") printf(" &%s_data", a.name.constData()); else if (cType == qtType) printf(" %s", a.name.constData()); @@ -961,9 +968,9 @@ bool Scanner::process() printf("#define %s\n", inclusionGuard.constData()); printf("\n"); if (m_headerPath.isEmpty()) - printf("#include \"wayland-%s-client-protocol.h\"\n", QByteArray(m_protocolName).replace('_', '-').constData()); + printf("#include \"wayland-%s-client-protocol.h\"\n", fileBaseName.constData()); else - printf("#include <%s/wayland-%s-client-protocol.h>\n", m_headerPath.constData(), QByteArray(m_protocolName).replace('_', '-').constData()); + printf("#include <%s/wayland-%s-client-protocol.h>\n", m_headerPath.constData(), fileBaseName.constData()); printf("#include <QByteArray>\n"); printf("#include <QString>\n"); printf("\n"); @@ -972,6 +979,7 @@ bool Scanner::process() printf("QT_BEGIN_NAMESPACE\n"); printf("QT_WARNING_PUSH\n"); printf("QT_WARNING_DISABLE_GCC(\"-Wmissing-field-initializers\")\n"); + printf("QT_WARNING_DISABLE_CLANG(\"-Wmissing-field-initializers\")\n"); QByteArray clientExport; if (m_headerPath.size()) @@ -1072,13 +1080,14 @@ bool Scanner::process() if (m_option == ClientCode) { if (m_headerPath.isEmpty()) - printf("#include \"qwayland-%s.h\"\n", QByteArray(m_protocolName).replace('_', '-').constData()); + printf("#include \"qwayland-%s.h\"\n", fileBaseName.constData()); else - printf("#include <%s/qwayland-%s.h>\n", m_headerPath.constData(), QByteArray(m_protocolName).replace('_', '-').constData()); + printf("#include <%s/qwayland-%s.h>\n", m_headerPath.constData(), fileBaseName.constData()); printf("\n"); printf("QT_BEGIN_NAMESPACE\n"); printf("QT_WARNING_PUSH\n"); printf("QT_WARNING_DISABLE_GCC(\"-Wmissing-field-initializers\")\n"); + printf("QT_WARNING_DISABLE_CLANG(\"-Wmissing-field-initializers\")\n"); printf("\n"); printf("namespace QtWayland {\n"); printf("\n"); @@ -1222,9 +1231,12 @@ bool Scanner::process() } else { QByteArray cType = waylandToCType(a.type, a.interface); QByteArray qtType = waylandToQtType(a.type, a.interface, e.request); - if (a.type == "string") - printf(" %s.toUtf8().constData()", a.name.constData()); - else if (a.type == "array") + if (a.type == "string") { + printf(" "); + if (a.allowNull) + printf("%s.isNull() ? nullptr : ", a.name.constData()); + printf("%s.toUtf8().constData()", a.name.constData()); + } else if (a.type == "array") printf(" &%s_data", a.name.constData()); else if (cType == qtType) printf(" %s", a.name.constData()); |